Как конвертировать HTML-контент в PDF, не теряя форматирование с помощью Java? - PullRequest
5 голосов
/ 17 января 2011

У меня есть некоторый контент HTML (включая теги форматирования, такие как strong, изображения и т. Д.). В моем коде Java я хочу преобразовать этот контент HTML в документ PDF без потери форматирования HTML.

Есть ли способ сделать это на Java (используя iText или любую другую библиотеку)?

Ответы [ 3 ]

5 голосов
/ 31 марта 2016

Я использовал 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();
    }
  }
}

Это дает мне

enter image description here

Для полноты, вот соответствующие части для моего 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>
0 голосов
/ 19 января 2011

Я бы попробовал DocRaptor.com .Он конвертирует html в pdf или html в xls на любом языке, и, поскольку он использует Prince XML (без необходимости платить дорогую плату за лицензию), качество намного лучше, чем другие варианты.Это также веб-приложение, поэтому загружать нечего.Простой способ обойти длинное, расстраивающее кодирование.

Вот несколько примеров: https://docraptor.com/documentation#coding_examples

0 голосов
/ 17 января 2011

Преобразование HTML в PDF в целом не совсем просто, но если вы контролируете, что входит в HTML, вы можете попробовать использовать реализацию XSL-FO, например Apache FOP .

Это не из коробки, так как вам придется написать (или найти) таблицу стилей, которая определяет правила преобразования, но с другой стороны, это дает вам гораздо больший контроль над форматированием вывода, что довольнополезно, поскольку то, что хорошо выглядит на экране, не обязательно хорошо выглядит на бумаге.

...