HTML 转 PDF:Python

This article was translated from English: Does it need improvement?
Translated
View the article in English

本指南为Python开发者提供了使用IronPDF库将HTML内容转换为高质量PDF格式的逐步指导。(可移植文件格式)文件

IronPDF是一个全面的PDF转换和处理库,支持多种编程语言,包括.NET, JavaPython编程语言。 本教程专注于使用 IronPDF 在 Python 脚本中转换 HTML 内容,无论是文件形式还是标记形式。

有关在 .NET 应用程序中如何将 HTML 转换为 PDF 的单独教程,请参考以下内容这里.


概述


入门

1. 安装 IronPDF PDF 库用于 Python

用于PDF的Python库

安装使用 pip

pip install ironpdf
Python模块

下载 模块

立即下载

手动安装到你的项目中

要安装Python的IronPDF库,您可以使用流行的包管理器pip。只需执行以下命令:

pip install ironpdf

提示
要安装特定版本的IronPdf,请使用以下语法:“==2023.x.x”。 例如,您可以运行命令“pip install ironpdf==2023.x.x”。

请注意
IronPDF Python 依赖于 IronPDF .NET 库,特别是 .NET 6.0,作为其底层技术。 因此,有必要拥有.NET 6.0 SDK才能使用 IronPDF Python。


操作指南和代码示例

2. 将HTML转换为PDF

在接下来的部分中,我们将深入探讨IronPDF将HTML转换为PDF的强大渲染功能。

PDF文档渲染的主要组件是ChromePdfRenderer类。 此外,PdfDocument 类提供了一系列的操作功能。 IronPDF 提供了将 HTML 内容转换为 PDF 文档的可靠方法,适用于三个关键场景

  • 将HTML字符串/标记转换为PDF
  • 将HTML文件/压缩文件转换为PDF
  • 将URL转换为PDF

    本节将简要概述每个用例,并提供补充资源以获取更多详细信息。

2.1 导入IronPDF包

要导入IronPDF,请在将使用IronPDF的源文件开头包含以下导入语句:

# Import statements for IronPDF Python
from ironpdf import *
PYTHON

2.2. 设置许可证密钥(可选)

IronPDF for Python 免费使用,但会在免费用户的 PDF 中添加平铺背景水印。

参观 许可页面 获取许可证密钥,享受无水印 PDF。

要使用IronPDF生成没有水印的PDF,必须向库提供有效的许可证密钥。 以下代码片段演示了如何使用许可证密钥配置库:

# Apply your license key
License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
PYTHON

确保在生成 PDF 文件或修改其内容之前设置许可证密钥。 建议在任何其他代码行之前调用 LicenseKey 方法。

你可以购买许可证密钥或联系我们获取免费试用版许可证密钥.

2.3 设置日志文件位置(可选)

IronPDF可以在与您的Python脚本相同的目录中生成名为Default.log的文本文件中的日志消息。

如果您想自定义日志文件的名称和位置,可以使用以下代码片段设置 LogFilePath 属性:

# Set a log path
Logger.EnableDebugging = True
Logger.LogFilePath = "Custom.log"
Logger.LoggingMode = Logger.LoggingModes.All
PYTHON

请注意
在使用任何 PDF 转换和操作方法之前,应调用 Logger.LogFilePath

2.4. 从HTML字符串创建PDF

RenderHtmlAsPdf方法将HTML字符串转换为PDF格式文档。

以下代码片段演示了如何从包含单个标题元素的HTML字符串生成PDF文件:

from ironpdf import *
# Instantiate Renderer
renderer = ChromePdfRenderer()
# Create a PDF from a HTML string using Python
pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1>")
# Export to a file or Stream
pdf.SaveAs("output.pdf")
PYTHON

使用以下工具将 HTML 标记转换为 PDF 文件 将Html渲染为Pdf 方法。这种方法可以使用所有符合 W3C 标准的有效 HTML 和 CSS 标记生成 PDF。

RenderHtmlAsPdf方法处理HTML、CSS和JavaScript的方式与现代浏览器相同,确保内容的准确渲染。 此功能使软件工程师能够创建与其Web浏览器对应版本非常相似的PDF文件。

此外,RenderHtmlAsPdf 方法可以处理位于本地或网络文件夹中的外部资源,如图像、样式表和脚本。 以下示例演示了如何从引用了存储在assets文件夹中的CSS文件和图像的HTML创建PDF文档:

from ironpdf import *
html = """
<html>
   <head>
      <title>Hello world!</title>
      <link rel='stylesheet' href='assets/style.css'>
   </head>
   <body>
      <h1>Hello from IronPDF!</h1>
      <a href='https://ironpdf.com/python/'><img src='assets/logo.png' /></a>
   </body>
</html>
"""
renderer = ChromePdfRenderer()
pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
PYTHON

上述代码的结果如下图所示。

将Html渲染为Pdf 方法能够呈现各种 HTML 内容。如果能在 Chrome 浏览器中显示,那么 将Html渲染为Pdf 将其呈现出来!

此外,开发者可以为 RenderHtmlAsPdf 方法提供第二个参数,以指定引用网络资产的基本路径。 此路径可以指向文件系统上的本地目录,甚至是URL路径。

为了更好地了解如何使用 RenderHtmlAsPdf 方法,您可以参考此代码示例或查阅 API 参考页面了解更多详细信息。

2.5. 从网址创建PDF

要将网站URL转换为PDF文档,开发者可以使用IronPDF提供的RenderUrlAsPdf方法。

以下是一个示例,展示了如何将维基百科文章渲染成PDF内容。

from ironpdf import *
# Instantiate Renderer
renderer = ChromePdfRenderer()
# Create a PDF from a URL or local file path
pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
# Export to a file or Stream
pdf.SaveAs("url.pdf")
PYTHON

生成的 PDF 文件格式如下所示。

如需了解更多信息,请参阅代码示例演示如何将网页转换成 PDF。

2.6. 从HTML文件创建PDF

IronPDF支持将HTML文件转换为PDF并存储在本地文件系统上。 它将HTML内容直接渲染为相应的PDF格式。

要展示这一功能的实际应用,下面的代码示例展示了将统一发票 HTML文件转换的过程。您可以访问HTML标记的内容。 统一发票.

此HTML标记为您提供方便:

<html>
<head>
    <meta charset="utf-8">
    <title>Invoice</title>
    <link rel="stylesheet" href="style.css">
    <link rel="license" href="https://www.opensource.org/licenses/mit-license/">
    <script src="script.js"></script>
</head>
<body>
<header>
    <h1>Invoice</h1>
    <address contenteditable>
        <p>Jonathan Neal</p>
        <p>101 E. Chapman Ave<br>Orange, CA 92866</p>
        <p>(800) 555-1234</p>
    </address>
    <span><img alt="" src="http://www.jonathantneal.com/examples/invoice/logo.png"><input type="file" accept="image/*"></span>
</header>
<article>
    <h1>Recipient</h1>
    <address contenteditable>
        <p>Some Company<br>c/o Some Guy</p>
    </address>
    <table class="meta">
        <tr>
            <th><span contenteditable>Invoice #</span></th>
            <td><span contenteditable>101138</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Date</span></th>
            <td><span contenteditable>January 1, 2012</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Amount Due</span></th>
            <td><span id="prefix" contenteditable>$</span><span>600.00</span></td>
        </tr>
    </table>
    <table class="inventory">
        <thead>
        <tr>
            <th><span contenteditable>Item</span></th>
            <th><span contenteditable>Description</span></th>
            <th><span contenteditable>Rate</span></th>
            <th><span contenteditable>Quantity</span></th>
            <th><span contenteditable>Price</span></th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td><a class="cut">-</a><span contenteditable>Front End Consultation</span></td>
            <td><span contenteditable>Experience Review</span></td>
            <td><span data-prefix>$</span><span contenteditable>150.00</span></td>
            <td><span contenteditable>4</span></td>
            <td><span data-prefix>$</span><span>600.00</span></td>
        </tr>
        </tbody>
    </table>
    <a class="add">+</a>
    <table class="balance">
        <tr>
            <th><span contenteditable>Total</span></th>
            <td><span data-prefix>$</span><span>600.00</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Amount Paid</span></th>
            <td><span data-prefix>$</span><span contenteditable>0.00</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Balance Due</span></th>
            <td><span data-prefix>$</span><span>600.00</span></td>
        </tr>
    </table>
</article>
<aside>
    <h1><span contenteditable>Additional Notes</span></h1>
    <div contenteditable>
        <p>A finance charge of 1.5% will be made on unpaid balances after 30 days.</p>
    </div>
</aside>
</body>
</html>
<html>
<head>
    <meta charset="utf-8">
    <title>Invoice</title>
    <link rel="stylesheet" href="style.css">
    <link rel="license" href="https://www.opensource.org/licenses/mit-license/">
    <script src="script.js"></script>
</head>
<body>
<header>
    <h1>Invoice</h1>
    <address contenteditable>
        <p>Jonathan Neal</p>
        <p>101 E. Chapman Ave<br>Orange, CA 92866</p>
        <p>(800) 555-1234</p>
    </address>
    <span><img alt="" src="http://www.jonathantneal.com/examples/invoice/logo.png"><input type="file" accept="image/*"></span>
</header>
<article>
    <h1>Recipient</h1>
    <address contenteditable>
        <p>Some Company<br>c/o Some Guy</p>
    </address>
    <table class="meta">
        <tr>
            <th><span contenteditable>Invoice #</span></th>
            <td><span contenteditable>101138</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Date</span></th>
            <td><span contenteditable>January 1, 2012</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Amount Due</span></th>
            <td><span id="prefix" contenteditable>$</span><span>600.00</span></td>
        </tr>
    </table>
    <table class="inventory">
        <thead>
        <tr>
            <th><span contenteditable>Item</span></th>
            <th><span contenteditable>Description</span></th>
            <th><span contenteditable>Rate</span></th>
            <th><span contenteditable>Quantity</span></th>
            <th><span contenteditable>Price</span></th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td><a class="cut">-</a><span contenteditable>Front End Consultation</span></td>
            <td><span contenteditable>Experience Review</span></td>
            <td><span data-prefix>$</span><span contenteditable>150.00</span></td>
            <td><span contenteditable>4</span></td>
            <td><span data-prefix>$</span><span>600.00</span></td>
        </tr>
        </tbody>
    </table>
    <a class="add">+</a>
    <table class="balance">
        <tr>
            <th><span contenteditable>Total</span></th>
            <td><span data-prefix>$</span><span>600.00</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Amount Paid</span></th>
            <td><span data-prefix>$</span><span contenteditable>0.00</span></td>
        </tr>
        <tr>
            <th><span contenteditable>Balance Due</span></th>
            <td><span data-prefix>$</span><span>600.00</span></td>
        </tr>
    </table>
</article>
<aside>
    <h1><span contenteditable>Additional Notes</span></h1>
    <div contenteditable>
        <p>A finance charge of 1.5% will be made on unpaid balances after 30 days.</p>
    </div>
</aside>
</body>
</html>
HTML

假设我们在名为 "invoices "的文件夹中保存了一个本地 HTML 文件及其相关的 CSS 和 JavaScript 文件,我们可以使用 IronPDF 通过以下 Python 代码将示例 HTML 文件转换为 PDF:

# Instantiate Renderer
renderer = ChromePdfRenderer()
# Create a PDF from an existing HTML file using Python
pdf = renderer.RenderHtmlFileAsPdf("invoices/TestInvoice1.html")
# Export to a file or Stream
pdf.SaveAs("htmlfile_to_pdf.pdf")
PYTHON

与将HTML字符串转换为PDF类似,IronPDF会自动解析示例HTML文件中的相对URL,确保任何引用的样式表和脚本正确应用于生成的PDF文档中。 这确保了网页的视觉外观在PDF文件中被准确捕获。

3. 进一步阅读

探索IronPDF将HTML转换为PDF渲染的广泛功能,深入了解我们的代码示例节。

  1. 读取此代码示例了解如何在转换过程中自定义 PDF 文档的外观。
  2. 学习如何生成个性化的PDF文件页眉和页脚调整边距大小页面尺寸, 添加水印,以及更多。
  3. 此外,探索技术以便Extract Text, 优化文件大小和编程打印 PDF.