【问题标题】:Rendering PDF to image with PDFBox properly使用 PDFBox 正确地将 PDF 渲染为图像
【发布时间】:2018-12-25 19:43:45
【问题描述】:

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

问题在于图像何时转换。所有信息都在那里,但复选框......很奇怪?与在 PDF 上设置的样式复选框“复选标记”不同,复选框内部有一个奇怪的“空框”。

它应该是怎样的:

PDFBox 2.0.11 版 iText 版本是 5.5.13

这是发生转换的代码的小sn-p:

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

...

你们知道这是什么吗?

谢谢!

【问题讨论】:

  • 确保安装了 zapf dingbats 或 Microsoft Gothic 字体。另请参阅日志消息。如果仍然无法使用,请分享 PDF。
  • 在“应该如何:”图像中,“Alarme”和“Bancos de Cuoro”的不同背景颜色是不同的设计还是仅仅因为其中一个具有焦点?
  • 对于 PDFBox,只需按照操作系统要求的方式复制丢失的字体(如果丢失)。在 Windows 中,将 zapf dingbats .pfb 文件复制到 \windows\fonts 目录(或 msgothic.tt* 文件)中。无需更改您的 PDF 文件。
  • 我们代码的片段:protected String[] getSearchableDirectories() { return new String[] { System.getProperty("user.home") + "/.fonts", // user "/usr /local/fonts", // 本地 "/usr/local/share/fonts", // 本地共享 "/usr/share/fonts", // 系统 "/usr/X11R6/lib/X11/fonts" // X }; }
  • 所以最容易测试的就是在你的用户目录下创建一个 .fonts 目录并将字体复制到那里。

标签: java pdf itext pdfbox


【解决方案1】:

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

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

【讨论】:

  • 很高兴您添加了解决方案作为答案!你现在也能接受吗?这有助于其他人看到它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2012-11-28
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多