Python3用ReportLab生成pdf报表,不学何来惊喜?

2024-02-15 08:50

本文主要是介绍Python3用ReportLab生成pdf报表,不学何来惊喜?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在平时工作中,习惯了汇总与总结。汇总了相关数据后,经常会把总结内容制作成相关报表,以供领导审阅。每当见到领导发出啧啧的赞叹声时,我也就心满意足了。

可一想到,每次做的都是重复,寡淡无味的内容时,未免心里有了些许的失落,关键是领导每次都只是口头表扬两句,没有实际的行动,我想你知道我说的什么意思。

1

好在咱是程序员,可以用Python3中的ReportLab生成pdf报表,以解眼前的尴尬。若要获得ReportLab开发包的功能,需要在【终端】窗口,通过pip3 install reportlab命令进行安装,安装成功的截图在这。

2

不知你的领导是如何的,反正我的领导就喜欢看图文并茂的报表。记得有一次,实在没数据可用,我就放一张漂亮的女明星照在上面。你还别说,这招真管用,平时反馈很慢的领导,那次一看完就马上来找我了--直接劈头盖脸的把我骂了一顿,说我放的女明星是PS过的…。我一时语塞,不知怎么回答才好,只好埋下头,眼里含着泪,默默地敲出了以下代码。

from reportlab.pdfbase import pdfmetrics

from reportlab.pdfbase.ttfonts import TTFont

from reportlab.platypus import Table, SimpleDocTemplate, Paragraph

from reportlab.lib.pagesizes import letter

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

 

 

# 注册字体

pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))

 

 

class Graphs:

    def __init__(self):

        pass

 

    # 绘制标题

    @staticmethod

    def draw_title():

        style = getSampleStyleSheet()

        ct = style['Normal']

        ct.fontName = 'SimSun'

        ct.fontSize = 18

        # 设置行距

        ct.leading = 50

        # 颜色

        ct.textColor = colors.green

        # 居中

        ct.alignment = 1

        # 添加标题并居中

        title = Paragraph('程序员的兴趣调查报告', ct)

        return title

 

    # 绘制内容

    @staticmethod

    def draw_text():

        style = getSampleStyleSheet()

        # 常规字体(非粗体或斜体)

        ct = style['Normal']

        # 使用的字体s

        ct.fontName = 'SimSun'

        ct.fontSize = 14

        # 设置自动换行

        ct.wordWrap = 'CJK'

        # 居左对齐

        ct.alignment = 0

        # 第一行开头空格

        ct.firstLineIndent = 32

        # 设置行距

        ct.leading = 30

        text = Paragraph('程序员,是互联网、移动互联网和即将到来的物联网时期的弄潮儿。'

                         '这群特立独行的人才,不知平时最喜欢什么?他们的兴趣真想让人一探究竟。'

                         '经过七七49天的调研,终于形成了一份不具备权威性的统计报告--《程序员2019年上半年兴趣调查报告》,现公布出来,以飨读者。', ct)

       return text

 

    # 绘制表格

    @staticmethod

    def draw_table(*args):

        col_width = 60

        style = [

            ('FONTNAME', (0, 0), (-1, -1), 'SimSun'),  # 字体

            ('BACKGROUND', (0, 0), (-1, 0), '#d5dae6'),  # 设置第一行背景颜色

            ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 对齐

            ('VALIGN', (-1, 0), (-2, 0), 'MIDDLE'),  # 对齐

            ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),  # 设置表格框线为grey色,线宽为0.5

        ]

        table = Table(args, colWidths=col_width, style=style)

        return table

 

    # 创建图表

    @staticmethod

    def draw_bar(bar_data=[], ax=[], items=[]):

        drawing = Drawing(500, 250)

        bc = VerticalBarChart()

        bc.x = 35

        bc.y = 100

        bc.height = 120

        bc.width = 350

        bc.data = bar_data

        bc.strokeColor = colors.black

        bc.valueAxis.valueMin = 0

        bc.valueAxis.valueMax = 100

        bc.valueAxis.valueStep = 10

        bc.categoryAxis.labels.dx = 8

        bc.categoryAxis.labels.dy = -10

        bc.categoryAxis.labels.angle = 20

        bc.categoryAxis.categoryNames = ax

        # 图示

        leg = Legend()

        leg.fontName = 'SimSun'

        leg.alignment = 'right'

        leg.boxAnchor = 'ne'

        leg.x = 465

        leg.y = 220

        leg.dxTextSpace = 10

        leg.columnMaximum = 3

        leg.colorNamePairs = items

        drawing.add(leg)

        drawing.add(bc)

        return drawing

 

 

if __name__ == "__main__":

    content = list()

    # 添加标题

    content.append(Graphs.draw_title())

    # 添加段落

    content.append(Graphs.draw_text())

    # 添加表格数据

    data = [('兴趣', '2019-1', '2019-2', '2019-3', '2019-4', '2019-5', '2019-6'),

            ('开发', 50, 80, 60, 35, 40, 45),

            ('编程', 25, 60, 55, 45, 60, 80),

            ('敲代码', 30, 90, 75, 80, 50, 46)]

    content.append(Graphs.draw_table(*data))

    # 添加图表

    b_data = [(50, 80, 60, 35, 40, 45), (25, 60, 55, 45, 60, 80), (30, 90, 75, 80, 50, 46)]

    ax_data = ['2019-1', '2019-2', '2019-3', '2019-4', '2019-5', '2019-6']

    leg_items = [(colors.red, '开发'), (colors.green, '编程'), (colors.blue, '敲代码')]

    content.append(Graphs.draw_bar(b_data, ax_data, leg_items))

    # 生成pdf文件

    doc = SimpleDocTemplate('report.pdf', pagesize=letter)

    doc.build(content)

这篇关于Python3用ReportLab生成pdf报表,不学何来惊喜?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/710916

相关文章

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns