版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第Python生成圖文并茂的PDF報告的方法詳解目錄安裝第三方庫模塊導(dǎo)入封裝不同內(nèi)容對應(yīng)的函數(shù)生成報告reportlab是Python的一個標準庫,可以畫圖、畫表格、編輯文字,最后可以輸出PDF格式。它的邏輯和編輯一個word文檔或者PPT很像。有兩種方法:
1)建立一個空白文檔,然后在上面寫文字、畫圖等;
2)建立一個空白list,以填充表格的形式插入各種文本框、圖片等,最后生成PDF文檔。
因為需要產(chǎn)生一份給用戶看的報告,里面需要插入圖片、表格等,所以采用的是第二種方法。
安裝第三方庫
reportlab輸入Python的第三方庫,使用前需要先安裝:pipinstallreportlab
模塊導(dǎo)入
提前導(dǎo)入相關(guān)內(nèi)容,并且注冊字體。(注冊字體前需要先準備好字體文件)
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
#
頁面的標志尺寸(8.5*inch,
11*inch)
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
#
繪圖工具
from
reportlab.lib.units
import
cm
#
單位:cm
#
注冊字體(提前準備好字體文件,
如果同一個文件需要多種字體可以注冊多個)
pdfmetrics.registerFont(TTFont('SimSun',
'SimSun.ttf'))
封裝不同內(nèi)容對應(yīng)的函數(shù)
創(chuàng)建一個Graphs類,通過不同的靜態(tài)方法提供不同的報告內(nèi)容,包括:標題、普通段落、圖片、表格和圖表。函數(shù)中的相關(guān)數(shù)據(jù)目前絕大多數(shù)都是固定值,可以根據(jù)情況自行設(shè)置成相關(guān)參數(shù)。
class
Graphs:
#
繪制標題
@staticmethod
def
draw_title(title:
str):
#
獲取所有樣式表
style
=
getSampleStyleSheet()
#
拿到標題樣式
ct
=
style['Heading1']
#
單獨設(shè)置樣式相關(guān)屬性
ct.fontName
=
'SimSun'
#
字體名
ct.fontSize
=
18
#
字體大小
ct.leading
=
50
#
行間距
ct.textColor
=
colors.green
#
字體顏色
ct.alignment
=
1
#
居中
ct.bold
=
True
#
創(chuàng)建標題對應(yīng)的段落,并且返回
return
Paragraph(title,
ct)
#
繪制小標題
@staticmethod
def
draw_little_title(title:
str):
#
獲取所有樣式表
style
=
getSampleStyleSheet()
#
拿到標題樣式
ct
=
style['Normal']
#
單獨設(shè)置樣式相關(guān)屬性
ct.fontName
=
'SimSun'
#
字體名
ct.fontSize
=
15
#
字體大小
ct.leading
=
30
#
行間距
ct.textColor
=
colors.red
#
字體顏色
#
創(chuàng)建標題對應(yīng)的段落,并且返回
return
Paragraph(title,
ct)
#
繪制普通段落內(nèi)容
@staticmethod
def
draw_text(text:
str):
#
獲取所有樣式表
style
=
getSampleStyleSheet()
#
獲取普通樣式
ct
=
style['Normal']
ct.fontName
=
'SimSun'
ct.fontSize
=
12
ct.wordWrap
=
'CJK'
#
設(shè)置自動換行
ct.alignment
=
0
#
左對齊
ct.firstLineIndent
=
32
#
第一行開頭空格
ct.leading
=
25
return
Paragraph(text,
ct)
#
繪制表格
@staticmethod
def
draw_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'),
#
設(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
#
('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,
'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)
return
drawing
#
繪制圖片
@staticmethod
def
draw_img(path):
img
=
Image(path)
#
讀取指定路徑下的圖片
img.drawWidth
=
5*cm
#
設(shè)置圖片的寬度
img.drawHeight
=
8*cm
#
設(shè)置圖片的高度
return
img
生成報告
if
__name__
==
'__main__':
#
創(chuàng)建內(nèi)容對應(yīng)的空列表
content
=
list()
#
添加標題
content.append(Graphs.draw_title('數(shù)據(jù)分析就業(yè)薪資'))
#
添加圖片
content.append(Graphs.draw_img('抗疫必勝.png'))
#
添加段落文字
content.append(Graphs.draw_text('眾所周知,大數(shù)據(jù)分析師崗位是香餑餑,近幾年數(shù)據(jù)分析熱席卷了整個互聯(lián)網(wǎng)行業(yè),與數(shù)據(jù)分析的相關(guān)的崗位招聘、培訓(xùn)數(shù)不勝數(shù)。很多人前赴后繼,想要參與到這波紅利當(dāng)中。那么數(shù)據(jù)分析師就業(yè)前景到底怎么樣呢?'))
#
添加小標題
content.append(Graphs.draw_title(''))
content.append(Graphs.draw_little_title('不同級別的平均薪資'))
#
添加表格
data
=
[
('職位名稱',
'平均薪資',
'較上年增長率'),
('數(shù)據(jù)分析師',
'18.5K',
'25%'),
('高級數(shù)據(jù)分析師',
'25.5K',
'14%'),
('資深數(shù)據(jù)分析師',
'29.3K',
'10%')
]
content.append(Graphs.draw_table(*data))
#
生成圖表
content.append(Graphs.draw_title(''))
content.append(Graphs.draw_little_title('熱門城市的就業(yè)情況'))
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.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 永豐鎮(zhèn)衛(wèi)生院請銷假制度
- 餐飲場所衛(wèi)生制度
- 雞場衛(wèi)生防疫工作制度
- 規(guī)范網(wǎng)約車運營管理制度
- 小學(xué)食品衛(wèi)生檢查制度
- 餐廳食品衛(wèi)生獎懲制度
- 交管站財務(wù)制度
- 村衛(wèi)生室醫(yī)師定考制度
- 汽車大修廠運營管理制度
- 婦幼衛(wèi)生上報制度
- T-CCTAS 237-2025 城市軌道交通市域快線車輛運營技術(shù)規(guī)范
- 園林環(huán)衛(wèi)安全培訓(xùn)內(nèi)容課件
- 軟件系統(tǒng)上線測試與驗收報告
- 冬季交通安全測試題及答案解析
- 2025年國家能源局系統(tǒng)公務(wù)員面試模擬題及備考指南
- (2025年標準)圈內(nèi)認主協(xié)議書
- 2025年安徽省中考化學(xué)真題及答案
- 2025年軍隊文職人員統(tǒng)一招聘面試( 臨床醫(yī)學(xué))題庫附答案
- 海馬體核磁掃描課件
- 某電力股份企業(yè)同熱三期2×100萬千瓦項目環(huán)評報告書
- 2026屆上海市部分區(qū)中考一模語文試題含解析
評論
0/150
提交評論