【发布时间】:2019-11-10 20:27:14
【问题描述】:
我正在使用非常有用的 PDFBox 来构建一个简单的 pdf 冲压 GUI。
我注意到一个特定文档存在严重问题。
当我为渲染指定一个特定的比例因子时,预期的输出图像大小是不同的。
更糟糕的是什么?用于生成图像沿水平轴的比例因子与沿垂直轴的比例因子不同。
这是我使用的代码:
/**
* @param pdfPath The path to the pdf document
* @param page The pdf page number(is zero based)
*/
public BufferedImage loadPdfImage(String pdfPath, int page) {
File file = new File(pdfPath);
try (PDDocument doc = PDDocument.load(file)) {
pageCount = doc.getNumberOfPages();
PDPage pDPage = doc.getPage(page);
float w = pDPage.getCropBox().getWidth();
float h = pDPage.getCropBox().getHeight();
System.out.println("Pdf opening: width: "+w+", height: "+h);
PDFRenderer renderer = new PDFRenderer(doc);
float dpiRatio = 1.5f;
BufferedImage img = renderer.renderImage(page, dpiRatio);
float dpiXRatio = img.getWidth() / w;
float dpiYRatio = img.getHeight()/ h;
System.out.println("dpiXRatio: "+dpiXRatio+", dpiYRatio: "+dpiYRatio);
return img;
} catch (IOException ex) {
System.out.println( "invalid pdf found. Please check");
}
return null;
}
上面的代码加载了我尝试过的大多数 pdf 文档,并将其中的给定页面转换为 BufferedImage 对象。
然而,对于上述文档,它似乎无法以提供的比例因子呈现转换后的图像。
我的代码有什么问题吗?还是已知的错误?
谢谢。
编辑
我正在使用 PDFBOX v2.0.15
而且页面没有旋转。
【问题讨论】:
-
请告知您使用的 PDFBox 版本并分享您的文件。考虑到页面可能有旋转。
-
@TilmanHausherr 我相信错误是我的。我使用 MediaBox 矩形来计算比例因子。该文件的 MediaBox 和 CropBox 不同,我使用 MediaBox 进行计算。使用cropbox,效果要好得多,尽管不完全相同。我提供的比例因子:2.0416667 来自 pdfbox 的可观察比例因子:使用cropbox:沿 x = 2.0415506,沿 y = 2.0414271 使用 mediabox:沿 x = 1.029426,沿 y = 1.0878998 这些小差异是否正常?或者我可以忽略它们吗?页面也没有旋转。
-
我认为差异可以忽略不计。谢谢@TilmanHausherr
-
是的,可能会出现非常小的差异,因为渲染的图像大小是整数。
-
别忘了更新到当前版本,2.0.17,总是有很多问题被修复,一些与速度有关,一些与质量有关,一些与安全有关。如果您使用的是 maven,请使用 maven-versions-plugin,它可以帮助您保持最新状态。