Java 正确使用PDFBox将PDF渲染为图像

Java 正确使用PDFBox将PDF渲染为图像,java,pdf,itext,pdfbox,Java,Pdf,Itext,Pdfbox,因此,在这个应用程序中,我们使用iText来填写PDF表单,使用PDFBox将填写好的PDF加载到系统中,并将其转换为图像 问题是转换图像的时间。所有信息都在那里,但复选框是。。。奇怪的与PDF上设置的样式化复选框“复选标记”不同,复选框中有一个奇怪的“空框” 它应该是怎样的: PDFBox版本2.0.11 iText版本是5.5.13 下面是发生转换的代码片段: PDDocument pdf = PDDocument.load(byteArrayInputStream); PDFRende

因此,在这个应用程序中,我们使用iText来填写PDF表单,使用PDFBox将填写好的PDF加载到系统中,并将其转换为图像

问题是转换图像的时间。所有信息都在那里,但复选框是。。。奇怪的与PDF上设置的样式化复选框“复选标记”不同,复选框中有一个奇怪的“空框”

它应该是怎样的:

PDFBox版本2.0.11 iText版本是5.5.13

下面是发生转换的代码片段:

PDDocument pdf = PDDocument.load(byteArrayInputStream);
PDFRenderer renderer = new PDFRenderer(pdf);
BufferedImage[] images = new BufferedImage[pdf.getNumberOfPages()];
PDPage page = null;
BufferedImage image = null;
for (int i = 0; i < images.length; i++) {
        try {
            image = renderer.renderImageWithDPI(i, 300,org.apache.pdfbox.rendering.ImageType.RGB);
            ...
PDDocument pdf=PDDocument.load(byteArrayInputStream);
PDFRenderer渲染器=新的PDFRenderer(pdf);
BuffereImage[]images=新的BuffereImage[pdf.getNumberOfPages()];
PDPage=null;
BuffereImage图像=空;
对于(int i=0;i
转换后我也感觉到“质量损失”。之前,我们使用的是PDFBox 1.8,转换质量很低,并且丢失了一些字体格式和样式。自从升级后,它变得更好了,但仍然有bug

填充发生时:

PdfReader reader = new PdfReader(filePath);

ByteArrayOutputStream lStr = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, lStr);
AcroFields acroFields = stamper.getAcroFields();

for (Entry<String, Item> map : acroFields.getFields().entrySet()) {
    String key = map.getKey();

    if (!fields.has(key))
        continue;

    if (fields.isNull(key))
        continue;

    acroFields.setField(key, fields.getString(key), true);
}
stamper.setFormFlattening(true);

stamper.close();
reader.close();

...
PdfReader reader=新的PdfReader(文件路径);
ByteArrayOutputStream lStr=新的ByteArrayOutputStream();
PdfStamper压模=新PdfStamper(读卡器,lStr);
AcroFields AcroFields=stamper.getAcroFields();
对于(条目映射:acroFields.getFields().entrySet()){
String key=map.getKey();
如果(!fields.has(键))
继续;
if(fields.isNull(键))
继续;
acroFields.setField(key,fields.getString(key),true);
}
母版。SetFormFlatting(真);
压模关闭();
reader.close();
...
你们知道这是什么吗


谢谢!

多亏了Tilman Hausherr的建议,它才得以工作。问题确实在于运行应用程序的服务器中缺少字体。(Zapf Dingbats和/或MS Gothic)


在目录“/fonts”或“/usr/share/fonts”(Linux)/“/Windows/fonts”(Windows)中安装丢失的字体成功了!

确保安装了zapf dingbats或Microsoft哥特式字体。另请参阅日志消息。如果PDF仍然不起作用,请共享它。在“应如何使用”中:图像,“Alarme”和“Bancos de Cuoro”的不同背景颜色是不同的设计还是仅仅因为其中一个具有焦点?对于PDFBox,只需按照操作系统的要求复制缺少的字体(如果缺少)。在windows中,复制\windows\fonts目录中的zapf dingbats.pfb文件(或msgothic.tt*文件)。无需更改您的PDF文件。代码段:受保护字符串[]GetSearchableDirectory(){返回新字符串[]{System.getProperty(“user.home”)+“/.fonts”、//user”/usr/local/fonts“、//local”/usr/local/share/fonts”、//local shared”/usr/share/fonts”,//system“/usr/X11R6/lib/X11/fonts”//X};}因此,最简单的测试方法是在用户目录中创建一个.fonts目录,并将字体复制到那里。很高兴您添加了解决方案作为答案!您现在也可以接受它了吗?这有助于其他人看到它是否有效。