Python自動化辦公之生成PDF報告詳解
因為工作需要經(jīng)常需要生成很多的PDF報告給客戶查看產(chǎn)品效果以及過程的講解。
每次都需要按照一定的格式的編寫文檔并生成PDF報告,這樣重復(fù)性的工作實在太累。
想著可以使用python生成一份給用戶看的報告,里面需要插入圖片、表格、文字說明等等。
使用第三方的python非標(biāo)準(zhǔn)模塊reportlab就能滿足直接生成PDF報告的需要,由于是非標(biāo)準(zhǔn)庫需要使用pip的方式安裝一下該模塊。
使用pip安裝reportlab模塊,支持生成PDF文檔。
pip?install?reportlab?-i?https://pypi.tuna.tsinghua.edu.cn/simple
若是在安裝過程中出現(xiàn)缺失C++環(huán)境導(dǎo)致構(gòu)建失敗時,可以直接選擇使用wheel文件的方式安裝reportlab模塊。
.whl文件的下載地址如下:https://www.lfd.uci.edu/~gohlke/pythonlibs/
下載完成之后存儲到本地磁盤,按照存放的路徑安裝reportLab模塊即可,安裝方式可以參考下面的安裝方式。
pip?install?wheel?-i?https://pypi.tuna.tsinghua.edu.cn/simple pip?install?D:\downloads\reportlab-3.5.57-cp36-cp36m-win_amd64.whl
提前將reportlab模塊中需要使用到的python對象導(dǎo)入到當(dāng)前的代碼塊中。
from?reportlab.pdfbase?import?pdfmetrics??#?注冊字體 from?reportlab.pdfbase.ttfonts?import?TTFont??#?字體類 from?reportlab.platypus?import?Table,?SimpleDocTemplate,?Paragraph,?Image??#?報告內(nèi)容相關(guān)類 from?reportlab.lib.pagesizes?import?letter??#?頁面的標(biāo)志尺寸(8.5*inch,?11*inch) from?reportlab.lib.styles?import?getSampleStyleSheet??#?文本樣式 from?reportlab.lib?import?colors??#?顏色模塊 from?reportlab.lib.units?import?cm??#?單位:cm
模塊導(dǎo)入完成之后,第一步需要設(shè)置PDF文檔中使用到的字體,字體可以根據(jù)自己的喜好自行設(shè)置。
#?Registering?a?font?named?'simfang'?with?the?file?'simfang.ttf'. pdfmetrics.registerFont(TTFont('simfang',?'simfang.ttf'))
我這里選擇的字體是simfang.ttf,關(guān)于windows系統(tǒng)中的默認字體可以下面的路徑中查看。
開發(fā)業(yè)務(wù)代碼之前,我們可以將公共的部分提到最外面,這里使用getSampleStyleSheet函數(shù)將獲取到所有的樣式表后面在其他地方也可以使用。
#?Getting?a?list?of?styles?that?can?be?used?in?the?document. style_list?=?getSampleStyleSheet()
1、插入PDF標(biāo)題
大標(biāo)題設(shè)置字體樣式對象為Heading1,字體顏色為綠色,大小為18并且加粗。
def?insert_full_title(title_name=None): ????""" ????This?function?takes?in?a?title?name?and?returns?the?full?title?name. ????:param?title_name:?The?name?of?the?title?you?want?to?insert ????""" ????font_?=?style_list['Heading1'] ????font_.fontName?=?'simfang' ????font_.fontSize?=?18 ????font_.leading?=?50 ????font_.textColor?=?colors.green ????font_.alignment?=?1 ????font_.bold?=?True ????return?Paragraph(title_name,?font_)
2、插入PDF小標(biāo)題
小標(biāo)題設(shè)置字體樣式對象為Normal,字體顏色為紅色,大小為15并且不加粗。
def?insert_lettle_title(lettle_name=None): ????""" ????:param?lettle_name:?The?name?of?the?lettle?you?want?to?insert ????""" ????font_?=?style_list['Normal'] ????font_.fontName?=?'simfang' ????font_.fontSize?=?15 ????font_.leading?=?30 ????font_.textColor?=?colors.red ????return?Paragraph(lettle_name,?font_)
3、插入普通段落文本
普通文本設(shè)置字體樣式對象為Normal,字體顏色為默認,大小為12并且不加粗,開啟自動換行模式。
def?insert_text(text=None): ????""" ????>?This?function?inserts?text?into?the?current?document ????:param?text:?The?text?to?insert ????""" ????font_?=?style_list['Normal'] ????font_.fontName?=?'simfang' ????font_.fontSize?=?12 ????font_.wordWrap?=?'CJK' ????font_.alignment?=?0 ????font_.firstLineIndent?=?32 ????font_.leading?=?25 ????return?Paragraph(text,?font_)
4、插入PDF圖片
將圖片插入到PDF文檔對象中比較簡單,只需要設(shè)置需要插入圖片的本地路徑即可。
def?insert_image(image_path=None): ????""" ????>?This?function?inserts?an?image?into?the?notebook ????:param?image_path:?The?path?to?the?image?you?want?to?insert ????""" ????img?=?Image(image_path) ????img.drawWidth?=?5?*?cm ????img.drawHeight?=?8?*?cm ????return?img
5、插入PDF表格
插入表格時,表格的格式可以根據(jù)自己的喜好設(shè)置表格的標(biāo)題、字體樣式、字體大小以及是否需要合并等參數(shù)來控制需要插入的表格對象。
def?insert_table(*args): ????""" ????It?inserts?a?table?into?the?database. ????""" ????col_width?=?120 ????style?=?[ ????????('FONTNAME',?(0,?0),?(-1,?-1),?'simfang'),??#?字體 ????????('FONTSIZE',?(0,?0),?(-1,?0),?12),??#?第一行的字體大小 ????????('FONTSIZE',?(0,?1),?(-1,?-1),?10),??#?第二行到最后一行的字體大小 ????????('BACKGROUND',?(0,?0),?(-1,?0),?'#d5dae6'),??#?設(shè)置第一行背景顏色 ????????('ALIGN',?(0,?0),?(-1,?-1),?'CENTER'),??#?第一行水平居中 ????????('ALIGN',?(0,?1),?(-1,?-1),?'LEFT'),??#?第二行到最后一行左右左對齊 ????????('VALIGN',?(0,?0),?(-1,?-1),?'MIDDLE'),??#?所有表格上下居中對齊 ????????('TEXTCOLOR',?(0,?0),?(-1,?-1),?colors.darkslategray),??#?設(shè)置表格內(nèi)文字顏色 ????????('GRID',?(0,?0),?(-1,?-1),?0.5,?colors.grey),??#?設(shè)置表格框線為grey色,線寬為0.5 ????] ????table?=?Table(args,?colWidths=col_width,?style=style) ????return?table
上述就是PDF文檔中常用的對象,最后通過添加對應(yīng)的內(nèi)容參數(shù)即可生成PDF文檔并保存到本地磁盤當(dāng)中。
#?A?special?variable?in?Python?that?evaluates?to?`True`?if?the?module?is?being?run?as?the?main?program. if?__name__?==?'__main__': ????pdf_?=?list() ????pdf_.append(insert_full_title('數(shù)據(jù)測試報告')) ????pdf_.append(insert_text( ????????'Python 是一門編程語言。?您可以在服務(wù)器上使用 Python 來創(chuàng)建 Web 應(yīng)用程序。通過實例學(xué)習(xí)?我們的 TIY 編輯器使學(xué)習(xí) Python 變得簡單,它能夠同時顯示代碼和結(jié)果。?')) ????pdf_.append(insert_image('./excle源數(shù)據(jù).png')) ????pdf_.append(insert_lettle_title('數(shù)據(jù)內(nèi)容展示:')) ????data?=?[ ????????('職位名稱',?'平均薪資',?'較上年增長率'), ????????('數(shù)據(jù)分析師',?'18.5K',?'25%'), ????????('高級數(shù)據(jù)分析師',?'25.5K',?'14%'), ????????('資深數(shù)據(jù)分析師',?'29.3K',?'10%') ????] ????pdf_.append(insert_table(*data)) ????doc?=?SimpleDocTemplate('測試報告.pdf',?pagesize=letter) ????doc.build(pdf_)
到此這篇關(guān)于Python自動化辦公之生成PDF報告詳解的文章就介紹到這了,更多相關(guān)Python生成PDF報告內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)飛機大戰(zhàn)(面向過程)
這篇文章主要為大家詳細介紹了python面向過程實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05python 利用openpyxl讀取Excel表格中指定的行或列教程
這篇文章主要介紹了python 利用openpyxl讀取Excel表格中指定的行或列教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02