<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

reportlab如何輸入Python的第三方庫

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 作者:馬哥Linux運維 ? 2022-08-08 10:35 ? 次閱讀

reportlab是Python的一個標準庫,可以畫圖、畫表格、編輯文字,最后可以輸出PDF格式。它的邏輯和編輯一個word文檔或者PPT很像。有兩種方法:

1)建立一個空白文檔,然后在上面寫文字、畫圖等;

2)建立一個空白list,以填充表格的形式插入各種文本框、圖片等,最后生成PDF文檔。

因為需要產生一份給用戶看的報告,里面需要插入圖片、表格等,所以采用的是第二種方法。

安裝第三方庫

reportlab輸入Python的第三方庫,使用前需要先安裝:pip install reportlab

模塊導入

提前導入相關內容,并且注冊字體。(注冊字體前需要先準備好字體文件)

fromreportlab.pdfbaseimportpdfmetrics#注冊字體
fromreportlab.pdfbase.ttfontsimportTTFont#字體類
fromreportlab.platypusimportTable,SimpleDocTemplate,Paragraph,Image#報告內容相關類
fromreportlab.lib.pagesizesimportletter#頁面的標志尺寸(8.5*inch,11*inch)
fromreportlab.lib.stylesimportgetSampleStyleSheet#文本樣式
fromreportlab.libimportcolors#顏色模塊
fromreportlab.graphics.charts.barchartsimportVerticalBarChart#圖表類
fromreportlab.graphics.charts.legendsimportLegend#圖例類
fromreportlab.graphics.shapesimportDrawing#繪圖工具
fromreportlab.lib.unitsimportcm#單位:cm

#注冊字體(提前準備好字體文件,如果同一個文件需要多種字體可以注冊多個)
pdfmetrics.registerFont(TTFont('SimSun','SimSun.ttf'))

封裝不同內容對應的函數

創建一個Graphs類,通過不同的靜態方法提供不同的報告內容,包括:標題、普通段落、圖片、表格和圖表。函數中的相關數據目前絕大多數都是固定值,可以根據情況自行設置成相關參數。

classGraphs:
#繪制標題
@staticmethod
defdraw_title(title:str):
#獲取所有樣式表
style=getSampleStyleSheet()
#拿到標題樣式
ct=style['Heading1']
#單獨設置樣式相關屬性
ct.fontName='SimSun'#字體名
ct.fontSize=18#字體大小
ct.leading=50#行間距
ct.textColor=colors.green#字體顏色
ct.alignment=1#居中
ct.bold=True
#創建標題對應的段落,并且返回
returnParagraph(title,ct)

#繪制小標題
@staticmethod
defdraw_little_title(title:str):
#獲取所有樣式表
style=getSampleStyleSheet()
#拿到標題樣式
ct=style['Normal']
#單獨設置樣式相關屬性
ct.fontName='SimSun'#字體名
ct.fontSize=15#字體大小
ct.leading=30#行間距
ct.textColor=colors.red#字體顏色
#創建標題對應的段落,并且返回
returnParagraph(title,ct)

#繪制普通段落內容
@staticmethod
defdraw_text(text:str):
#獲取所有樣式表
style=getSampleStyleSheet()
#獲取普通樣式
ct=style['Normal']
ct.fontName='SimSun'
ct.fontSize=12
ct.wordWrap='CJK'#設置自動換行
ct.alignment=0#左對齊
ct.firstLineIndent=32#第一行開頭空格
ct.leading=25
returnParagraph(text,ct)

#繪制表格
@staticmethod
defdraw_table(*args):
#列寬度
col_width=120
style=[
('FONTNAME',(0,0),(-1,-1),'SimSun'),#字體
('FONTSIZE',(0,0),(-1,0),12),#第一行的字體大小
('FONTSIZE',(0,1),(-1,-1),10),#第二行到最后一行的字體大小
('BACKGROUND',(0,0),(-1,0),'#d5dae6'),#設置第一行背景顏色
('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),#設置表格內文字顏色
('GRID',(0,0),(-1,-1),0.5,colors.grey),#設置表格框線為grey色,線寬為0.5
#('SPAN',(0,1),(0,2)),#合并第一列二三行
#('SPAN',(0,3),(0,4)),#合并第一列三四行
#('SPAN',(0,5),(0,6)),#合并第一列五六行
#('SPAN',(0,7),(0,8)),#合并第一列五六行
]
table=Table(args,colWidths=col_width,style=style)
returntable

#創建圖表
@staticmethod
defdraw_bar(bar_data:list,ax:list,items:list):
drawing=Drawing(500,250)
bc=VerticalBarChart()
bc.x=45#整個圖表的x坐標
bc.y=45#整個圖表的y坐標
bc.height=200#圖表的高度
bc.width=350#圖表的寬度
bc.data=bar_data
bc.strokeColor=colors.black#頂部和右邊軸線的顏色
bc.valueAxis.valueMin=5000#設置y坐標的最小值
bc.valueAxis.valueMax=26000#設置y坐標的最大值
bc.valueAxis.valueStep=2000#設置y坐標的步長
bc.categoryAxis.labels.dx=2
bc.categoryAxis.labels.dy=-8
bc.categoryAxis.labels.angle=20
bc.categoryAxis.categoryNames=ax

#圖示
leg=Legend()
leg.fontName='SimSun'
leg.alignment='right'
leg.boxAnchor='ne'
leg.x=475#圖例的x坐標
leg.y=240
leg.dxTextSpace=10
leg.columnMaximum=3
leg.colorNamePairs=items
drawing.add(leg)
drawing.add(bc)
returndrawing

#繪制圖片
@staticmethod
defdraw_img(path):
img=Image(path)#讀取指定路徑下的圖片
img.drawWidth=5*cm#設置圖片的寬度
img.drawHeight=8*cm#設置圖片的高度
returnimg

生成報告

if__name__=='__main__':
#創建內容對應的空列表
content=list()

#添加標題
content.append(Graphs.draw_title('數據分析就業薪資'))

#添加圖片
content.append(Graphs.draw_img('抗疫必勝.png'))

#添加段落文字
content.append(Graphs.draw_text('眾所周知,大數據分析師崗位是香餑餑,近幾年數據分析熱席卷了整個互聯網行業,與數據分析的相關的崗位招聘、培訓數不勝數。很多人前赴后繼,想要參與到這波紅利當中。那么數據分析師就業前景到底怎么樣呢?'))
#添加小標題
content.append(Graphs.draw_title(''))
content.append(Graphs.draw_little_title('不同級別的平均薪資'))
#添加表格
data=[
('職位名稱','平均薪資','較上年增長率'),
('數據分析師','18.5K','25%'),
('高級數據分析師','25.5K','14%'),
('資深數據分析師','29.3K','10%')
]
content.append(Graphs.draw_table(*data))

#生成圖表
content.append(Graphs.draw_title(''))
content.append(Graphs.draw_little_title('熱門城市的就業情況'))
b_data=[(25400,12900,20100,20300,20300,17400),(15800,9700,12982,9283,13900,7623)]
ax_data=['BeiJing','ChengDu','ShenZhen','ShangHai','HangZhou','NanJing']
leg_items=[(colors.red,'平均薪資'),(colors.green,'招聘量')]
content.append(Graphs.draw_bar(b_data,ax_data,leg_items))

#生成pdf文件
doc=SimpleDocTemplate('report.pdf',pagesize=letter)
doc.build(content)

生成報告的結果如下:

aa37216a-1593-11ed-ba43-dac502259ad0.png

審核編輯:彭靜

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    3868

    瀏覽量

    61309
  • PDF
    PDF
    +關注

    關注

    1

    文章

    163

    瀏覽量

    33006
  • python
    +關注

    關注

    51

    文章

    4675

    瀏覽量

    83466

原文標題:Python生成圖文并茂的PDF報告

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Labview如何內嵌操作第三方EXE程序!

    自己在網上搜了下相關資料,能把第三方EXE內嵌進入容器里,但是有個問題,這個第三方軟件必須手動拖到容器正中間,手動最大化。請問有什么方法可以自動實現嗎? 下圖是我內嵌的POLL 軟件。如圖!
    發表于 04-18 14:26

    stm32H743IIT6串口2跟第三方設備通訊,不插USB就通訊不了怎么解決?

    stm32H743IIT6串口2跟第三方設備通訊。插上USB就可以通訊,不插USB就通訊不了,有沒有大神幫忙解決下
    發表于 03-22 06:42

    Meta Quest頭顯將支持多款安卓第三方應用并行

    Meta已悄然啟動了與此相關的功能,意味著Quest頭顯可同時操作多個第三方Android應用。在此之前,Quest對第三方Android應用有嚴格限制,用戶每次僅能打開一個,無法實現同屏幕并行多個第三方應用進程。
    的頭像 發表于 03-11 10:58 ?219次閱讀

    使用cubemx 生成usb驅動和配置第三方fatfs,fread讀取大于100k的文件,會超時的原因?

    使用cubemx 生成usb驅動和配置第三方fatfs,打開文件沒有報錯,使用fread讀取文件的時候大于100k的文件,會讀超時,小于100k正常讀完,為什么
    發表于 03-07 06:35

    python第三方庫有哪些

    Python 作為一門功能強大的編程語言,擁有豐富的第三方庫,幾乎覆蓋了各個領域的應用。下面是一些常見且廣泛應用的 Python 第三方庫的總結,希望能為您提供幫助。 NumPy(Nu
    的頭像 發表于 11-29 14:31 ?815次閱讀

    OpenAtom OpenHarmony 三方創建發布及安全隱私檢測

    密碼。 請將公鑰上傳至OpenHarmony三方中心倉【個人中心】-【認證管理】下:點擊頁面左上角的“新增”按鈕,并將公鑰文件(mykey.pub)的內容粘貼到公鑰輸入框中。 請將對應私鑰文件路徑
    發表于 11-13 17:27

    Tablib:一個Python第三方數據導出模塊

    Tablib是一個Python第三方數據導出模塊,它支持以下文件格式的導出: Excel JSON YAML Pandas DataFrames HTML Jira TSV ODS CSV DBF
    的頭像 發表于 11-02 15:57 ?426次閱讀
    Tablib:一個<b class='flag-5'>Python</b>的<b class='flag-5'>第三方</b>數據導出模塊

    yfinance:獲取數據的Python第三方模塊

    yfinance 是一個使用 Yahoo! 獲取數據的 Python 第三方模塊。它支持獲取最細到1分鐘級的歷史數據及股票基本面數據,是免費獲得美股分鐘級及以上粒度數據的不二之選。 1.準備 開始
    的頭像 發表于 10-21 14:32 ?1003次閱讀

    最受歡迎的第三方平臺——呼叫中心系統

    中小企業一定要選擇正規的呼叫中心供應商,只有應有強大的第三方合作平臺,才能擁有更專業的系統團隊以及系統維護平臺,只有可信的團隊才能為企業帶來良好的業績。 本公司呼叫中心系統憑借多年的呼叫中心
    發表于 09-20 17:54

    Python第三方的安裝#Python

    程序函數python
    未來加油dz
    發布于 :2023年08月30日 18:56:34

    如何在蜂鳥處理器核的基礎上擴展第三方指令?

    想咨詢一下如何在蜂鳥處理器核的基礎上擴展第三方指令,使用戶自定義指令,并如何構建機器碼等內容? 我看了胡老師的RISC-V處理器設計的書里面講的使用custom1-4來進行擴展,并以EAI為實例進行
    發表于 08-16 07:36

    如何確定OpenVINO中第三方組件的相關許可?

    無法確定 OpenVINO?中第三方組件的相關許可。
    發表于 08-15 06:45

    學會安裝第三方開源庫

    你好,我是愛吃魚香ROS的小魚。秉承著拒絕重復造輪子的ROS精神,本節我們學習如何在我們的工程里安裝第三方開源庫。
    的頭像 發表于 07-13 14:35 ?629次閱讀
    學會安裝<b class='flag-5'>第三方</b>開源庫

    第三方供應商風險評估|不要單獨管理第三方風險|虹科分享

    使用ProcessUnity和虹科網絡安全評級的整體方法保護您的供應商生態系統賽義亞研究所的一項新研究發現,98%的組織與遭受入侵的第三方有業務往來。報告還發現,公司平均有11個第三方關系,以及數百
    的頭像 發表于 05-31 09:34 ?562次閱讀
    <b class='flag-5'>第三方</b>供應商風險評估|不要單獨管理<b class='flag-5'>第三方</b>風險|虹科分享

    在SpringBoot中重試調用第三方API教程

    作為后端程序員,我們的日常工作就是調用一些第三方服務,將數據存入數據庫,返回信息給前端。但你不能保證所有的事情一直都很順利。像有些第三方API,偶爾會出現超時。此時,我們要重試幾次,這取決于你的重試策略。
    的頭像 發表于 05-11 10:43 ?482次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>