reportlab是Python的一个标准库,可以画图、画表格、编辑文字,最后可以输出PDF格式。它的逻辑和编辑一个word文档或者PPT很像。有两种方法:

1)建立一个空白文档,然后在上面写文字、画图等;

2)建立一个空白list,以填充表格的形式插入各种文本框、图片等,最后生成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)

生成报告的结果如下:

联系方式

目前开通了技术交流群,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式1、添加微信号:dkl88191,备注:来自CSDN
方式2、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

图文并茂,Python轻松生成PDF数据分析报告相关推荐

  1. python轻松生成pdf文档

    前言 python对办公一族来说,是个提高办公效率的得力利器.熟练使用它,可以轻松完成很多繁杂的事情.(文末送读者福利) 它可以轻松地操作Word.Excel.PDF这种文档. 相比较C#.C++等其 ...

  2. 【原创佳作】用Python自制了一张网页,一键自动生成探索性数据分析报告

    今天小编带领大家用Python自制一个自动生成探索性数据分析报告这样的一个工具,大家只需要在浏览器中输入url便可以轻松的访问,如下所示 第一步 首先我们导入所要用到的模块,设置网页的标题.工具栏以及 ...

  3. python ppt自动生成_实战 | Python自动生成PPT调研报告

    原标题:实战 | Python自动生成PPT调研报告 原文: 全文约 3821 字,读完可能需要 5 分钟. 文/JSong @2017.02.28 在数据分析里面有一句话是说,80%的时间要用于数据 ...

  4. python项目分析报告_实战 | Python自动生成PPT分析报告

    原标题:实战 | Python自动生成PPT分析报告 在数据分析里面有一句话是说,80%的时间要用于数据清洗和整理,而我觉得理想的状态应该是把更多的把时间花在数据背后的洞察当中.去年11月在简书占了个 ...

  5. 将Python字符串生成PDF

    笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF.比如,需要把Python字符串'这是测试文件'生成为PDF, 该PDF中含有文字'这是测试文件'. 经过一番检索,笔者决定 ...

  6. python数据生成pdf,Python生成pdf文件的方法

    摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...

  7. SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;

    文章目录 前言 一.配置SonQube生成PDF扫描报告 1.下载gitee开源PDF插件到SonarQube的plugins目录下 2.重启SonarQube载入PDF插件 3.配置SonarQub ...

  8. python数据分析并生成报告界面_如何用Python绘图和制作数据分析报告?

    Live 简介: 你要向老板汇报自己的工作成果,如果光靠生硬的语言或文字来展示,那么老板很有可能听不懂,更没有兴趣看那一堆文字.这会直接影响你的升职加薪.但是你还要还房贷.买车子.旅游.结婚.生孩子. ...

  9. 高效办公!Python 批量生成PDF文档

    日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同. 这种模板套用的场景下,使用Python进行自动化就尤为方便,用最短的时间办 ...

最新文章

  1. linux使用世界时间,linux世界里的时间
  2. Spring为什么建议构造器注入?
  3. ng-admin引用UEditor 插件 Angular-UEditor
  4. 微信统一支付接口返回“签名错误”的可能原因
  5. 离线安装SilverLight
  6. 维修系统php源码,v3.4.0智睿报修管理系统
  7. 电子之TTL和CMOS门电路的区别
  8. 网站调用百度地图展示位置,调用百度开放平台api 动态静态调用
  9. uniapp h5 海报
  10. 《Ivor Horton's Beginning Java》 Chapter1-7 读书笔记
  11. 网络知识汇总(1)-朗文和牛津英语词典网址
  12. 流氓软件 巧压 怎么卸载?
  13. 火灾隐患是查不完的,消防监管要着力于提升单位消防能力
  14. 手把手教你玩多数据源动态切换
  15. [数据集][VOC]高质量的目标检测数据集合集(持续更新)
  16. Shark007 Advanced Codecs 11.8.5版本更新
  17. 音频电平vu显示表软件下载_正点原子开拓者 Nios II资料连载第十章MCU TFT-LCD图片显示实验...
  18. js 触发 select onchange事件
  19. 1104. Path In Zigzag Labelled Binary Tree**
  20. 建立完善的员工晋升机制_【员工晋升机制】多渠道员工晋升机制如何建立

热门文章

  1. 安徽大学电气工程及自动化学院本科实验报告(MATLAB)——六、七章
  2. JBPM工作流(二)——数据库表说明
  3. 资深书虫测评2018年最热网络小说App~看书必备
  4. 火爆科研圈的三维重建技术:Neural radiance fields (NeRF)
  5. Clojure CLR 入门
  6. 【源码阅读】SIR-GN: A Fast Structural Iterative Representation Learning Approach For Graph Nodes
  7. 7.查找——数据结构(严蔚敏 C语言版)
  8. 目前宽带的接入方式有哪些
  9. 国产CPU的6大品牌,3大路线对比
  10. BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Mode