python生成pdf报表,图解数据结构使用python pdf下载

  python生成pdf报表,图解数据结构使用python pdf下载

  Reportlab是Python的标准库,可以画图、画表、编辑文本,最后输出PDF格式。本文将使用reportlab模块生成图文并茂的PDF报告,有兴趣的可以看看。

  00-1010安装第三方库模块,导入打包不同内容对应的函数,生成报表。reportlab是Python的标准库,可以画图、画表、编辑文本,最后以PDF格式输出。其逻辑类似于编辑一个word文档或PPT。有两种方法:

  1)创建一个空白文档,然后写文字、图纸等。在它上面;

  2)建立空白列表,插入各种文本框、图片等。以表格的形式填充,最后生成一个PDF文档。

  因为要为用户制作一个报表,需要插入图片、表格等。采用第二种方法。

  

目录

  Reportlab进入Python的第三方库,使用前需要安装:pip安装reportlab。

  

安装第三方库

  提前导入相关内容,注册字体。(注册字体前需要准备字体文件)

  来自reportlab . pdfbaseimportpdfmetrics #注册字体

  来自reportlab.pdf base . ttfontimportttfont # font class

  来自报告实验室。platypusimportable,simpledoctemplate,paragraph,image #报表内容相关类

  report lab . lib . pagesizesimportletter #中页面的徽标大小(8.5 *英寸,11 *英寸)

  from reportlab . lib . styleimportgetsamplestyle sheet # text style

  Fromreportlab.libimportcolors#颜色模块

  来自report lab . graphics . charts . barchartsimportverticalchart #图表类

  来自report lab . graphics . charts . legends import legend # legend类

  来自report lab . graphics . shapeimportdrawing #绘图工具

  来自reportlab.lib.unitsimportcm #单位:cm

  #注册字体(提前准备好字体文件,如果同一个文件需要多种字体,可以注册多种字体)

  pdf metrics . register font(TT font( SimSun , SimSun.ttf ))

  

模块导入

  创建一个Graphs类,通过不同的静态方法提供不同的报表内容,包括:标题、一般段落、图片、表格和图表。目前函数中的相关数据大多是固定值,可以根据情况设置为相关参数。

  类图:

  #画出标题

  @静态方法

  defdraw _ title(title : str):

  #获取所有样式表

  style=getSampleStyleSheet()

  #获取标题样式

  ct=style[Heading1]

  #单独设置样式相关属性

  Ct.fontName=SimSun# font name

  Ct.fontSize=18#字体大小

  Ct.leading=50#行距

  Ct.textColor=colors.green#字体颜色

  Ct.alignment=1#居中

  ct.bold=True

  #创建与标题相对应的段落并返回

  returnParagraph(标题,ct)

  #绘制副标题

  @静态方法

  defdraw _ 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)

      # 绘制普通段落内容

      @staticmethod

      def draw_text(text: str):

          # 获取所有样式表

          style = getSampleStyleSheet()

          # 获取普通样式

          ct = style[Normal]

          ct.fontName = SimSun

          ct.fontSize = 12

          ct.wordWrap = CJK     # 设置自动换行

          ct.alignment = 0        # 左对齐

          ct.firstLineIndent = 32     # 第一行开头空格

          ct.leading = 25

          return Paragraph(text, ct)

      # 绘制表格

      @staticmethod

      def draw_table(*args):

          # 列宽度

          col_width = 120

          style = [

              (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

      # 创建图表

      @staticmethod

      def 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_data

          bc.strokeColor = colors.black       # 顶部和右边轴线的颜色

          bc.valueAxis.valueMin = 5000           # 设置y坐标的最小值

          bc.valueAxis.valueMax = 26000         # 设置y坐标的最大值

          bc.valueAxis.valueStep = 2000         # 设置y坐标的步长

          bc.categoryAxis.labels.dx = 2

          bc.categoryAxis.labels.dy = -8

          bc.categoryAxis.labels.angle = 20

          bc.categoryAxis.categoryNames = ax

          # 图示

          leg = Legend()

          leg.fontName = SimSun

          leg.alignment = right

          leg.boxAnchor = ne

          leg.x = 475         # 图例的x坐标

          leg.y = 240

          leg.dxTextSpace = 10

          leg.columnMaximum = 3

          leg.colorNamePairs = items

          drawing.add(leg)

          drawing.add(bc)

          return drawing

      # 绘制图片

      @staticmethod

      def 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)

  

  生成报告的结果如下:

  

  以上就是Python生成图文并茂的PDF报告的方法详解的详细内容,更多关于Python生成PDF报告的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: