1

Pdf 正在生成,但它是空白的,我想在不丢失格式的情况下获取 pdf 中的 html 内容数据,所以我在这个唯一的空白 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();
            }
          }

    }
4

1 回答 1

0

原因是您从 docx4j 包中使用了错误的 ITextRenderer。Docx4j 应该用于 docx 处理,而不是用于 xhtml 到 PDF 的转换。例如,您应该使用“飞碟 PDF 渲染”,在这种情况下 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>");
于 2019-03-14T10:24:12.287 回答