我正在使用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);
}
有人可以就如何解决这个问题提出建议吗?
我通过逐个像素地比较创建的图像和预期的图像来获得差异。页面上还有其他内容,但只有一小部分正在转移。
创建的,diff,预期图像的链接在这里: https://www.dropbox.com/sh/mii7lo3dsvi0kmx/AABNWZ7lbdgHkSQw4RTm1IDoa?dl=0
请告知如何解决它! 谢谢!
答案 0 :(得分:0)
此问题的关键区域包含两个公式。 OP图像上的这些区域如下所示:
预期的配方外观:
和
创建公式外观
不同之处在于字体大小略有不同,预计它们会比创建的大。
在OP提供这些图像的源PDF后,可以使用Adobe Acrobat进行模拟图像导出。结果:
由Acrobat呈现的预期公式外观
和
创建公式外观,由Acrobat呈现
在这里,人们也可以看到差异......
字母和数字与上面的字母和数字大不相同,因为有问题的字体未嵌入,Acrobat使用不同的实际字体程序。
但是嵌入了一种字体,带有数学符号的符号字体。因此可以更严格地比较这些符号。此外,分数中的线也是使用矢量图形生成的,也与字体替换无关。比较这些部分相对于彼此的位置,可以看出Acrobat和PDFBox对相同的源进行相同的渲染(对于不同的源PDF具有相同的差异)。
确实,源PDF有所不同。公式是使用表单Xobjects绘制的,虽然两个文档中页面内容的内部非常相似(一些小的更改但字体大小相同),但Xobjects中的字体大小不同。
因此,在处理表单Xobjects时,应用于PDF的后处理器看起来有一些错误。