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();
}
}
}
答案 0 :(得分: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>");