在 Python 中生成 PDF

我最喜欢的库是 pdf-reports

目录

使用 Python 生成 PDF 报告

Python 拥有丰富的库和模块,为生成专业的 PDF 报告提供了强大的工具。

本指南探讨了使用 Python 创建 PDF 文档 的各种方法,涵盖了一些流行的库,如 ReportLab、FPDF、Xhtml2pdf、WeasyPrint、Jinja2、pdf-reports 和 PdfKit

python on the report

为什么使用 Python 生成 PDF 报告?

  • 自动化:Python 脚本可以自动化报告生成,节省时间并减少人为错误。
  • 定制化:通过添加文本、图片、表格和图表,可以根据特定需求定制报告。
  • 一致性:使用标准化模板确保报告的品牌一致性。
  • 多功能性:可以生成发票、商业报告、数据摘要或任何其他类型的文档。

用于 PDF 生成的流行 Python 库

ReportLab

ReportLab 是一个功能强大的库,允许您以 编程方式 创建 PDF 文档。它支持添加文本、图片、表格和图形,适用于各种类型的报告。

优点:

  • 功能丰富
  • 高级 API 易于使用
  • 支持注释和交互式表单等高级功能

缺点:

  • 相比其他库,学习曲线较陡
  • 对于某些任务,API 不够直观

使用 ReportLab

安装:使用 pip 安装 ReportLab:

pip install reportlab

基本设置:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# 添加文本:
python c.drawString(100, 800, "Hello World")
# 保存 PDF:
python c.save()

FPDF

FPDF 是一个用纯 Python 编写的简单但功能强大的 PDF 创建库。它非常适合使用少量代码生成基本的 PDF 文档。

优点:

  • 易于学习和使用
  • 轻量且快速
  • 支持 Unicode 字符

缺点:

  • 相比 ReportLab,功能集有限
  • 对页面上元素的布局控制较少

使用 FPDF

安装:使用 pip 安装 FPDF:

pip install fpdf2
基本设置:
from fpdf import FPDF pdf = FPDF()

# 添加文本:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# 保存 PDF:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf 是一个 CSS/HTML 到 PDF 的转换器,它在内部使用 ReportLab。它非常适合从 HTML 模板生成 PDF,是网络到 PDF 转换的绝佳选择。

优点:

  • 将 HTML 和 CSS 转换为 PDF
  • 支持复杂的布局和样式
  • 与 Django 等 Web 框架集成良好

缺点:

  • 需要了解 HTML 和 CSS
  • 可能不适合简单的非基于网络的报告

使用 Xhtml2pdf

安装:使用 pip 安装 Xhtml2pdf:

pip install xhtml2pdf

从 HTML 生成 PDF:python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint 是一个功能强大的 Python 库,允许开发人员使用高质量的渲染将 HTML 和 CSS 转换为 PDF 文档。它特别适用于生成需要精确格式的报告、发票或其他文档。以下是一些示例,演示了如何在各种场景中使用 WeasyPrint。

功能

  • 将 HTML 和 CSS 转换为 PDF 文档。
  • 通过 Jinja2 等模板引擎处理动态数据渲染。

安装:

pip install weasyprint

以下是一个从 HTML 字符串生成 PDF 的简单示例:

from weasyprint import HTML

html_string = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>Hello, WeasyPrint!</h1>
<p>This is a sample PDF generated using WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("sample.pdf")

在这个示例中,使用 WeasyPrint 的 HTML 类将 HTML 字符串转换为名为 “sample.pdf” 的 PDF 文件。

从文件加载 HTML

您还可以直接从文件加载 HTML 内容:

from weasyprint import HTML

# 从文件加载 HTML
HTML('sample.html').write_pdf('output.pdf')

此方法在 HTML 内容存储在外部文件时非常有用。 使用 CSS 样式表

WeasyPrint 支持使用 CSS 样式表来样式化 PDF 文档。以下是应用 CSS 文件的方法:

from weasyprint import HTML

# 从文件加载 HTML 和 CSS
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])

这允许更复杂的样式化,使创建视觉上吸引人的 PDF 变得更容易。

Jinja2

Jinja2 是一个功能强大的 Python 模板引擎,允许您通过在模板中嵌入 Python 表达式、条件语句和循环来生成动态内容。本指南将引导您通过使用 Jinja2 的各种示例,从基本的变量替换到更高级的功能,如模板继承。

Jinja2 的关键功能

  • 可与 WeasyPrint 或 ReportLab 结合使用,用于动态生成 HTML 内容的模板引擎。
  • 适合将数据嵌入到预定义的模板中。
  • 安装:
pip install jinja2

参见官方 Jinja2 文档页面上的示例:https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit 是一个功能强大的 Python 库,简化了将 HTML 内容转换为 PDF 文档的过程。它作为 wkhtmltopdf 工具的包装器,利用 WebKit 准确地将 HTML 页面渲染为 PDF 格式。本指南将引导您通过使用 pdfkit 生成 PDF 的各种示例和使用场景。

关键功能

  • 作为 wkhtmltopdf 的 Python 包装器,将 HTML 转换为 PDF。
  • 需要全局安装 wkhtmltopdf。https://wkhtmltopdf.org/downloads.html

安装:

# 并确保安装了 wkhtmltopdf。

基本用法 - 将 HTML 字符串转换为 PDF

您可以使用 pdfkit.from_string() 将简单的 HTML 字符串转换为 PDF 文件:

import pdfkit

html_sample = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>This is a heading</h1>
<p>First line.</p>
<p>Second line.</p>
<p>Third line.</p>
<p>Fourth line.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'output.pdf')

这将在当前目录中生成一个名为 output.pdf 的 PDF 文件。

将本地 HTML 文件转换为 PDF

如果您有一个本地存储的 HTML 文件,请使用 pdfkit.from_file():

import pdfkit

pdfkit.from_file('local.html', 'sample.pdf')

PDF 报告库 (pdf-reports)

使用 Python 的 pdf-reports 库创建 PDF 报告可以是一种生成外观专业的文档的强大方式,这些文档可以从 HTML 或 Pug 模板生成。该库利用 Semantic UI 框架的现代组件,并提供将表格、图表和其他元素嵌入到 PDF 中的例程。

pdf-reports 库旨在从 HTML 或 Pug 模板创建视觉上吸引人的 PDF 报告。它官方支持 Python 3.x,但也可以在 Python 2.x 上运行,前提是安装了适当版本的 weasyprint。这使其成为生成动态且结构良好的文档的强大工具。

关键功能

  • 现代组件:使用 Semantic UI 框架创建现代外观的组件。
  • 嵌入元素:允许将表格、图表和其他元素嵌入到 PDF 中。
  • 模板支持:支持 HTML 和 Pug 模板,实现灵活的报告设计。

pdf-reports 的示例用法

安装:

pip install pdf-reports

以下是使用 pdf-reports 库的基本示例:

from pdf_reports import PDFReport

# 定义您的模板文件 (template.pug)
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p This is a sample report.
"""

# 创建 PDF 报告实例
report = PDFReport(template)

# 为模板设置上下文
context = {
    'title': 'Sample Report'
}

# 生成 PDF
pdf = report.generate(context, output='sample_report.pdf')

Python 中 PDF 生成的起飞

Python 提供了一系列强大的库,用于生成 PDF 报告。无论您是创建发票、商业报告还是数据摘要,这些工具都可以帮助您自动化流程、自定义文档并确保品牌一致性。选择最适合您需求的库,今天就开始创建专业的 PDF!

有用的链接