将 HTML 转换为 PDF 是一项常见的需求,尤其是使用 Python 生成可打印的报表、保存网页内容,或创建格式统一的离线文档时。为了避免手动操作的繁琐,本文将带你了解如何使用 Python 将 HTML 转换为 PDF,无论是本地 HTML 文件,还是 HTML 字符串。如果你正在寻找一种简单可靠的方式在 Python 中生成 PDF 文件,这篇教程将为你提供实用且有效的指导。
安装 Spire.Doc,轻松实现 HTML 转 PDF
想要在 Python 中轻松将 HTML 转换为 PDF,首先需要一个可靠的库,用于处理 HTML 解析并生成 PDF。本文采用的 Spire.Doc for Python 是一款功能强大且易于使用的 HTML 到 PDF 转换库,可直接将 HTML 内容转换为 PDF,无需依赖浏览器、无头引擎或第三方工具。
- 你可以通过 pip 命令快速安装该库:
pip install spire.doc
- 其他安装方式 如果你希望更灵活地控制运行环境,也可以下载 Spire.Doc 安装包,手动进行安装。
同时,Spire.Doc 还提供免费版本,适用于小型项目或评估。
在安装完成必要的 Python 库后,你只需几行代码即可在 Python 中实现将 HTML 保存为 PDF。
在 Python 中将 HTML 文件转换为 PDF
我们先来看看最常见的任务,将 HTML 文件直接转换为 PDF。在 Spire.Doc 的帮助下,首先通过Document.LoadFromFile() 方法加载 .html 文件。然后调用 Document.SaveToFile() 方法即可将其保存为 PDF。
使用 Python 将 HTML 文件转换为 PDF 的步骤:
- 创建一个 Document 对象;
- 使用 Document.LoadFromFile() 方法加载 HTML 文件;
- 使用 Document.SaveToFile() 方法将其保存为 PDF。
下方代码演示了如何在 Python 中将单个 HTML 文件直接转换为 PDF:
from spire.doc import Document
from spire.doc import FileFormat
from spire.doc import XHTMLValidationType
# 创建 Document 类的对象
doc = Document()
# 载入 HTML 文件
doc.LoadFromFile("/input/百科全书.html", FileFormat.Html, XHTMLValidationType.none)
# 将 HTML 文件转换为 PDF 文件并保存
doc.SaveToFile("/output/HTML转PDF.pdf", FileFormat.PDF)
doc.Close()
转换结果文档预览:
在 Python 中将 HTML 字符串转换为 PDF
如果你希望将 HTML 字符串转换为 PDF,Spire.Doc 同样提供简单直接的解决方案。对于包含段落、文本样式及基础格式的 HTML 内容,可以使用 Paragraph.AppendHTML() 方法将 HTML 插入到 Word 文档中,随后通过 Document.SaveToFile() 方法将文档保存为 PDF。
将 HTML 字符串转换为 PDF 的详细步骤如下:
- 创建一个 Document 对象;
- 使用 Document.AddSection() 方法添加节,并通过 Section.AddParagraph() 方法插入段落;
- 指定 HTML 字符串,并使用 Paragraph.AppendHTML() 方法将其添加到段落中;
- 使用 Document.SaveToFile() 方法将文档保存为 PDF 文件。
下方是完整的 Python 示例代码,演示如何将 HTML 字符串转换为 PDF:
from spire.doc import Document
from spire.doc import FileFormat
# 创建 Document 类的对象
doc = Document()
# 添加一个节到文档
sec = doc.AddSection()
# 添加一个段落到节
par = sec.AddParagraph()
# 指定 HTML 字符串
htmlString = """
<html>
<head>
<title>旅游统计信息</title>
<style>
h1 {
color: blue;
font-family: Arial, sans-serif;
}
p {
color: green;
font-family: Verdana, sans-serif;
}
ul {
color: red;
font-family: "Courier New", monospace;
}
ol {
color: purple;
font-family: "Times New Roman", serif;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: left;
font-family: Arial, sans-serif;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<h1>旅游统计信息</h1>
<p>以下是一些旅游方面的统计信息:</p>
<h2>热门旅游目的地</h2>
<ul>
<li>巴黎</li>
<li>罗马</li>
<li>东京</li>
<li>纽约</li>
</ul>
<h2>旅游收入排行榜</h2>
<table>
<tr>
<th>国家</th>
<th>收入(亿美元)</th>
</tr>
<tr>
<td>法国</td>
<td>79.5</td>
</tr>
<tr>
<td>美国</td>
<td>76.9</td>
</tr>
<tr>
<td>西班牙</td>
<td>67.7</td>
</tr>
<tr>
<td>意大利</td>
<td>58.3</td>
</tr>
</table>
<a href="https://www.example.com">点击这里访问示例网站</a>
</body>
</html>
"""
# 将 HTML 字符串所展示的内容插入到段落中
par.AppendHTML(htmlString)
# 将文档转换为 PDF 文件并保存
doc.SaveToFile("/output/HTML字符串转PDF.pdf", FileFormat.PDF)
doc.Close()
HTML 字符串转换为 PDF 的结果预览:
在 Python 中灵活控制 HTML 转 PDF 的输出效果
虽然在 Python 中将 HTML 转换为 PDF 显得简单直接,但有时你可能希望对输出结果进行更精细的控制。例如,你可能需要为 PDF 添加密码以保护文档,或者嵌入字体以确保在不同设备上呈现一致的格式效果。
在本节中,你将学习如何使用 Spire.Doc 自定义 HTML 转 PDF 的转换过程。
1. 设置密码保护 PDF 文件
为了防止未经授权的查看或编辑,你可以通过设置用户密码和所有者密码对生成的 PDF 文档进行加密。
from spire.doc import Document, FileFormat, XHTMLValidationType, ToPdfParameterList, PdfPermissionsFlags, PdfEncryptionKeySize
# 创建一个 ToPdfParameterList 对象
toPdf = ToPdfParameterList()
# 设置密码
userPassword = "viewer"
ownerPassword = "E-iceblue"
toPdf.PdfSecurity.Encrypt(userPassword, ownerPassword, PdfPermissionsFlags.Default, PdfEncryptionKeySize.Key128Bit)
2. 嵌入字体以保持格式一致性
为了确保生成的 PDF 在所有设备上都能正确显示,你可以将文档中使用的所有字体嵌入到 PDF 文件中,从而避免因缺少字体而导致的排版错乱问题。
from spire.doc import Document, FileFormat, XHTMLValidationType, ToPdfParameterList
# 创建一个 ToPdfParameterList 对象,并设置嵌入字体
ppl = ToPdfParameterList()
ppl.IsEmbeddedAllFonts = True
这些选项可以更加细致地控制 HTML 转 PDF 的输出文件,尤其适用于专业文档共享或长期存储等场景。
总结
借助 Spire.Doc for Python,将 HTML 转换为 PDF 变得简单且灵活。无论是处理静态 HTML 文件,还是动态生成的 HTML 字符串,亦或是需要对 PDF 进行加密和个性化设置,该库都能提供完整的解决方案 —— 所需代码仅需几行。
感兴趣的话,不妨该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。,立即获取免费 30 天授权,开始在 Python 中高效生成高质量的 PDF 文档!
常见问题解答(FAQs)
Q1:我可以在 Python 中将 HTML 文件转换为 PDF 吗?
可以。使用 Spire.Doc for Python,只需几行代码即可将本地 HTML 文件转换为 PDF。
Q2:如何在 Chrome 中将 HTML 转换为 PDF?
虽然 Chrome 支持手动“另存为 PDF”,但不适合批量或自动化处理。如果你使用 Python,Spire.Doc 提供了更高效的编程方式来完成 HTML 到 PDF 的转换。
Q3:如何在转换过程中保持 HTML 格式不丢失?
为了最大程度保留格式,请注意以下几点:
- 使用内联 CSS 或嵌入式样式,避免引用外部样式文件;
- 图像及资源使用绝对路径链接;
- 使用 Spire.Doc 的字体设置选项,例如 IsEmbeddedAllFonts(True),将字体嵌入到 PDF中。