Python3用ReportLab生成pdf報(bào)表,不學(xué)何來(lái)驚喜?

在平時(shí)工作中廊酣,習(xí)慣了匯總與總結(jié)能耻。匯總了相關(guān)數(shù)據(jù)后,經(jīng)常會(huì)把總結(jié)內(nèi)容制作成相關(guān)報(bào)表亡驰,以供領(lǐng)導(dǎo)審閱晓猛。每當(dāng)見到領(lǐng)導(dǎo)發(fā)出嘖嘖的贊嘆聲時(shí),我也就心滿意足了隐解。

可一想到鞍帝,每次做的都是重復(fù),寡淡無(wú)味的內(nèi)容時(shí)煞茫,未免心里有了些許的失落帕涌,關(guān)鍵是領(lǐng)導(dǎo)每次都只是口頭表?yè)P(yáng)兩句,沒有實(shí)際的行動(dòng)续徽,我想你知道我說(shuō)的什么意思蚓曼。

1

好在咱是程序員,可以用Python3中的ReportLab生成pdf報(bào)表钦扭,以解眼前的尷尬纫版。若要獲得ReportLab開發(fā)包的功能,需要在【終端】窗口客情,通過(guò)pip3 install reportlab命令進(jìn)行安裝其弊,安裝成功的截圖在這。

2

不知你的領(lǐng)導(dǎo)是如何的膀斋,反正我的領(lǐng)導(dǎo)就喜歡看圖文并茂的報(bào)表梭伐。記得有一次,實(shí)在沒數(shù)據(jù)可用仰担,我就放一張漂亮的女明星照在上面糊识。你還別說(shuō),這招真管用,平時(shí)反饋很慢的領(lǐng)導(dǎo)赂苗,那次一看完就馬上來(lái)找我了--直接劈頭蓋臉的把我罵了一頓愉耙,說(shuō)我放的女明星是PS過(guò)的…。我一時(shí)語(yǔ)塞拌滋,不知怎么回答才好朴沿,只好埋下頭,眼里含著淚鸠真,默默地敲出了以下代碼悯仙。

from reportlab.pdfbase import pdfmetrics

from reportlab.pdfbase.ttfonts import TTFont

from reportlab.platypus import Table, SimpleDocTemplate, Paragraph

from reportlab.lib.pagesizes import letter

from reportlab.lib.styles import getSampleStyleSheet

from reportlab.lib import colors

from reportlab.graphics.charts.barcharts import VerticalBarChart

from reportlab.graphics.charts.legends import Legend

from reportlab.graphics.shapes import Drawing



#?注冊(cè)字體

pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))



class Graphs:

?def __init__(self):

?pass


?#?繪制標(biāo)題

?@staticmethod

?def draw_title():

?style = getSampleStyleSheet()

?ct = style['Normal']

?ct.fontName = 'SimSun'

?ct.fontSize = 18

?#?設(shè)置行距

?ct.leading = 50

?#?顏色

?ct.textColor = colors.green

?#?居中

?ct.alignment = 1

?#?添加標(biāo)題并居中

?title = Paragraph('程序員的興趣調(diào)查報(bào)告', ct)

?return title


?#?繪制內(nèi)容

?@staticmethod

?def draw_text():

?style = getSampleStyleSheet()

?#?常規(guī)字體(非粗體或斜體)

?ct = style['Normal']

?#?使用的字體s

?ct.fontName = 'SimSun'

?ct.fontSize = 14

?#?設(shè)置自動(dòng)換行

?ct.wordWrap = 'CJK'

?#?居左對(duì)齊

?ct.alignment = 0

?#?第一行開頭空格

?ct.firstLineIndent = 32

?#?設(shè)置行距

?ct.leading = 30

?text = Paragraph('程序員龄毡,是互聯(lián)網(wǎng)吠卷、移動(dòng)互聯(lián)網(wǎng)和即將到來(lái)的物聯(lián)網(wǎng)時(shí)期的弄潮兒。'

?'這群特立獨(dú)行的人才沦零,不知平時(shí)最喜歡什么?他們的興趣真想讓人一探究竟祭隔。'

?'經(jīng)過(guò)七七49天的調(diào)研,終于形成了一份不具備權(quán)威性的統(tǒng)計(jì)報(bào)告--《程序員2019年上半年興趣調(diào)查報(bào)告》路操,現(xiàn)公布出來(lái)疾渴,以饗讀者。', ct)

???????return text


?#?繪制表格

?@staticmethod

?def draw_table(*args):

?col_width = 60

?style = [

?('FONTNAME', (0, 0), (-1, -1), 'SimSun'),?#?字體

?('BACKGROUND', (0, 0), (-1, 0), '#d5dae6'),?#?設(shè)置第一行背景顏色

???('ALIGN', (0, 0), (-1, -1), 'CENTER'),?#?對(duì)齊

?('VALIGN', (-1, 0), (-2, 0), 'MIDDLE'),?#?對(duì)齊

?('GRID', (0, 0), (-1, -1), 0.5, colors.grey),?#?設(shè)置表格框線為grey色屯仗,線寬為0.5

?]

?table = Table(args, colWidths=col_width, style=style)

?return table


?#?創(chuàng)建圖表

?@staticmethod

?def draw_bar(bar_data=[], ax=[], items=[]):

?drawing = Drawing(500, 250)

?bc = VerticalBarChart()

?bc.x = 35

?bc.y = 100

?bc.height = 120

?bc.width = 350

?bc.data = bar_data

?bc.strokeColor = colors.black

?bc.valueAxis.valueMin = 0

?bc.valueAxis.valueMax = 100

?bc.valueAxis.valueStep = 10

?bc.categoryAxis.labels.dx = 8

?bc.categoryAxis.labels.dy = -10

??bc.categoryAxis.labels.angle = 20

?bc.categoryAxis.categoryNames = ax

?#?圖示

?leg = Legend()

?leg.fontName = 'SimSun'

?leg.alignment = 'right'

?leg.boxAnchor = 'ne'

?leg.x = 465

?leg.y = 220

?leg.dxTextSpace = 10

?leg.columnMaximum = 3

?leg.colorNamePairs = items

?drawing.add(leg)

?drawing.add(bc)

?return drawing



if __name__ == "__main__":

?content = list()

?#?添加標(biāo)題

?content.append(Graphs.draw_title())

?#?添加段落

?content.append(Graphs.draw_text())

?#?添加表格數(shù)據(jù)

?data = [('興趣', '2019-1', '2019-2', '2019-3', '2019-4', '2019-5', '2019-6'),

?('開發(fā)', 50, 80, 60, 35, 40, 45),

?('編程', 25, 60, 55, 45, 60, 80),

?('敲代碼', 30, 90, 75, 80, 50, 46)]

?content.append(Graphs.draw_table(*data))

?#?添加圖表

?b_data = [(50, 80, 60, 35, 40, 45), (25, 60, 55, 45, 60, 80), (30, 90, 75, 80, 50, 46)]

?ax_data = ['2019-1', '2019-2', '2019-3', '2019-4', '2019-5', '2019-6']

?leg_items = [(colors.red, '開發(fā)'), (colors.green, '編程'), (colors.blue, '敲代碼')]

?content.append(Graphs.draw_bar(b_data, ax_data, leg_items))

?#?生成pdf文件

?doc = SimpleDocTemplate('report.pdf', pagesize=letter)

?doc.build(content)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搞坝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子魁袜,更是在濱河造成了極大的恐慌桩撮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峰弹,死亡現(xiàn)場(chǎng)離奇詭異店量,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鞠呈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門融师,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蚁吝,你說(shuō)我怎么就攤上這事旱爆。” “怎么了窘茁?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵怀伦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我庙曙,道長(zhǎng)空镜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮吴攒,結(jié)果婚禮上张抄,老公的妹妹穿的比我還像新娘。我一直安慰自己洼怔,他們只是感情好署惯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镣隶,像睡著了一般极谊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上安岂,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天轻猖,我揣著相機(jī)與錄音,去河邊找鬼域那。 笑死咙边,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的次员。 我是一名探鬼主播败许,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淑蔚!你這毒婦竟也來(lái)了市殷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刹衫,失蹤者是張志新(化名)和其女友劉穎醋寝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绪妹,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甥桂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邮旷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黄选。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖婶肩,靈堂內(nèi)的尸體忽然破棺而出办陷,到底是詐尸還是另有隱情,我是刑警寧澤律歼,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布民镜,位于F島的核電站,受9級(jí)特大地震影響险毁,放射性物質(zhì)發(fā)生泄漏制圈。R本人自食惡果不足惜们童,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲸鹦。 院中可真熱鬧慧库,春花似錦、人聲如沸馋嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)葛菇。三九已至甘磨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眯停,已是汗流浹背济舆。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庵朝,地道東北人吗冤。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓又厉,卻偏偏與公主長(zhǎng)得像九府,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子覆致,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348