HTMLWorker 类多年前已被弃用。 HTMLWorker 的目标是将小而简单的 HTML 片段转换为 iText 对象。它从来没有打算将完整的 HTML 页面转换为 PDF,但这就是许多开发人员尝试使用它的方式。这导致了很多挫败感,因为 HTMLWorker 不支持所有 HTML 标签,不解析 CSS 文件等等。为了避免这种挫败感,HTMLWorker 已从最新版本的 iText 中删除。
2011 年,iText Group 发布了 XML Worker 作为通用 XML 到 PDF 工具,构建于 iText 5 之上。默认实现将 XHTML(数据)和 CSS(样式)转换为 PDF,映射 HTML 标签,例如
,
, 和
to iText 5 objects such as Paragraph, Image, 和 ListItem. We don't know of any implementations that used XML Worker for any other XML formats, but many developers used XML Worker in combination with jsoup as an HTML2PDF converter.
XML Worker wasn't a URL2PDF tool though. XML Worker expected predictable HTML created for the sole purpose of converting that HTML to PDF. A common use case was the creation of invoices. Rather than programming the design of an invoice in Java or C#, developers chose to create a simple HTML template defining the structure of the document, 和 some CSS defining the styles. They then populated the HTML with data, 和 used XML Worker to create the invoices as PDF documents, throwing away the original HTML. We'll take a closer look at this use case in chapter 4, converting XML to HTML in memory using XSLT, then converting that HTML to PDF using the pdfHTML add-on.
iText 5 最初创建时,它被设计为一种尽可能快地生成 PDF 的工具,一旦页面完成就将其刷新到 OutputStream。 2000 年 iText 首次发布时,一些非常有意义的设计选择在 16 年后仍然出现在 iText 5 中。不幸的是,其中一些选择使得将 XML Worker 的功能扩展至许多开发人员期望的质量水平变得非常困难(如果不是不可能的话)。如果我们真的想创建一个出色的 HTML 到 PDF 转换器,我们就必须从头开始重写 iText。我们做到了。
2016 年,我们发布了 iText 7,这是 iText 的全新版本,不再与以前的版本兼容,但在创建时考虑了 pdfHTML。新的渲染器框架花费了大量的工作。当使用 iText 7 创建文档时,会构建渲染器及其子渲染器树。布局是通过遍历该树创建的,这种方法更适合处理 HTML 到 PDF 的转换。 iText 对象经过完全重新设计,以更好地匹配 HTML 标签并允许“CSS 方式”设置样式。
HTMLWorker 类多年前已被弃用。 HTMLWorker 的目标是将小而简单的 HTML 片段转换为 iText 对象。它从来没有打算将完整的 HTML 页面转换为 PDF,但这就是许多开发人员尝试使用它的方式。这导致了很多挫败感,因为 HTMLWorker 不支持所有 HTML 标签,不解析 CSS 文件等等。为了避免这种挫败感,HTMLWorker 已从最新版本的 iText 中删除。
2011 年,iText Group 发布了 XML Worker 作为通用 XML 到 PDF 工具,构建于 iText 5 之上。默认实现将 XHTML(数据)和 CSS(样式)转换为 PDF,映射 HTML 标签,例如
,
, 和
to iText 5 objects such as Paragraph, Image, 和 ListItem. We don't know of any implementations that used XML Worker for any other XML formats, but many developers used XML Worker in combination with jsoup as an HTML2PDF converter.
XML Worker wasn't a URL2PDF tool though. XML Worker expected predictable HTML created for the sole purpose of converting that HTML to PDF. A common use case was the creation of invoices. Rather than programming the design of an invoice in Java or C#, developers chose to create a simple HTML template defining the structure of the document, 和 some CSS defining the styles. They then populated the HTML with data, 和 used XML Worker to create the invoices as PDF documents, throwing away the original HTML. We'll take a closer look at this use case in chapter 4, converting XML to HTML in memory using XSLT, then converting that HTML to PDF using the pdfHTML add-on.
iText 5 最初创建时,它被设计为一种尽可能快地生成 PDF 的工具,一旦页面完成就将其刷新到 OutputStream。 2000 年 iText 首次发布时,一些非常有意义的设计选择在 16 年后仍然出现在 iText 5 中。不幸的是,其中一些选择使得将 XML Worker 的功能扩展至许多开发人员期望的质量水平变得非常困难(如果不是不可能的话)。如果我们真的想创建一个出色的 HTML 到 PDF 转换器,我们就必须从头开始重写 iText。我们做到了。
2016 年,我们发布了 iText 7,这是 iText 的全新版本,不再与以前的版本兼容,但在创建时考虑了 pdfHTML。新的渲染器框架花费了大量的工作。当使用 iText 7 创建文档时,会构建渲染器及其子渲染器树。布局是通过遍历该树创建的,这种方法更适合处理 HTML 到 PDF 的转换。 iText 对象经过完全重新设计,以更好地匹配 HTML 标签并允许“CSS 方式”设置样式。
例如:在 iText 5 中,您有一个 PdfPTable 和一个 PdfPCell 对象来创建表格及其单元格。如果您希望每个单元格包含与默认字体不同的文本,则需要为每个单独单元格的内容设置该字体。在 iText 7 中,您有一个 Table 和 Cell 对象,并且当您为整个表格设置不同的字体时,该字体将继承为每个单元格的默认字体。这是架构设计方面的重大进步,特别是如果目标是将 HTML 转换为 PDF。
但是我们不要沉迷于过去,让我们看看 pdfHTML 能为我们做什么。在第一章中,我们将了解convertToPdf()/ConvertToPdf()方法的不同变体,并且我们将发现转换器是如何配置的。