有人知道是否可以使用iText将HTML页面(URL)转换为PDF吗?
如果答案是否定的,那也没关系,因为我将停止浪费时间尝试解决它,只需花一些钱购买我知道的一些组件即可 :)
有人知道是否可以使用iText将HTML页面(URL)转换为PDF吗?
如果答案是否定的,那也没关系,因为我将停止浪费时间尝试解决它,只需花一些钱购买我知道的一些组件即可 :)
我认为这正是你在寻找的。
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、图像和屏幕非常容易。Flying Saucer需要Java 1.4或更高版本。
我最终使用了来自webSupergoo的ABCPdf。 它非常好用,价值约为350美元,根据您以上的评论,它已经为我节省了很多时间。
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
。使用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>
回答你的问题实际上有两个方面。首先,你需要明确你打算如何处理渲染后的HTML:将其保存为新的PDF文件,还是在另一个渲染上下文中使用它(即将其添加到你正在生成的其他文档中)。
前者可以相对容易地使用Flying Saucer框架来完成,该框架可以在此处找到:https://github.com/flyingsaucerproject/flyingsaucer
后者实际上是一个更全面的问题,需要进一步分类。使用iText,你无法(至少不是轻而易举地)将iText元素(即Paragraph
、Phrase
、Chunk
等)与生成的HTML组合起来。你可以通过使用ContentByte
的addTemplate
方法并将HTML生成到该模板中来解决这个问题。
另一方面,如果你想要在生成的HTML上盖上水印、日期或类似的东西,你可以使用iText来实现。
所以底线是:您无法轻松地将呈现的HTML集成到其他PDF生成上下文中,但您可以直接将HTML呈现到空白PDF文档中。renderElements
的方法,它可以做到您声称不可能的事情。它将HTML语法呈现为iText元素块,如段落、表格等。 - Joris SchellekensHTMLWorker
已被弃用。它的继任者 XMLWorker
正在逐渐退出历史舞台。目前最先进的技术是 iText 7 + pdfHTML。 - Amedee Van Gasse今年早些时候,当我需要将HTML转换为PDF时,我尝试了Winnovative HTML to PDF转换器的试用版(我认为ExpertPDF也是同一产品)。它的效果非常好,所以我们在那家公司购买了许可证。之后我没有深入研究。