1、一些比较常见的问题
1.1、正文中中文字体问题
一般是中文字体在报告中没有办法显示,这个时候需要在生成报告时候对字体进行设置
pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))
以上的字体以SimSun为例如果想要使用其他的字体可以直接下载安装,下载后需要按照到reportlab安装包下面的font文件夹中。
1.2、图表中中文字体问题
plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong'] #汉字字体,优先使用楷体,如果找不到楷体则使用黑体
plt.rcParams['font.size'] = 12 # 字体大小
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
2、生成PDF
2.1、导入相关包
import pandas #数据处理
from reportlab.lib import colors #生成PDF颜色相关的包
from reportlab.platypus import Table,TableStyle,Spacer,SimpleDocTemplate,Image#用于PDF中的表格、图片生成
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import inch
from matplotlib import pyplot as plt #画图的包
2.2、标题与描述
style = getSampleStyleSheet()
title = """<para> 标题内容</para>""" #填写标题内容
description = """
<para>
<font face='SimSun'>
该部分是正文内容
</font>
</para>
""" #填写正文内容
D.append(Paragraph(description, style['BodyText']))#将正文内容添加到PDF中
D.append(Paragraph(title, style['Title']))#将标题添加到PDF中
2.3、表格
D = [] #创建一个空列表用于存放内容
data= [['00', '01', '02', '03', '04'],
['10', '11', '12', '13', '14'],
['20', '21', '22', '23', '24'],
['30', '31', '32', '33', '34']]
#表格样式设置,这个样式是按照我的数据设置的,效果可见图片
table_styles = [
('GRID',(0,0),(-1,-1),1,colors.black),
('SPAN',(0,0),(0,1)),#合并单元格
('SPAN',(1,0),(2,0)),#合并单元格
('SPAN',(3,0),(4,0)),
('SPAN',(5,0),(6,0)),
('SPAN',(7,0),(8,0)),
('SPAN',(9,0),(10,0)),
('BACKGROUND', (0, 0), (10, 1), colors.red),#背景颜色
('TEXTCOLOR',(0, 0), (10, 1),colors.white),#设置字体颜色
('FONTSIZE',(0,0),(-1,-1),12),
('ALIGN',(0,0),(-1,-1),'CENTER'),
('FONT',(0,0),(-1,-1),'SimSun')
]
#将表格的内容添加到空列表中用于生成PDF
mytable = Table(table_data_time,rowHeights=30) #表格数据
mytab_style = TableStyle(table_styles) #表格样式
mytable.setStyle(mytab_style)
D.append(mytable)
D.append(Spacer(1,0.4*inch))
注意数据的格式,一般可以使用data = data.to_numpy().tolist() 对数据格式进行转换,使用该方法转换数据的时候需要主要这个转换的数据类型需要是serries或者Dataframe
表格样式.png2.4、图表
如果图表中有中文字体,可在创建图表前增加上面的常见图表问题处理
data = [5, 20, 15, 25, 30]
plt.bar(range(len(data)), data)
plt.title('图表')
plt.tight_layout()
plt.savefig('plot.png')#将图表转化成图片
img = Image('plot.png') #转化程成replotlib中图表格式
D.append(img) # 将图片添加到PDF元素中
2.5、构建PDF元素,生成PDF
doc = SimpleDocTemplate(
"hhh.pdf", #PDF名称
pagesize=(841.89, 585.27),#PDF大小,这个设置有点想PPT中的大小
topMargin=30, #上边距
bottomMargin=30 #下边距
)
doc.build(D)
网友评论