使用 iText 将 HTML 转换为 PDF
Posted
技术标签:
【中文标题】使用 iText 将 HTML 转换为 PDF【英文标题】:Using iText to convert HTML to PDF 【发布时间】:2010-09-19 03:34:08 【问题描述】:有人知道是否可以使用 iText 将 html 页面 (url) 转换为 PDF 吗?
如果答案是“不”,那也没关系,因为我不会再浪费时间尝试解决问题,而只是花一些钱购买我知道可以的多个组件之一:)
提前感谢您的回复!
【问题讨论】:
更新:iText 确实将 HTML 转换为 PDF,但它的样式表支持参差不齐。 5.0.6 于 2011 年 2 月发布,包括对相关代码的大修,几乎没有可见的行为变化。下一个版本计划对 HTML->PDF 功能进行重大改进。 确实检查:xmlworker 是 iText 的一个补充,它支持更多的 CSS。 更新:发现这个更新的线程很好地总结了当前的选项***.com/questions/4055838/… 又一次更新:[wkhtmltopdf] code.google.com/p/wkhtmltopdf) 使用 webkit 渲染引擎来布局(虚拟)屏幕,然后将它转换为 PDF 【参考方案1】:我想这正是你要找的东西
http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html
http://code.google.com/p/flying-saucer
Flying Saucer 的主要目的是将符合规范的 XHTML 和 CSS 2.1 作为 Swing 组件呈现到屏幕上。尽管它最初旨在将标记嵌入桌面应用程序(例如 iTunes 音乐商店),但 Flying Saucer 也已扩展了 iText 的工作。这使得将 XHTML 呈现为 PDF 以及图像和屏幕变得非常容易。飞碟需要 Java 1.4 或更高版本。
【讨论】:
飞碟 (xhtmlrenderer) 的链接现在应该是:code.google.com/p/flying-saucer 有人知道如何提高生成的 PDF 文件的图像质量吗? @user584397 用户放大图片并按比例缩小,图片嵌入到 PDF 中。【参考方案2】:我最终使用了来自 webSupergoo 的 ABCPdf。 它工作得非常好,根据上面的 cmets,它为我节省了大约 350 美元。 再次感谢 Daniel 和 Brach 提供的 cmets。
【讨论】:
【参考方案3】:最简单的方法是使用 pdfHTML。 它是一个 iText7 插件,可将 HTML5 (+CSS3) 转换为 pdf 语法。
代码非常简单:
HtmlConverter.convertToPdf(
"<b>This text should be written in bold.</b>", // html to be converted
new PdfWriter(
new File("C://users/mark/documents/output.pdf") // destination file
)
);
要了解更多信息,请转至http://itextpdf.com/itext7/pdfHTML
【讨论】:
【参考方案4】:您的问题的答案实际上是双重的。首先,您需要指定您打算如何处理呈现的 HTML:将其保存到新的 PDF 文件中,或在另一个呈现上下文中使用它(即,将其添加到您正在生成的其他文档中)。
前者使用飞碟框架相对容易完成,可以在这里找到:https://github.com/flyingsaucerproject/flyingsaucer
后者实际上是一个更全面的问题,需要进一步分类。
使用 iText,您将无法(至少)将 iText 元素(即Paragraph
、Phrase
、Chunk
等)与生成的 HTML 结合起来。您可以通过使用ContentByte
的addTemplate
方法并为此模板生成HTML 来解决这个问题。
另一方面,如果您想在生成的 HTML 上添加水印、日期等内容,您可以使用 iText 来实现。
所以底线:您不能将渲染的 HTML 简单地集成到其他 pdf 生成上下文中,但您可以将 HTML 直接渲染为空白 PDF 文档。
【讨论】:
对于 iText pdfHTML,实际上有一种方法renderElements
可以完全按照您的要求完成。它将 HTML 语法呈现给 iText 元素块,如段落、表格等。【参考方案5】:
使用 itext 库:
这里是示例代码。它工作得很好:
String htmlFilePath = filePath + ".html";
String pdfFilePath = filePath + ".pdf";
// create an html file on given file path
Writer unicodeFileWriter = new OutputStreamWriter(new FileOutputStream(htmlFilePath), "UTF-8");
unicodeFileWriter.write(document.toString());
unicodeFileWriter.close();
ConverterProperties properties = new ConverterProperties();
properties.setCharset("UTF-8");
if (url.contains(".kr") || url.contains(".tw") || url.contains(".cn") || url.contains(".jp"))
properties.setFontProvider(new DefaultFontProvider(false, false, true));
// convert the html file to pdf file.
HtmlConverter.convertToPdf(new File(htmlFilePath), new File(pdfFilePath), properties);
Maven 依赖项
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.6</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.1.3</version>
</dependency>
【讨论】:
【参考方案6】:使用 iText 的 HTMLWorker
Example
【讨论】:
HTMLWorker
已弃用。它的继任者XMLWorker
即将落伍。当前最先进的是 iText 7 + pdfHTML。【参考方案7】:
今年早些时候我需要 HTML 到 PDF 的转换时,我尝试了 Winnovative HTML 到 PDF 转换器的试用(我认为 ExpertPDF 也是同一个产品)。效果很好,所以我们在那家公司购买了许可证。之后我就不再深入探讨了。
【讨论】:
【参考方案8】:也许你可以试试:
http://www.allcolor.org/YaHPConverter/
【讨论】:
以上是关于使用 iText 将 HTML 转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iText 将带有图像和超链接的 HTML 转换为 PDF?
iText7 将 HTML 转换为 PDF“System.NullReferenceException”。
仿百度文库方案[openoffice.org 3+swftools+flexpaper] 使用iText将jpgjpegpng转换为pdf
仿百度文库方案[openoffice.org 3+swftools+flexpaper] 使用iText将jpgjpegpng转换为pdf