批量处理更香啊,Python 可轻松制作图文并茂的 PDF 报告
大家好,reportlab 是 Python 的一个非常棒的标准库,它可以画图、画表格、编辑文字,可以输出PDF格式。
今天我利用 Python 的 reportlab 工具包制作图文并茂的PDF报表,喜欢本文记得收藏、关注、点赞。
注:完整版代码、技术交流,文末获取
安装第三方库
reportlab输入Python的第三方库,使用前需要先安装:pip install reportlab
模块导入
提前导入相关内容,并且注册字体。(注册字体前需要先准备好字体文件)
from reportlab.pdfbase import pdfmetrics # 注册字体
from reportlab.pdfbase.ttfonts import TTFont # 字体类
from reportlab.platypus import Table, SimpleDocTemplate, Paragraph, Image # 报告内容相关类
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'))
封装不同内容对应的函数
创建一个Graphs类,通过不同的静态方法提供不同的报告内容,包括:标题、普通段落、图片、表格和图表。函数中的相关数据目前绝大多数都是固定值,可以根据情况自行设置成相关参数。
class Graphs:# 绘制标题@staticmethoddef draw_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# 创建标题对应的段落,并且返回return Paragraph(title, ct)# 绘制小标题@staticmethoddef draw_little_title(title: str):# 获取所有样式表style = getSampleStyleSheet()# 拿到标题样式ct = style['Normal']# 单独设置样式相关属性ct.fontName = 'SimSun' # 字体名ct.fontSize = 15 # 字体大小ct.leading = 30 # 行间距ct.textColor = colors.red # 字体颜色# 创建标题对应的段落,并且返回return Paragraph(title, ct)# 绘制普通段落内容@staticmethoddef draw_text(text: str):# 获取所有样式表style = getSampleStyleSheet()# 获取普通样式ct = style['Normal']ct.fontName = 'SimSun'ct.fontSize = 12ct.wordWrap = 'CJK' # 设置自动换行ct.alignment = 0 # 左对齐ct.firstLineIndent = 32 # 第一行开头空格ct.leading = 25return Paragraph(text, ct)# 绘制表格@staticmethoddef draw_table(*args):# 列宽度col_width = 120style = [('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)return table# 创建图表@staticmethoddef draw_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_databc.strokeColor = colors.black # 顶部和右边轴线的颜色bc.valueAxis.valueMin = 5000 # 设置y坐标的最小值bc.valueAxis.valueMax = 26000 # 设置y坐标的最大值bc.valueAxis.valueStep = 2000 # 设置y坐标的步长bc.categoryAxis.labels.dx = 2bc.categoryAxis.labels.dy = -8bc.categoryAxis.labels.angle = 20bc.categoryAxis.categoryNames = ax# 图示leg = Legend()leg.fontName = 'SimSun'leg.alignment = 'right'leg.boxAnchor = 'ne'leg.x = 475 # 图例的x坐标leg.y = 240leg.dxTextSpace = 10leg.columnMaximum = 3leg.colorNamePairs = itemsdrawing.add(leg)drawing.add(bc)return drawing# 绘制图片@staticmethoddef draw_img(path):img = Image(path) # 读取指定路径下的图片img.drawWidth = 5*cm # 设置图片的宽度img.drawHeight = 8*cm # 设置图片的高度return img
生成报告
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)
生成报告的结果如下:
推荐文章
李宏毅《机器学习》国语课程(2022)来了
有人把吴恩达老师的机器学习和深度学习做成了中文版
上瘾了,最近又给公司撸了一个可视化大屏(附源码)
如此优雅,4款 Python 自动数据分析神器真香啊
梳理半月有余,精心准备了17张知识思维导图,这次要讲清统计学
年终汇总:20份可视化大屏模板,直接套用真香(文末附源码)
技术交流
欢迎转载、收藏、有所收获点赞支持一下!数据、代码可以找我获取
目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
- 方式①、发送如下图片至微信,长按识别,后台回复:加群;
- 方式②、添加微信号:dkl88191,备注:来自CSDN
- 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
批量处理更香啊,Python 可轻松制作图文并茂的 PDF 报告相关推荐
- Python 可轻松生成图文并茂的PDF报告!
大家好,reportlab是Python的一个标准库,可以画图.画表格.编辑文字,最后可以输出PDF格式.它的逻辑和编辑一个word文档或者PPT很像.有两种方法: 1)建立一个空白文档,然后在上面写 ...
- 其实特简单,不足100行 Python 代码轻松制作动态鞭炮
大家好,农历虎年要来了,放鞭炮贺新春,在我国有两千多年历史.关于鞭炮的起源,有个有趣的传说. 西方山中有焉,长尺余,一足,性不畏人.犯之令人寒热,名曰年惊惮,后人遂象其形,以火药为之.--<神异 ...
- Python+PIL 轻松制作九宫格图片
一个尺寸自适应的图片切割器,Python实现,PIL,Image 前言 520前夕,又接了个活.对方的需求就是把一张照片切割成九宫格,这样发微信朋友圈感觉更炫酷一点.比如说520当天发对象的照片吖,就 ...
- 风变python怎么样_Python取代Excel?风变编程带你了解如何更好地学Python!
当前最简单.最流行的编程语言是什么?是Python.最近,谷歌公布的编程语言流行指数显示,Python目前仍然是全球范围内最受欢迎的技术语言. 而得益于简洁.易读.易维护等特点,Python可广泛运用 ...
- 计算营业额python代码_真香还是假香,Python处理分析128张Excel表格竟然不到3秒?| 附案例数据集...
原标题:真香还是假香,Python处理分析128张Excel表格竟然不到3秒?| 附案例数据集 作者:吹牛Z 本文转自公众号:数据不吹牛 更新完Pandas基础教程,后台有不少旁友留言,想要了解怎么用 ...
- python代码编写工具_编写更好的Python代码的终极指南
python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...
- 【宇麦科技】苹果全家桶如何联动群晖NAS,让你的“苹果”更香
使用群晖 NAS 的同学 不少也是 iPhone 的用户 这一期准备了一份小攻略 让您的设备更有价值! iPhone 使用手机,换新机是必然的,同时肯定避免不了迁移文件.每次迁移最怕的就是新手机变成了 ...
- 弘辽科技:淘宝特价版,阿里“一元更香”与拼多多“真香”的较量
原标题<弘辽科技:淘宝特价版,阿里"一元更香"与拼多多"真香"的较量> 淘宝特价版和拼多多的拉锯战,再次释放出互联网流量见顶.存量竞争愈发激烈的信号 ...
- 词云可视化:四行Python代码轻松上手到精通
词云可视化:四行Python代码轻松上手到精通 文章目录 词云可视化:四行Python代码轻松上手到精通 本课概要 关于本课程 `粉丝答疑交流QQ群:953712961` `微信赞赏码` 不需要写代码 ...
最新文章
- NOIP 2012 同余方程
- knllgobjinfo: MISSING Streams multi-version data dictionary!!! 的一次处理 (二)
- bzoj4514[Sdoi2016]数字配对
- springboot不会运行gc_SpringBoot项目深度优化和Jvm调优
- 朱兴杰(1986-),男,泰康保险集团股份有限公司数据信息中心应用创新高级工程师...
- tar打包的时候忽略一些目录
- java并发初探ConcurrentHashMap
- springboot后台怎么获取前端传过来的excel_基于SpringBoot的全自动办公系统源码文档全部免费分享...
- 整理综合布线系统中材料用量的计算公式
- buildroot 下载和make nconfig
- bash不能运行c语言,解决:无法加载文件 C:\\Program Files\\.. 因为在此系统上禁止运行脚本。...
- XP系统计算机桌面图标不见,xp系统桌面图标不显示的详细方法
- 参与流片是一种怎样的体验
- PTA 钻石真题卷——均是素数
- 浏览器网页谷歌翻译-使用js脚本
- opencv将坐标点按逆时针顺序存放
- python爬虫,爬起点小说网小说
- 人性化老人手机设计(二)
- 在投资的不确定性中寻找确定性(二)
- mailbox unavailable
热门文章
- k8S中的MySQL如何扩容_Kubernetes 中进行 PVC 的扩容 互联网技术圈 互联网技术圈
- 赵小楼《天道》《遥远的救世主》深度解析(60)芮小丹的独立意识与丁元英的尊重
- 马云退出阿里巴巴旗下5家公司
- 【第四章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】
- 鹏业云计价i20“小数规则”应用
- SpringBootc出现Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.clo
- Root Guard - CCIE之Switching篇
- WPF实现类似MDI子窗体的功能
- 2013 android手机杀毒软件 评测,测试总评与安卓手机杀软推荐
- 员工管理系统之添加修改删除操作