用reportlab 库生成PDF文件的确很方便,对于简单的PDF文件的生成,可以直接使用最基本的一些drawXXX()方法来实现,具有可参见我的另一篇文章(https://blog.csdn.net/cloveses/article/details/79224057)但有时我们需要生成带有表格的报表,经过阅读官方文档,发现reportlab 库可以直接支持生成表格,而且还可以完成较为复杂的表格的生成。现就相关使用方法介绍如下:
一、生成PDF基本流程
1.导入相关的对象:
from reportlab.lib.styles import getSampleStyleSheet,ParagraphStyle
from reportlab.platypus import Paragraph, SimpleDocTemplate, Spacer,Table,TableStyle,PageBreak
from reportlab.pdfbase import pdfmetrics
from reportlab.lib import colors
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4
2.生成简单文档模板
doc = SimpleDocTemplate(file_name,pagesize=(A4[1],A4[0]),topMargin = 15,bottomMargin = 15)
#后面参数中pagesize为文档页面尺寸,topMargin/bottomMargin为文档上/下页边距,当然还有一些其他参数,可参考官方文档。
3.建立页面中需要渲染的各种元素,如段落文本、表格等,并放入一个列表中。
elements = []
pa = Paragraph('TEXT',stylesheet['Normal'])
elements.append(pa)
...
4.调用简单文档模板对象的方法,传入要渲染元素的列表,生成PDF文件。
doc.build(elements)
二、常用的基本元素主要有:
Paragraph 文本段落 Paragraph(text,style)
Spacer 垂直空间留白 Spacer(width, height)
Table 表格 Table(data)
PageBreak 插入分页 PageBreak()
Image 图片 Image(filename, width=None, height=None)
三、样式的使用
这里主要说明一下文本段落和表格的样式:
1.直接使用reportlab库提供的预定义的文本段落样式:
style=getSampleStyleSheet()
这样style对象中包含了一些常用的段落文本的预定义样式,其类似一个字典,使用方法如下:
style['Title']
可以通过调用style实例的list()方法,查看所有的样式及其每个属性的值。当然还可以通过修改预定义样式,来实现自定义样式。如下图所示:
2.表格样式的使用方法如下:
#定义样式列表,其中每元组包括样式命令词、样式应用起始单元坐标、样式应用结束单元坐标和样式值。(具体样式命令词请叁阅官方文档)
style_list =[
('TEXTCOLOR',(0,0),(1,-1),colors.red),
('ALIGN',(0,0),(-1,-1),'CENTER'),
('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('GRID',(0,0), (-1,-1),1,colors.black),
('FONTSIZE',(0,0),(-1,-1),10),
('FONT', (0,0), (-1,-1), 'msyh'),
('BOTTOMPADDING',(0,0),(-1,-1),2),
('TOPPADDING',(0,0),(-1,-1),2)]
#创建表格样式对象
mytab_style = TableStyle(style_list)
#创建表格
mytable = Table(data_list)
# 将样式应用到表格
mytable.setStyle(mytab_style)
表格的样式命令词主要有表格线颜色、对齐方式、文本颜色、字体及大小、单元格合并(SPAN)等。
生成的例表如下图:
