当前位置: 首页 > news >正文

Python 图文:小白也能轻松生成精美 PDF 报告!

摘要:  还在为枯燥的数据报表发愁吗?想让你的 Python 项目报告瞬间高大上?本文将带你学习如何使用 Python 生成图文并茂的 PDF 文件,从此告别单调,让你的数据“活”起来!

一、 引言

想象一下,你正在为公司做一个用户行为分析,如果只是把一堆表格数据扔给老板,他可能很难理解。但如果你能用 Python 生成一份精美的 PDF 报告,包含了各种图表、分析结论,甚至还有代码示例,是不是瞬间就高大上了呢?

二、 Python 生成 PDF 的利器:ReportLab 库

Python 社区提供了丰富的库来处理 PDF 文件,其中 ReportLab 库功能强大且易于上手,非常适合用来生成图文并茂的报告。

安装 ReportLab:

pip install reportlab

三、 小试牛刀:生成简单的 PDF 文档

让我们先从一个简单的例子开始,了解 ReportLab 的基本用法:

from reportlab.pdfgen import canvas# 创建一个 PDF 文件
c = canvas.Canvas("hello.pdf")# 设置字体和字号
c.setFont("Helvetica", 16)# 在指定位置写入文本
c.drawString(100, 750, "Hello, world!")# 保存 PDF 文件
c.save()

代码解读:

1、from reportlab.pdfgen import canvas: 导入 canvas 模块,它提供了创建 PDF 文件的基本功能。

2、c = canvas.Canvas("hello.pdf"): 创建一个名为 "hello.pdf" 的 PDF 文件对象。

3、c.setFont("Helvetica", 16): 设置字体为 Helvetica,字号为 16。

4、c.drawString(100, 750, "Hello, world!"): 在坐标 (100, 750) 处写入文本 "Hello, world!"。

5、c.save(): 保存 PDF 文件。

运行这段代码,你会在当前目录下得到一个名为 "hello.pdf" 的文件,打开它,你就会看到 "Hello, world!" 这段文字。

四、 图文并茂:插入图片和表格

除了文本,ReportLab 还支持插入图片、表格等元素,让你的 PDF 报告更加丰富多彩。

插入图片:

from reportlab.lib.units import cm
from reportlab.pdfgen import canvas# 创建一个 PDF 文件
c = canvas.Canvas("hello.pdf")# 设置字体和字号
c.setFont("Helvetica", 16)# 在指定位置写入文本
c.drawString(100, 750, "Hello, world!")# 插入图片
c.drawImage("logo.png", 100, 650, width=5*cm, height=3*cm)# 保存 PDF 文件
c.save()

代码解读:

  • from reportlab.lib.units import cm: 导入单位转换模块,方便我们使用厘米作为单位。

  • c.drawImage("logo.png", 100, 650, width=5*cm, height=3*cm): 在坐标 (100, 650) 处插入名为 "logo.png" 的图片,并设置图片的宽度为 5 厘米,高度为 3 厘米。

请注意:  你需要将一张名为 "logo.png" 的图片放置在与代码相同的目录下,或者修改代码中的图片路径。

插入表格:

from reportlab.lib.units import cm
from reportlab.pdfgen import canvas
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors# 创建一个 PDF 文件
c = canvas.Canvas("hello.pdf")# 设置字体和字号
c.setFont("Helvetica", 16)# 在指定位置写入文本
c.drawString(100, 750, "Hello, world!")# 插入图片
c.drawImage("logo.png", 100, 650, width=5*cm, height=3*cm)# 创建表格数据
data = [['姓名', '年龄', '性别'],['张三', 25, '男'],['李四', 30, '女']]# 创建表格对象
table = Table(data)# 设置表格样式
style = TableStyle([('BACKGROUND', (0, 0), (-1, 0), colors.grey),('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),('ALIGN', (0, 0), (-1, -1), 'CENTER'),('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),('FONTSIZE', (0, 0), (-1, 0), 14),('BOTTOMPADDING', (0, 0), (-1, 0), 12),('BACKGROUND', (0, 1), (-1, -1), colors.beige),('GRID', (0, 0), (-1, -1), 1, colors.black)
])
table.setStyle(style)# 将表格添加到 PDF 文档
table.wrapOn(c, 100, 500)
table.drawOn(c, 100, 500)# 保存 PDF 文件
c.save()

代码解读:

1、from reportlab.platypus import SimpleDocTemplate, Table, TableStyle: 导入 Table 和 TableStyle 模块,用于创建和设置表格样式。

2、data = [['姓名', '年龄', '性别'], ...]: 创建一个二维列表作为表格数据。

3、table = Table(data): 创建一个表格对象。

4、style = TableStyle([...]): 创建一个表格样式对象,设置表格的背景颜色、字体颜色、对齐方式、边框等。

5、table.setStyle(style): 将样式应用到表格。

6、table.wrapOn(c, 100, 500): 计算表格的尺寸,为其在 PDF 文档中预留空间。

7、table.drawOn(c, 100, 500): 在坐标 (100, 500) 处绘制表格。

五、 实际案例:生成股票分析报告

以下是一个简单的股票分析报告的例子,你需要预先生成 K 线图并保存为 "k_line_chart.png" 文件:

from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet# 假设我们已经获取了股票数据和分析结果
stock_name = "阿里巴巴"
stock_code = "BABA"
analysis_result = "预计未来一年股价将上涨 10%..."# 创建 PDF 文档
doc = SimpleDocTemplate("stock_report.pdf")# 创建故事流,用于存储 PDF 内容
story = []# 添加标题
styles = getSampleStyleSheet()
title = Paragraph(f"股票分析报告:{stock_name} ({stock_code})", styles['Heading1'])
story.append(title)
story.append(Spacer(1, 2*cm))# 添加分析结果
paragraph = Paragraph(analysis_result, styles['Normal'])
story.append(paragraph)
story.append(Spacer(1, 1*cm))# 添加 K 线图 (假设已经生成图片文件)
image = Image("k_line_chart.png", width=15*cm, height=8*cm)
story.append(image)# 生成 PDF 文件
doc.build(story)

请注意: 你需要将一张名为 "k_line_chart.png" 的图片放置在与代码相同的目录下,或者修改代码中的图片路径。

六、 总结

本文介绍了使用 Python 生成图文并茂 PDF 文件的基本方法,并通过股票分析报告的例子展示了 ReportLab 库的强大功能。当然,ReportLab 还有更多高级特性等待你去探索,比如自定义页面布局、添加水印、生成目录等等。相信通过不断学习和实践,你一定能用 Python 创建出更加精美实用的 PDF 文档!

相关文章:

Python 图文:小白也能轻松生成精美 PDF 报告!

摘要: 还在为枯燥的数据报表发愁吗?想让你的 Python 项目报告瞬间高大上?本文将带你学习如何使用 Python 生成图文并茂的 PDF 文件,从此告别单调,让你的数据“活”起来! 一、 引言 想象一下,你正在为公司…...

AQS的ReentrantLock源码

什么是AQS(全称AbstractQueuedSynchronizer) 代表:重入锁、独占锁/共享锁、公平锁/非公平锁 是JUC包中线程阻塞、阻塞队列、唤醒、尝试获取锁的一个框架 AbstractQueuedSynchronizer是全称,是一个模板模式,一些线程…...

CSP-J 模拟题2

如果x大于45&#xff0c;则输出-1 设定一个整数now&#xff0c;他的初始值为9&#xff1b; 当x>now&#xff0c;就x-now&#xff0c;并且now--; 根据解析写代码1&#xff1a; #include <bits/stdc.h> using namespace std; int a[101010]; int main(){int x;cin>…...

途牛养车省养车平台源码 买卖新车租车二手车维修装潢共享O2O程序源码

源码采用FastAdmin框架开发&#xff0c;功能成熟完善&#xff0c;已有成功案例。 业务涵盖保险、二手车、接送、拖车、租车、保养、维修、入驻等连接线上等基础和深度服务。 采用的是“线上 车主直控社区加盟店” 模式&#xff0c;其主要考虑是布局门店有助于让目标消费用户…...

开发中遇到的gzuncompress,DomDocument等几个小问题以及一次Php上线碰到的502问题及php异常追踪

一、开发中遇到的gzuncompress,DomDocument等几个小问题记在此 1&#xff0c;昨天在命令行模式行运行一个很复杂的程序&#xff0c;一开始执行php&#xff0c;刚刚连接数据库&#xff0c;都没怎么查几条记录&#xff0c;&#xff08;publish:October 27, 2017 -Friday&#xff…...

【Material-UI】Button 组件中的基本按钮详解

文章目录 一、基本按钮变体1. 文本按钮&#xff08;Text Button&#xff09;2. 实心按钮&#xff08;Contained Button&#xff09;3. 轮廓按钮&#xff08;Outlined Button&#xff09; 二、应用场景与注意事项1. 使用场景2. 注意事项 三、总结 Material-UI 的 Button 组件是前…...

人工智能自动驾驶三维车道线检测—PersFormer模型代码详解

文章目录 1. 背景介绍2. 数据加载和预处理3. 模型结构4. Loss计算5. 总结和讨论 1. 背景介绍 梳理了PersFormer 3D Lane这篇论文对应的开源代码。 2. 数据加载和预处理 数据组织方式参考&#xff1a;自动驾驶三维车道线检测系列—OpenLane数据集介绍。 坐标系参考&#xff…...

LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备成为可能(上篇)

&#x1f99c;️ LangChain Streamlit&#x1f525; Llama &#x1f999;&#xff1a;将对话式人工智能引入您的本地设备&#x1f92f; 将开源LLMs和LangChain集成以进行免费生成式问答&#xff08;不需要API密钥&#xff09; 在过去的几个月中&#xff0c;大型语言模型(LLMs)得…...

sql注入部分总结和复现

一个端口对应一个服务 联合查询注入 所有的程序中&#xff0c;单双引号必须成对出现 需要从这个引号里面逃出来 在后面查询内容 ?id1 要查库名&#xff0c;表名&#xff0c;列名。但是联合查询要知道有多少列&#xff0c;所以通过order by 去查询 order by # 通过二分法…...

开源企业级后台管理的快速启动引擎:Ballcat

Ballcat&#xff1a;快速搭建&#xff0c;高效管理&#xff0c;Ballcat让企业后台开发更简单。 - 精选真开源&#xff0c;释放新价值。 概览 Ballcat&#xff0c;一个专为企业级后台管理而设计的快速开发框架&#xff0c;以其高效的开发模式和全面的安全特性&#xff0c;为开发…...

FashionAI比赛-服饰属性标签识别比赛赛后总结(来自 Top14 Team)

关联比赛: FashionAI全球挑战赛—服饰属性标签识别 推荐大家看本篇博客之前&#xff0c;看一下数据集制作的方法&#xff0c;如何做一个实用的图像数据集 PS&#xff1a;我是参加完比赛之后才看的&#xff0c;看完之后&#xff0c;万马奔腾.....&#xff0c;因为发现比赛中还…...

C语言 | Leetcode C语言题解之第319题灯泡开关

题目&#xff1a; 题解&#xff1a; int bulbSwitch(int n) {return sqrt(n 0.5); }...

【第十届泰迪杯数据挖掘挑战赛A题害虫识别】-农田害虫检测识别-高精度完整更新

农田害虫检测识别项目-高精度完整版 一、说明&#xff1a; 该版本为基于泰迪杯完整害虫数据重新制作数据集、优化增强数据集、重新进行模型训练&#xff0c;达到高精度、高召回率的最优模型代码。包含论文、最优模型文件以及相关文件、原始数据集、训练数据集XML版、增强扩充…...

【Linux】—— Linux进程状态(R、S、D、T、Z、X)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;Linux跬步积累 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0…...

重生之我在NestJS中使用EventStream

有一个需求是需要长连接等待后台的返回&#xff0c;我们使用的EventStream&#xff0c;在NestJS中使用很简单&#xff0c;框架基本上已经封装好了 0. 如果没有创建项目的&#xff0c;可以先创建一个项目&#xff0c;创建项目的直接跳转到下一个步骤去 全局安装 nest: npm inst…...

自动化工具Selenium IDE基本使用——脚本录制

1 简介 Selenium相信大家都知道&#xff0c;在做自动化操作时&#xff0c;要使用浏览器驱动直接控制浏览器操作的时候&#xff0c;大多会结合Selenium框架使用。 但在对网页操作自动化的时候&#xff0c;实际上有一种更轻量的做法&#xff0c;那就是直接使用Selenium IDE&…...

【第十一天】进程调度算法,进程间通信方式,进程同步和互斥

进程调度算法有哪些 进程调度算法是操作系统中用来管理和调度进程&#xff08;任务&#xff0c;作业&#xff09;执行的方法。这些方法决定了在多任务环境下&#xff0c;如何为各个进程分配CPU时间&#xff0c;以实现公平性、高吞吐量、低延迟等目标。 先到先服务调度算法&am…...

Python的lambda函数

Python中的lambda函数是一种小型匿名函数&#xff0c;它允许你在需要函数对象的地方快速定义单行的小函数。lambda函数通常用于编写简洁的代码&#xff0c;尤其是当使用高阶函数&#xff08;如map()、filter()、reduce()等&#xff09;时。它们可以接收任何数量的参数&#xff…...

java9-泛型

1.泛型的简介 1.1 什么是泛型 泛型是一种特殊的数据类型。 它是Java 的一个高级特性。在 Mybatis、Hibernate 这种持久化框架&#xff0c;泛型更是无处不在。 在这之前&#xff0c;不管我们在定义成员变量时&#xff0c;还是方法的形参时&#xff0c;都要规定他们的具体类型…...

zotero安装与使用

文献管理工具&#xff09; Zotero软件官网https://www.zotero.org/download&#xff0c;不修改安装位置&#xff0c;默认安装就行&#xff1b;安装完成官网直接邮箱注册一个账号&#xff0c;软件登陆账号:编辑-首选项-同步 修改论文保存位置&#xff0c;有从其它电脑拷贝过来的…...

Kerberos身份认证原理与企业级排错实战指南

1. 这不是“另一个登录框”&#xff0c;而是一套精密运转的身份验证齿轮系统很多人第一次听说 Kerberos&#xff0c;是在公司内网登录邮箱或访问内部系统时&#xff0c;看到那个带小盾牌图标的弹窗——“正在使用 Kerberos 协议进行身份验证”。于是下意识觉得&#xff1a;“哦…...

用Python和MNE库玩转BCI Competition IV 2a脑电数据集:从数据加载到可视化全流程

用Python和MNE库玩转BCI Competition IV 2a脑电数据集&#xff1a;从数据加载到可视化全流程当你第一次接触脑电信号处理时&#xff0c;面对原始数据文件可能会感到无从下手。BCI Competition IV 2a数据集作为脑机接口领域的经典基准数据&#xff0c;包含了9名受试者四种运动想…...

从理论推导到代码实现:手把手教你用Python/Numpy写出守恒形式的NS方程求解器

从理论推导到代码实现&#xff1a;手把手教你用Python/Numpy写出守恒形式的NS方程求解器计算流体力学&#xff08;CFD&#xff09;的魅力在于它将抽象的数学方程转化为可执行的代码&#xff0c;让流体运动的奥秘在计算机中重现。对于已经掌握流体力学理论的中高级学习者来说&am…...

为什么92%的DeepSeek二次开发团队在6个月内遭遇交付延迟?——基于17个真实项目的技术债务归因分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的DeepSeek二次开发团队在6个月内遭遇交付延迟&#xff1f;——基于17个真实项目的技术债务归因分析 在对17个采用DeepSeek-R1/VL模型开展定制化开发的工业级项目进行回溯审计后&#xff0c;我…...

QMCDecode终极指南:3步解锁QQ音乐加密格式,实现跨平台音乐自由

QMCDecode终极指南&#xff1a;3步解锁QQ音乐加密格式&#xff0c;实现跨平台音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目…...

3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流

3步解锁专业级MMD创作&#xff1a;Blender插件如何重塑二次元动画工作流 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...

ESP32多任务水位监测:从Arduino到ESP-IDF的FreeRTOS实战

1. 项目概述&#xff1a;从Arduino到ESP-IDF的跃迁去年我在做毕业设计时&#xff0c;为了搭建一个ESP32的传感器节点演示程序&#xff0c;第一次深入使用了FreeRTOS。那段时间&#xff0c;我几乎天天和任务调度、队列、信号量打交道&#xff0c;从最初的一头雾水到后来能流畅地…...

VMware ESXi 9.1.0.0集成NVME+网卡驱动版发布|新特性+驱动集成+部署升级+FAQ全指南

一、ESXi 9.1.0.0 正式版核心新特性 VMware ESXi 9.1.0.0&#xff08;2026 年 5 月发布&#xff09;是 vSphere 9.1 核心组件&#xff0c;聚焦硬件兼容扩展、性能跃升、安全加固、运维简化四大方向&#xff0c;重点强化 NVMe 存储与网卡生态适配&#xff0c;以下为关键更新&am…...

如何在浏览器中一键解密所有加密音乐文件:Unlock-Music完全指南

如何在浏览器中一键解密所有加密音乐文件&#xff1a;Unlock-Music完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地…...

Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间

Driver Store Explorer终极指南&#xff1a;轻松管理Windows驱动存储区&#xff0c;释放宝贵磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为Windows系统越来越慢而烦…...