本文目录导读:

- ReportLab(最强大、专业级)
- WeasyPrint(HTML 转 PDF 最佳)
- FPDF2(轻量、跨平台)
- Matplotlib + PdfPages(数据可视化)
- jinja2 + ReportLab(模版化方案)
- 其他值得关注的库
- 推荐选择指南
- 注意事项
Python 中可用于生成 PDF 的库非常丰富,主要可以分为基础绘制类、HTML/模板类、报告类和专业图形类,以下是最常用、最值得推荐的几个库,按推荐度和适用场景排序:
ReportLab(最强大、专业级)
用途:从零开始绘制 PDF,支持最复杂的排版和图形。
- 特点:
- 支持画布(canvas)和文档模板(platypus)
- 支持表格、图表、段落、页眉页脚、水印
- 可嵌入字体、图片、矢量图形
- 支持高度自定义,性能优异
- 适用场景:需要精确控制每个元素位置、生成复杂报表、发票、证书等
- 示例:
from reportlab.pdfgen import canvas c = canvas.Canvas("hello.pdf") c.drawString(100, 750, "Hello World") c.save()
WeasyPrint(HTML 转 PDF 最佳)
用途:将 HTML/CSS 渲染为 PDF,支持现代 CSS 特性。
- 特点:
- 完美支持 CSS3、Flexbox、Grid、@page 规则
- 自动处理分页、页码
- 支持从 URL 或文件读取 HTML
- 输出质量极高
- 适用场景:已有 HTML 模板、需要精确排版又想避免从零绘制
- 示例:
from weasyprint import HTML HTML(string='<h1>Hello</h1><p>World</p>').write_pdf('output.pdf')
FPDF2(轻量、跨平台)
用途:简单 PDF 生成,API 类似 PHP 的 FPDF。
- 特点:
- 无外部依赖,安装简单
- 支持 Unicode(通过 TTF 字体)
- 内置表格、单元格、多重文本等功能
- 代码风格直白易懂
- 适用场景:快速生成简单文档、报表、发票
- 示例:
from fpdf import FPDF pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.cell(200, 10, text="Hello World", align="C") pdf.output("simple.pdf")
Matplotlib + PdfPages(数据可视化)
用途:将图表和数据可视化结果导出为 PDF。
- 特点:
- 完美支持 Matplotlib 所有图表
- 支持多页 PDF、矢量图
- 可嵌入报告框架中
- 适用场景:数据分析报告、科学论文图表
- 示例:
import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages
with PdfPages('charts.pdf') as pdf: plt.plot([1,2,3], [4,5,6]) pdf.savefig() plt.close()
## 5. pdfkit(wkhtmltopdf 封装)
**用途**:HTML 转 PDF(基于 WebKit 引擎)。
- **特点**:
- 支持复杂的 HTML+CSS+JS 渲染
- 可设置页面大小、边距、页眉页脚
- 需安装 wkhtmltopdf 二进制文件
- **适用场景**:需要渲染包含 JavaScript 的网页
- **示例**:
```python
import pdfkit
pdfkit.from_string('<h1>Hello</h1>', 'out.pdf')
jinja2 + ReportLab(模版化方案)
用途:动态生成复杂报告的最佳组合。
- 思路:用 Jinja2 定义数据模板 → 填充数据 → ReportLab 渲染
- 优势:数据与样式分离,适合批量生成
其他值得关注的库
| 库名 | 特点 | 适用场景 |
|---|---|---|
| PyPDF2 / pypdf | 主要读取、合并、拆分 PDF | 操作已有PDF |
| pdfminer.six | PDF 内容提取(文本、表格) | 数据抽取 |
| cairo / pycairo | 底层矢量图形库 | 高性能图形 |
| rst2pdf | reStructuredText 转 PDF | 文档生成 |
| pdfplumber | 提取表格、文本 | PDF 数据解析 |
推荐选择指南
| 你的需求 | 推荐库 |
|---|---|
| 从零绘制复杂PDF(专业级) | ReportLab |
| 用HTML做精美排版 | WeasyPrint |
| 快速生成简单文档 | FPDF2 |
| 数据可视化报告 | Matplotlib |
| 操作已有PDF(合并/拆分) | pypdf |
| 批量生成模板化报告 | Jinja2 + ReportLab |
注意事项
- 中文支持:ReportLab 和 FPDF2 需要加载中文字体文件(如
simhei.ttf),WeasyPrint 通常自动处理 - 性能:复杂文档优先 ReportLab,大量小文档优先 FPDF2
- 安装依赖:WeasyPrint 在 macOS/Linux 可能需要系统字体库,Windows 一般直接可用
对于大多数 Web 开发场景,WeasyPrint 和 ReportLab 是最实用的两个选择:前者适合基于 HTML 模板快速出稿,后者适合需要高度定制的商业报告。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播