删除html内容不丢失格式,但生成黑色pdf

Posted

技术标签:

【中文标题】删除html内容不丢失格式,但生成黑色pdf【英文标题】:Remove html content without losing formatting, But black pdf is genrated 【发布时间】:2019-03-14 07:13:40 【问题描述】:

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();
            
          

    

【问题讨论】:

【参考方案1】:

原因是您从 docx4j 包中使用了错误的 ITextRenderer。 Docx4j 应该用于 docx 处理,而不是用于 xhtml 到 PDF 的转换。 您应该使用,例如“Flying Saucer 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>");

【讨论】:

获取此异常,线程“main”中的异常 java.lang.NoClassDefFoundError: org/xhtmlrenderer/css/style/CssContext at config.removeHtmlTag.toPdf(removeHtmlTag.java:27) at config.removeHtmlTag .main(removeHtmlTag.java:18) 引起:java.lang.ClassNotFoundException: org.xhtmlrenderer.css.style.CssContext at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source ) 在 sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 2 更多 好吧,我试过这个电话,它在我的项目中工作。看起来你没有类 org.xtmlrenderer.css.style.CssContex。根据这个链接github.com/flyingsaucerproject/flyingsaucer/blob/master/…添加另一个maven包flying-saucer-core,我在answer里面添加了maven依赖

以上是关于删除html内容不丢失格式,但生成黑色pdf的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 django 生成 pdf 时,我不能写格鲁吉亚语。我的代码除了格鲁吉亚字母外还写了黑色方块

怎么通过代码把图片的黑色背景变成透明的?

带有pdf黑色闪烁的iframe(闪烁)

如何删除旋转位图后出现的黑色背景?

Python - 删除源自图像边界的黑色像素

使用 Grabcut 从图像中删除黑色背景 - Python