使用 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 元素(即ParagraphPhraseChunk 等)与生成的 HTML 结合起来。您可以通过使用ContentByteaddTemplate 方法并为此模板生成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

将 itext pdf 保存为没有物理存在的 blob。

iText 7 将 HTML 转换为 PDF - 如何查看整个宽表?