使用PDFBox正确渲染PDF到图像

时间:2018-07-18 02:23:29

标签: java pdf itext pdfbox

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

问题是图像被转换时。所有信息都在那里,但复选框...很奇怪?代替在PDF上设置样式的复选框“复选标记”,这些复选框在其中具有一个奇怪的“空框”。

enter image description here

应该如何:

enter image description here

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

转换后,我也感觉到了“质量损失”。以前,我们使用PDFBox 1.8,转换质量很低,并且失去了一些字体格式和样式。自升级以来,它变得更好,但仍然存在问题。

发生填充的地方:

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

...

你们知道这是什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

感谢Tilman Hausherr的建议,它可以正常工作。问题确实是运行应用程序的服务器中缺少字体。 (Zapf Dingbats和/或MS哥特式)。

在目录“ ./fonts”或“ / usr / share / fonts”(Linux)/“ / Windows / Fonts”(Windows)中安装缺少的字体就可以了!