Python 办公自动化:快速将 HTML 转换为 PDF 格式
HTML(超文本标记语言)是一种用于创建网页的标准标记语言,主要用于定义内容的结构与布局,但当你需要将其作为本地文档展示或存档时,PDF 才是更加适合的选择。无论是生成电子发票、技术文档,还是导出美观的报表,PDF 都能跨平台地保留原始排版与视觉样式。在今天的文章中,我们就来看看如何在 Python 中将 HTML 快速转换为 PDF,实现高效与精准的文档处理。
准备工作
在开始编写代码之前,我们需要安装支持文档处理的 Python 库。本文将使用 Spire.Doc for Python,它能够解析 HTML 的 CSS 样式并将其精准地渲染到 PDF 页面中。你可以通过 pip 快速安装:
pip install Spire.Doc
也可以到 E-ICEBLUE 官网下载 Spire.Doc 安装包,然后进行自定义手动安装。此外,该产品还提供免费版,专门用于小型项目或购买商业版前的测试。
在 Python 中将 HTML 文件转换为 PDF
如果我们已经拥有现成的 HTML 静态文件,通过直接加载的方式进行转换是最为高效的选择。这种方法非常适合处理大量的网页存档、离线技术手册或自动生成的测试报告。在具体实现上,我们通过调用库中封装好的文件处理接口,能够确保 HTML 的层级结构被完整映射到文档模型中,从而实现格式的精准转换。
代码实现步骤:
- 创建一个
Document类的对象。 - 调用
LoadFromFile方法,加载 HTML 文件。 - 调用
SaveToFile方法,将 HTML 保存为 PDF 格式的文件。
下方为代码实例,使用时注意将文件路径替换为真实路径:
from spire.doc import Document, FileFormat, XHTMLValidationType
# 创建 Document 类的对象
doc = Document()
# 载入本地 HTML 文件
doc.LoadFromFile("input/示例文档.html", FileFormat.Html, XHTMLValidationType.none)
# 将内容直接保存为 PDF 格式
doc.SaveToFile("output/HTML文件转PDF.pdf", FileFormat.PDF)
doc.Close()
HTML 文件与转换后的 PDF 文件对比示意图:

在 Python 中将 HTML 字符串转换为 PDF
对于动态生成的内容,例如从数据库调取数据并渲染到 HTML 模板的情况,直接处理字符串流比操作文件更加灵活。这种方式提高程序的响应速度和处理逻辑的连贯性。
在代码中,我们主要使用将字符串写入文档段落的方法来将其转换为标准的 PDF 文件。这样不仅能保持复杂的 CSS 样式,还能方便地与其它动态生成的文档元素进行拼接。
代码实现步骤:
- 创建文档对象后,依次添加
Section和Paragraph。 - 使用
AppendHTML方法,将 HTML 字符串动态写入段落。 - 通过
SaveToFile方法将整个文档结构渲染为 PDF 文件。
from spire.doc import Document, FileFormat
# 创建文档对象并添加结构
doc = Document()
sec = doc.AddSection()
par = sec.AddParagraph()
# 定义包含 CSS 样式的 HTML 字符串
html_string = """
<html>
<head>
<style>
h1 { color: #2c3e50; font-family: Arial; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>旅游统计报表</h1>
<table>
<tr><th>国家</th><th>收入(亿美元)</th></tr>
<tr><td>法国</td><td>79.5</td></tr>
<tr><td>美国</td><td>76.9</td></tr>
</table>
</body>
</html>
"""
# 将 HTML 字符串渲染进段落
par.AppendHTML(html_string)
# 保存文档
doc.SaveToFile("E:/Administrator/Python1/output/HTML字符串转PDF.pdf", FileFormat.PDF)
doc.Close()
保存后的 PDF 文件预览:

进阶配置:转换时设置页边距与页面大小
直接将 HTML 文件或字符串转换为 PDF 虽然简便快捷,但在实际的应用中,默认的页面设置不一定能够匹配多种需求。因此,我们可以在转换前通过 PageSetup 类对 PDF 的页边距、纸张大小(如 A4、Letter)进行微调。
设置页边距:
# 设置页边距(单位通常为磅)
sec.PageSetup.Margins.Top = 50.0
sec.PageSetup.Margins.Bottom = 50.0
sec.PageSetup.Margins.Left = 40.0
sec.PageSetup.Margins.Right = 40.0
合理的页边距设置不仅能让文档看起来更专业,还能有效避免内容被裁切。
设置页面大小为 A4:
# 设置页面大小为 A4 纸张
# 还可以选择 Letter, Legal, A3 等其他标准预设
sec.PageSetup.PageSize = PageSize.A4()
# 也可以手动指定页面的宽度和高度(单位:磅)
# sec.PageSetup.PageSize = SizeF(600.0, 800.0)
设置页面大小有助于使内容能够适配打印输出或屏幕阅读。
总结
通过以上两种方法,我们可以轻松应对各种 HTML 转 PDF 的场景。无论是处理现有的文件库,还是动态渲染即时生成的网页数据,Spire.Doc for Python 都能提供简单高效的解决方案。如果你希望了解更多文档转换的内容,欢迎浏览主页或产品官网教程。

浙公网安备 33010602011771号