簡體   English   中英

pdfbox、PDFRenderer.renderImage().getWidth() 和 PDImageXObject.getImage().getWidth() 返回不同比例的數字?

[英]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”大於實際大小。 實際比例如下圖所示(整頁 vs 紅框)。 在此處輸入圖片說明

確定頁面大小的方法

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 頁面的默認用戶空間單位。 默認情況下,它們等於1 / 72英寸。

您可以像這樣以用戶空間單位檢索PDPage page的頁面大小:

PDRectangle cropBox = page.getCropBox();
float width = cropBox.getWidth();
float height = cropBox.getHeight();

PDF 頁面上位圖的尺寸有點困難,因為位圖要進行任意仿射變換,即繪制時的當前變換矩陣(CTM)。 因此,您必須確定該 CTM 值。 為此,您必須解析頁面內容直到繪制位圖的位置,然后您必須從當前轉換矩陣中讀取 CTM。

PDFBox 示例PrintImageLocations演示了這一點,輸出“displayed size = XXX, YYY in user space units”就是你要找的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM