iText 7 - 缺少 HTMLWorker 和 ParseXHtml

iText 7 - HTMLWorker and ParseXHtml missing

我无法在 iText 7 中找到 HTMLWorker、ParseXHtml、Document 和其他相关 类(与 iText 5 不同)。谁能告诉我如何使用 iText 7 将 HTML 文件转换为 PDF?

谢谢, 苏门答腊

  1. HTMLWorker 很多年前就被弃用了。在 iText 5 中你真的应该 真的 使用 XMLWorker。 iText 5 已停产(仅安全更新,无新增功能)所以请迁移到 iText 7。
  2. 对于 iText 7,使用附加组件 pdfHTML。请参阅下面的 Alexey 的回答。

iText pdfHTML 模块已作为 XmlWorker 的替代品发布。 C#版本可以从NuGet Gallery. Java version can be downloaded from the Artifactory.

下载

您要查找的主要 class 是 HtmlConverter。它有很多静态方法重载,用于将 html 转换为将来添加到布局结构的元素列表、整个 com.itextpdf.layout.Document 实例,或者直接转换为 .pdf 文件。

.html 文件转换为 .pdf 的示例:

HtmlConverter.convertToPdf(new File(htmlFilePath), new File(outPdfFilePath));

将 html 转换为布局元素的示例:

String html = "<p>Hello world!</p>";
List<IElement> lst = HtmlConverter.convertToElements(html);

此外,pdfHTML 现在支持 @media 规则,因此您可能需要提供一个配置,用于应用 CSS,例如使用 @media print说明,您需要相应地设置 MediaDeviceDescription

ConverterProperties properties = new ConverterProperties()
     .setMediaDeviceDescription(new MediaDeviceDescription(MediaType.PRINT));
HtmlConverter.convertToPdf(new File(htmlPath), new File(outPdfPath), properties);

要指定在将 HTML 转换为 PDF 时要使用的字体集,您还可以设置 FontProvider:

FontProvider fontProvider = new FontProvider();
fontProvider.addDirectory(fontsDir)
properties.setFontProvider(fontProvider);

根据 iText Group 创始人的说法,HTMLWorker 很久以前就被弃用了,其目的不是转换完整的 HTML 页面。它基本上不知道网页由<head><body>部分组成。

XMLWorker 解析 XML 的通用框架。为了避免这些冲突,iText 7 开始使用 convertToPdf 功能,该功能能够将 HTML 转换为 PDF。

以下是代码片段。

HtmlConverter.convertToPdf(new File(src), new File(dest));

将您的 HTML 编码或 .html 文件添加到第一个参数中,并提供文件位置以在提供的位置(文件路径)中将 HTML 保存到 PDF 中。