使用iText将HTML转换为PDF

40

有人知道是否可以使用iText将HTML页面(URL)转换为PDF吗?

如果答案是否定的,那也没关系,因为我将停止浪费时间尝试解决它,只需花一些钱购买我知道的一些组件即可 :)


5
更新: iText可以将HTML转换为PDF,但其样式表支持不太完整。5.0.6于2011年2月发布,包括对相关代码的全面改进,但可见的行为变化很少。下一个版本计划在HTML->PDF功能方面包含重大改进。 - Mark Storer
1
确实可以查看:xmlworker,它是iText的一个补充,支持更多的CSS。 - Redlab
更新:发现了这个较新的帖子,它很好地总结了当前的选项http://stackoverflow.com/questions/4055838/best-commercial-html-to-pdf-c-component - Mark
6
又一个更新:[wkhtmltopdf](http://code.google.com/p/wkhtmltopdf/)使用webkit渲染引擎来布局(虚拟)屏幕,然后使用itext将其转换为PDF。 - peteorpeter
7个回答

30

我认为这正是你在寻找的。

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或更高版本。


3
飞碟链接(xhtmlrenderer)现在应该是:http://code.google.com/p/flying-saucer/。 - Alex Stoddard
有人知道如何提高生成的 PDF 文件中图像质量吗? - user584397
@user584397 用户可以先放大图片,然后再将其缩小。该图像已嵌入PDF中。 - ug_

7

我最终使用了来自webSupergoo的ABCPdf。 它非常好用,价值约为350美元,根据您以上的评论,它已经为我节省了很多时间。


4
最简单的做法是使用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


2

使用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>

1

回答你的问题实际上有两个方面。首先,你需要明确你打算如何处理渲染后的HTML:将其保存为新的PDF文件,还是在另一个渲染上下文中使用它(即将其添加到你正在生成的其他文档中)。

前者可以相对容易地使用Flying Saucer框架来完成,该框架可以在此处找到:https://github.com/flyingsaucerproject/flyingsaucer

后者实际上是一个更全面的问题,需要进一步分类。使用iText,你无法(至少不是轻而易举地)将iText元素(即ParagraphPhraseChunk等)与生成的HTML组合起来。你可以通过使用ContentByteaddTemplate方法并将HTML生成到该模板中来解决这个问题。

另一方面,如果你想要在生成的HTML上盖上水印、日期或类似的东西,你可以使用iText来实现。

所以底线是:您无法轻松地将呈现的HTML集成到其他PDF生成上下文中,但您可以直接将HTML呈现到空白PDF文档中。

使用iText pdfHTML,实际上有一个名为renderElements的方法,它可以做到您声称不可能的事情。它将HTML语法呈现为iText元素块,如段落、表格等。 - Joris Schellekens

-1
使用iText的HTMLWorker

示例


1
HTMLWorker 已被弃用。它的继任者 XMLWorker 正在逐渐退出历史舞台。目前最先进的技术是 iText 7 + pdfHTML。 - Amedee Van Gasse

-2

今年早些时候,当我需要将HTML转换为PDF时,我尝试了Winnovative HTML to PDF转换器的试用版(我认为ExpertPDF也是同一产品)。它的效果非常好,所以我们在那家公司购买了许可证。之后我没有深入研究。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接