在本教程中,我们将学习如何使用pdfHTML将HTML转换为PDF,pdfHTML是iText 7的一个附加组件。如果你不熟悉iText,请立即跳到第1章。如果您以前使用过iText,您可能还记得旧的HTML到PDF功能。如果是这种情况,您要么使用了过时的HTMLWorker类(iText 2),要么使用了旧的XML Worker插件(iText 5)。
HTMLWorker类在许多年前就被弃用了。HTMLWorker的目标是将小而简单的HTML片段转换为iText对象。它从未打算将完整的HTML页面转换为PDF,但这正是许多开发人员尝试使用它的方式。这导致了很多挫折,因为HTMLWorker不支持每个HTML标记,不解析CSS文件,等等。为了避免这种挫折感,HTMLWorker从iText的最新版本中删除。
2011年,iText Group发布了XML Worker,作为一种通用的XML到PDF工具,构建在iText 5之上。默认实现将HTML(数据)和CSS(样式)转换为PDF,将HTML标记(如<p>、<img>和<li>映射到iText 5对象(如段落、图像和列表项)。我们不知道有任何实现将XML Worker用于任何其他XML格式,但许多开发人员将XML Worker与jsoup结合使用作为HTML2PDF转换器。
然而,XML Worker不是URL2PDF工具。XML工作者希望创建可预测的HTML,其唯一目的是将HTML转换为PDF。常见的用例是创建发票。开发人员没有用Java或C语言编程发票的设计,而是选择创建一个定义文档结构的简单HTML模板,以及一些定义样式的CSS。然后,他们用数据填充HTML,并使用XML Worker将发票创建为PDF文档,丢弃原始HTML。在第4章中,我们将仔细研究这个用例,使用XSLT在内存中将XML转换为HTML,然后使用pdfHTML插件将HTML转换为PDF。
最初创建iText 5时,它被设计为一种能够尽快生成PDF的工具,在页面完成后立即将页面刷新到输出流。当iText于2000年首次发布时,一些设计选择意义非凡,但在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中,您有一个表和单元格对象,当您为整个表设置不同的字体时,该字体将继承为每个单元格的默认字体。这是在架构设计方面向前迈出的一大步,尤其是当目标是将HTML转换为PDF时。
但我们不要沉湎于过去,让我们看看pdfHTML能为我们做些什么。在第一章中,我们将研究convertToPdf()/convertToPdf()方法的不同变体,并了解如何配置转换器。
第1章:Hello HTML to PDF
第2章:使用CSS定义样式
第3章:基于媒体查询生成PDF
第4章:使用pdfHTML创建报告
第5章:自定义标记工作者和CSS应用程序
第6章:在pdfHTML中使用字体
第7章:关于pdfHTML的常见问题
本文档介绍了如何使用iText 7的pdfHTML组件将HTML转换为PDF,详细阐述了HTMLWorker和XML Worker的历史及局限性,并探讨了iText 7针对HTML到PDF转换的改进,包括新的渲染器框架和更符合CSS样式的对象设计。教程涵盖了从基本转换到自定义样式、媒体查询、创建报告和字体处理等多个方面。
405

被折叠的 条评论
为什么被折叠?



