大家好,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 报告相关推荐

  1. Python 可轻松生成图文并茂的PDF报告!

    大家好,reportlab是Python的一个标准库,可以画图.画表格.编辑文字,最后可以输出PDF格式.它的逻辑和编辑一个word文档或者PPT很像.有两种方法: 1)建立一个空白文档,然后在上面写 ...

  2. 其实特简单,不足100行 Python 代码轻松制作动态鞭炮

    大家好,农历虎年要来了,放鞭炮贺新春,在我国有两千多年历史.关于鞭炮的起源,有个有趣的传说. 西方山中有焉,长尺余,一足,性不畏人.犯之令人寒热,名曰年惊惮,后人遂象其形,以火药为之.--<神异 ...

  3. Python+PIL 轻松制作九宫格图片

    一个尺寸自适应的图片切割器,Python实现,PIL,Image 前言 520前夕,又接了个活.对方的需求就是把一张照片切割成九宫格,这样发微信朋友圈感觉更炫酷一点.比如说520当天发对象的照片吖,就 ...

  4. 风变python怎么样_Python取代Excel?风变编程带你了解如何更好地学Python!

    当前最简单.最流行的编程语言是什么?是Python.最近,谷歌公布的编程语言流行指数显示,Python目前仍然是全球范围内最受欢迎的技术语言. 而得益于简洁.易读.易维护等特点,Python可广泛运用 ...

  5. 计算营业额python代码_真香还是假香,Python处理分析128张Excel表格竟然不到3秒?| 附案例数据集...

    原标题:真香还是假香,Python处理分析128张Excel表格竟然不到3秒?| 附案例数据集 作者:吹牛Z 本文转自公众号:数据不吹牛 更新完Pandas基础教程,后台有不少旁友留言,想要了解怎么用 ...

  6. python代码编写工具_编写更好的Python代码的终极指南

    python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...

  7. 【宇麦科技】苹果全家桶如何联动群晖NAS,让你的“苹果”更香

    使用群晖 NAS 的同学 不少也是 iPhone 的用户 这一期准备了一份小攻略 让您的设备更有价值! iPhone 使用手机,换新机是必然的,同时肯定避免不了迁移文件.每次迁移最怕的就是新手机变成了 ...

  8. 弘辽科技:淘宝特价版,阿里“一元更香”与拼多多“真香”的较量

    原标题<弘辽科技:淘宝特价版,阿里"一元更香"与拼多多"真香"的较量> 淘宝特价版和拼多多的拉锯战,再次释放出互联网流量见顶.存量竞争愈发激烈的信号 ...

  9. 词云可视化:四行Python代码轻松上手到精通

    词云可视化:四行Python代码轻松上手到精通 文章目录 词云可视化:四行Python代码轻松上手到精通 本课概要 关于本课程 `粉丝答疑交流QQ群:953712961` `微信赞赏码` 不需要写代码 ...

最新文章

  1. NOIP 2012 同余方程
  2. knllgobjinfo: MISSING Streams multi-version data dictionary!!! 的一次处理 (二)
  3. bzoj4514[Sdoi2016]数字配对
  4. springboot不会运行gc_SpringBoot项目深度优化和Jvm调优
  5. 朱兴杰(1986-),男,泰康保险集团股份有限公司数据信息中心应用创新高级工程师...
  6. tar打包的时候忽略一些目录
  7. java并发初探ConcurrentHashMap
  8. springboot后台怎么获取前端传过来的excel_基于SpringBoot的全自动办公系统源码文档全部免费分享...
  9. 整理综合布线系统中材料用量的计算公式
  10. buildroot 下载和make nconfig
  11. bash不能运行c语言,解决:无法加载文件 C:\\Program Files\\.. 因为在此系统上禁止运行脚本。...
  12. XP系统计算机桌面图标不见,xp系统桌面图标不显示的详细方法
  13. 参与流片是一种怎样的体验
  14. PTA 钻石真题卷——均是素数
  15. 浏览器网页谷歌翻译-使用js脚本
  16. opencv将坐标点按逆时针顺序存放
  17. python爬虫,爬起点小说网小说
  18. 人性化老人手机设计(二)
  19. 在投资的不确定性中寻找确定性(二)
  20. mailbox unavailable

热门文章

  1. k8S中的MySQL如何扩容_Kubernetes 中进行 PVC 的扩容 互联网技术圈 互联网技术圈
  2. 赵小楼《天道》《遥远的救世主》深度解析(60)芮小丹的独立意识与丁元英的尊重
  3. 马云退出阿里巴巴旗下5家公司
  4. 【第四章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】
  5. 鹏业云计价i20“小数规则”应用
  6. SpringBootc出现Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.clo
  7. Root Guard - CCIE之Switching篇
  8. WPF实现类似MDI子窗体的功能
  9. 2013 android手机杀毒软件 评测,测试总评与安卓手机杀软推荐
  10. 员工管理系统之添加修改删除操作