Удалить html-контент без потери форматирования, но создается черный pdf-файл

Pdf генерируется, но он становится пустым, я хочу получить данные содержимого html в pdf без потери форматирования, поэтому я попробовал этот код в этом только пустом pdf-файле

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

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
public class removeHtmlTag {
          public static void main(String [] args) throws DocumentException, IOException {
            FileUtils.writeByteArrayToFile(new File("removeHtmlTag.pdf"), toPdf("<b>YouAAA 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();
            }
          }

    }

person Amigo    schedule 14.03.2019    source источник


Ответы (1)


Причина в том, что вы используете неправильный ITextRenderer из пакета docx4j. Предполагается, что Docx4j используется для обработки docx, а не для преобразования xhtml в PDF. Вы должны использовать, например, «Летающая тарелка PDF Rendering», в этом случае pdf в порядке.

<!-- https://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf -->
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf</artifactId>
    <version>9.1.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-core -->
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-core</artifactId>
    <version>9.1.15</version>
</dependency>

В этом случае импорт

import org.xhtmlrenderer.pdf.ITextRenderer;

Кроме того, лучше инкапсулировать строку xhtml в теги html, например

StringBuilder sb = new StringBuilder();
sb.append("<html>").append(System.lineSeparator())
.append("<body>").append(System.lineSeparator())
.append("<b>YouAAA gotta walk and don't look back</b>").append(System.lineSeparator())
.append("</body>").append(System.lineSeparator())
.append("</html>");
person Alister    schedule 14.03.2019
comment
Получение этого исключения, Исключение в потоке main java.lang.NoClassDefFoundError: org/xhtmlrenderer/css/style/CssContext в config.removeHtmlTag.toPdf(removeHtmlTag.java:27) в config.removeHtmlTag.main(removeHtmlTag.java:18) Вызвано автор: java.lang.ClassNotFoundException: org.xhtmlrenderer.css.style.CssContext на java.net.URLClassLoader.findClass (неизвестный источник) на java.lang.ClassLoader.loadClass (неизвестный источник) на sun.misc.Launcher$AppClassLoader. loadClass(неизвестный источник) на java.lang.ClassLoader.loadClass(неизвестный источник) ... еще 2 - person Amigo; 15.03.2019
comment
Ну, я попробовал звонок, он работал в моем проекте. Похоже, у вас нет класса org.xtmlrenderer.css.style.CssContex. По этой ссылке github.com/flyingsaucerproject/flyingsaucer/blob/master/ Добавьте еще один пакет maven fly-saucer-core, я добавил зависимость maven внутри ответа - person Alister; 15.03.2019