【问题标题】:How to convert an HTML content to PDF without losing the formatting using Java?如何使用 Java 将 HTML 内容转换为 PDF 而不会丢失格式?
【发布时间】:2011-06-10 09:41:17
【问题描述】:

我有一些 HTML 内容(包括格式标记,如strong、图像等)。在我的 Java 代码中,我想将此 HTML 内容转换为 PDF 文档,而不会丢失 HTML 格式。

有没有办法在 Java 中实现(使用 iText 或任何其他库)?

【问题讨论】:

标签: java pdf-generation html-parsing itext


【解决方案1】:

我使用了来自Flying Saucer 项目的ITextRenderer

这是一个简短的、独立的、有效的示例。 就我而言,我想稍后将字节流式传输到电子邮件附件中。

因此,在示例中,我将其写入文件纯粹是为了演示这个问题。这是 Java 8。

import com.lowagie.text.DocumentException;
import org.apache.commons.io.FileUtils;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

public class So4712641 {

  public static void main(String... args) throws DocumentException, IOException {
    FileUtils.writeByteArrayToFile(new File("So4712641.pdf"), toPdf("<b>You gotta walk and don't look back</b>"));
  }

  /**
   * Generate a PDF document
   * @param html HTML as a string
   * @return bytes of PDF document
   */
  private static byte[] toPdf(String html) throws DocumentException, IOException {
    final ITextRenderer renderer = new ITextRenderer();
    renderer.setDocumentFromString(html);
    renderer.layout();
    try (ByteArrayOutputStream fos = new ByteArrayOutputStream(html.length())) {
      renderer.createPDF(fos);
      return fos.toByteArray();
    }
  }
}

这给了我

为了完整起见,这里是我的 Maven pom.xml 的相关部分

<dependencies>
    <dependency>
        <groupId>org.xhtmlrenderer</groupId>
        <artifactId>flying-saucer-pdf</artifactId>
        <version>9.0.8</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
</dependencies>

【讨论】:

  • 你拯救了我的一天!感谢您的贡献!! :)
  • @Kirby 是否存在许可问题?我在另一个线程上阅读了有关 iText 的“商业用途”
  • 飞碟似乎同时支持较旧的 iText v.2(在 LGPL 下开源)和 iText v.5(在要求其用户提供源代码的 AGPL 下),否则可以使用商业 iText 许可证)。有一个基于 Flying Saucer 的较新项目,使用 PDFBox 作为 PDF 库,而不是 iText。我是 openhtmltopdf
【解决方案2】:

我会尝试DocRaptor.com。它将任何语言的 html 转换为 pdf 或 html 转换为 xls,并且由于它使用 Prince XML(无需让您支付昂贵的许可费),因此质量比其他选项要好得多。它也是一个网络应用程序,所以没有什么可下载的。轻松解决冗长、令人沮丧的编码问题。

这里有一些例子: https://docraptor.com/documentation#coding_examples

【讨论】:

    【解决方案3】:

    一般来说,将 HTML 转换为 PDF 并不十分简单,但如果您可以控制 HTML 中的内容,您可以尝试使用 XSL-FO 实现,例如 Apache FOP

    它不是开箱即用的,因为您必须编写(或查找)定义转换规则的样式表,但从好的方面来说,它使您可以更好地控制输出格式,这非常有用在屏幕上看起来不错的东西在纸上不一定看起来不错。

    【讨论】:

    • 我听说过关于 FOP 的可怕事情 ;) 但是 XSL 还是让人们害怕。
    • FOP 不是很好(年度轻描淡写:)),但这完全取决于你想用它做什么。如果它只是一些简单的一页或两页文档供您的用户下载,则 FOP 是可以的。如果你想产生打印质量,甚至不考虑它,你最好购买 XEP 许可证。
    猜你喜欢
    • 2020-07-05
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多