将 PDF 转换为图像文件时的像素偏移

Pixel shifting when converting PDF into image files

我正在使用 PDFBox 将 PDF 文档转换为图像。 但在某些页面上,少量内容呈现不一致。看起来那个小区域正在移动一点点(1-3 像素)。 这是代码:

document = PDDocument.load(pdfFile);
list = document.getDocumentCatalog().getAllPages();

for (int i = 0; i < list.size(); i++) {
    PDPage temp = list.get(i);
    BufferedImage image = temp.convertToImage(BufferedImage.TYPE_INT_RGB, 150);
    File outputfile = new File(fileName + "_" + (i + 1) + ".png");
    ImageIOUtil.writeImage(image, outputfile.getAbsolutePath(), 150);
    //ImageIO.write(image, "jpg", outputfile);
}

谁能告诉我如何解决这个问题?

我通过逐像素比较创建的图像和预期的图像得到了不同之处。页面上还有其他内容,但只有一小部分在移动。

link 创建的、不同的、预期的图像在这里: https://www.dropbox.com/sh/mii7lo3dsvi0kmx/AABNWZ7lbdgHkSQw4RTm1IDoa?dl=0

请教如何解决! 谢谢!

比较图像

这个问题的关键区域包含两个公式。 OP 图像上的这些区域如下所示:

expected formula appearance:

created formula appearance

不同之处在于字体大小略有不同,它们预计比实际创建的要大。

在 Adob​​e Acrobat 中比较原始 PDF

OP 提供了这些图像的源 PDF 后,可以使用 Adob​​e Acrobat 导出模拟图像。结果:

expected formula appearance, rendered by Acrobat

created formula appearance, rendered by Acrobat

这里也可以看出区别...

字母和数字与上面有很大不同,因为所讨论的字体不是嵌入的,并且 Acrobat 使用不同的实际字体程序。

但是嵌入了一种字体,带有数学符号的符号字体。所以这些符号可以更严格地进行比较。此外,分数中的线条也是使用矢量图形生成的,与字体替换无关。比较这些部分的相对位置,可以看到 Acrobat 和 PDFBox 对同一来源的呈现方式相同(不同来源的 PDF 具有相同的差异)。

在内部比较原始 PDF

确实,源 PDF 不同。公式是用form Xobjects画出来的,虽然两个文档的页面内容内部其他方面非常相似(有一些细微的变化但是字体大小是一样的),但是Xobjects中的字体大小不同。

所以看起来应用于 PDF 的 post 处理器在处理表单 Xobjects 时有一些错误。