pdfbox,PDFRenderer.renderImage().getWidth() 和 PDImageXObject.getImage().getWidth() return 不同比例的数字?
pdfbox, PDFRenderer.renderImage().getWidth() and PDImageXObject.getImage().getWidth() return numbers in different scale?
我用pdfbox把pdf转成图片,发现PDFRenderer和PDImageXObject返回的宽度好像比例不一样。
如何获得相同比例的宽度?
这是我获取页面宽度的方式:
PDFRenderer pdRender = new PDFRenderer(pdDoc);
BufferedImage singlePage = pdRender.renderImage(pgIdx-1);
singlePage.getWidth(); // pageWidth = 623
这就是我获取图像块宽度的方式:
PDImageXObject image = (PDImageXObject) o;
image.getImage(); // imageWidth = 484
“pageWidth”是图像元数据中显示的实际尺寸,但“imageWidth”比实际尺寸大。实际比例如下图所示(整页对比红框)。
您确定页面大小的方式
PDFRenderer pdRender = new PDFRenderer(pdDoc);
BufferedImage singlePage = pdRender.renderImage(pgIdx-1);
singlePage.getWidth(); // pageWidth = 623
正在使用一些默认设置将页面呈现为位图后确定页面宽度(以像素为单位),尤其是在某些未知分辨率下。
您确定图像尺寸的方法
PDImageXObject image = (PDImageXObject) o;
image.getImage(); // imageWidth = 484
确定位图资源的实际尺寸,而不考虑它在页面上的使用方式(如果有的话)。
因此,这些数字完全无关。
如果您想比较 PDF 页面上的大小,自然选择的单位是 PDF 页面的默认用户 space 单位。默认情况下,它们等于 1/72 英寸。
您可以像这样以用户 space 为单位检索 PDPage page
的页面大小:
PDRectangle cropBox = page.getCropBox();
float width = cropBox.getWidth();
float height = cropBox.getHeight();
PDF 页面上位图的尺寸有点困难,因为位图受到任意仿射变换,当前变换矩阵 (CTM) 当时它被绘制。因此,您必须确定该 CTM 值。为此,您必须将页面内容解析到绘制位图的位置,然后您必须从当前转换矩阵中读取 CTM。
PDFBox 示例 PrintImageLocations
演示了这一点,输出“以用户 space 单位显示的大小 = XXX,YYY”就是您要找的那个。
我用pdfbox把pdf转成图片,发现PDFRenderer和PDImageXObject返回的宽度好像比例不一样。 如何获得相同比例的宽度?
这是我获取页面宽度的方式:
PDFRenderer pdRender = new PDFRenderer(pdDoc);
BufferedImage singlePage = pdRender.renderImage(pgIdx-1);
singlePage.getWidth(); // pageWidth = 623
这就是我获取图像块宽度的方式:
PDImageXObject image = (PDImageXObject) o;
image.getImage(); // imageWidth = 484
“pageWidth”是图像元数据中显示的实际尺寸,但“imageWidth”比实际尺寸大。实际比例如下图所示(整页对比红框)。
您确定页面大小的方式
PDFRenderer pdRender = new PDFRenderer(pdDoc);
BufferedImage singlePage = pdRender.renderImage(pgIdx-1);
singlePage.getWidth(); // pageWidth = 623
正在使用一些默认设置将页面呈现为位图后确定页面宽度(以像素为单位),尤其是在某些未知分辨率下。
您确定图像尺寸的方法
PDImageXObject image = (PDImageXObject) o;
image.getImage(); // imageWidth = 484
确定位图资源的实际尺寸,而不考虑它在页面上的使用方式(如果有的话)。
因此,这些数字完全无关。
如果您想比较 PDF 页面上的大小,自然选择的单位是 PDF 页面的默认用户 space 单位。默认情况下,它们等于 1/72 英寸。
您可以像这样以用户 space 为单位检索 PDPage page
的页面大小:
PDRectangle cropBox = page.getCropBox();
float width = cropBox.getWidth();
float height = cropBox.getHeight();
PDF 页面上位图的尺寸有点困难,因为位图受到任意仿射变换,当前变换矩阵 (CTM) 当时它被绘制。因此,您必须确定该 CTM 值。为此,您必须将页面内容解析到绘制位图的位置,然后您必须从当前转换矩阵中读取 CTM。
PDFBox 示例 PrintImageLocations
演示了这一点,输出“以用户 space 单位显示的大小 = XXX,YYY”就是您要找的那个。