更新 2024年十二月10日
分享:

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 转换和处理库,支持多种编程语言,包括 .NETJavaPython 编程语言。 本教程专注于使用 IronPDF 在 Python 脚本中转换 HTML 内容,无论是文件形式还是标记形式。

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


概述


入门

立即在您的项目中开始使用IronPDF,并享受免费试用。

第一步:
green arrow pointer

1. 安装 IronPDF PDF 库用于 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 To Pdf 5 related to 2.4. 从HTML字符串创建PDF

使用RenderHtmlAsPdf方法将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 To Pdf Html String To Pdf related to 2.4. 从HTML字符串创建PDF

RenderHtmlAsPdf 方法能够呈现各种类型的HTML内容。如果它可以在Chrome中显示,那么 RenderHtmlAsPdf 就能渲染它!

此外,开发者可以为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 文件格式如下所示。

Html To Pdf 7 related to 2.5. 从网址创建PDF

有关更多信息,您可以参考代码示例,演示如何将网页转换为PDF。

2.6. 从HTML文件创建PDF

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

对于此功能的实际演示,以下代码示例展示了发票HTML文件的转换。您可以访问[发票](https://codepen.io/tjoen/pen/wvgvLX" target="_blank" rel="nofollow noopener noreferrer)的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. 此外,探索提取文本优化文件大小和通过编程打印PDF的技术。