我正在使用java pdfBox庫來驗證單頁PDF文件與嵌入式圖像。從pdf中提取的圖像的DPI與pdfBox
我知道pdf文件本身並不包含DPI信息。
然而,在文檔中具有相同尺寸的圖像在提取後具有不同的像素大小,並且沒有dpi元信息。
那麼有可能以某種方式計算相對於PDF頁面的圖像大小,或使用pdfBox提取帶有dpi信息的圖像(對於png或jpeg圖像文件)?
謝謝!
我正在使用java pdfBox庫來驗證單頁PDF文件與嵌入式圖像。從pdf中提取的圖像的DPI與pdfBox
我知道pdf文件本身並不包含DPI信息。
然而,在文檔中具有相同尺寸的圖像在提取後具有不同的像素大小,並且沒有dpi元信息。
那麼有可能以某種方式計算相對於PDF頁面的圖像大小,或使用pdfBox提取帶有dpi信息的圖像(對於png或jpeg圖像文件)?
謝謝!
從PDFBOX src下載獲取PrintImageLocations.java文件。下面是一個除源的,只有最後一行是由我,它會輸出的DPI:
float imageXScale = ctmNew.getXScale();
float imageYScale = ctmNew.getYScale();
System.out.println("position = " + ctmNew.getXPosition() + ", " + ctmNew.getYPosition());
// size in pixel
System.out.println("size = " + imageWidth + "px, " + imageHeight + "px");
// size in page units
System.out.println("size = " + imageXScale + "pu, " + imageYScale + "pu");
// size in inches
imageXScale /= 72;
imageYScale /= 72;
System.out.println("size = " + imageXScale + "in, " + imageYScale + "in");
// size in millimeter
imageXScale *= 25.4;
imageYScale *= 25.4;
System.out.println("size = " + imageXScale + "mm, " + imageYScale + "mm");
System.out.printf("dpi = %.0f dpi (X), %.0f dpi (Y) %n", image.getWidth() * 72/ctmNew.getXScale(), image.getHeight() * 72/ctmNew.getYScale());
下面是一個輸出樣本:
實測值圖像[X0]
位置= 0.0,0.0
大小= 2544px,3523px < ----像素
大小= 610.56pu,845.52pu < ---- 「頁單元」,1PU = 1/7 2英寸
大小= 8.48in,11.743334in
大小=215.39198毫米,298.28067毫米
DPI = 300 dpi的(X),300 dpi的(Y)
我對pdfBox並不熟悉,但是您有一個與pdf中每個柵格圖像相關的CTM。 CTM給出了一個關於頁面上圖像位置和尺寸的數據。因此,來自提取圖像的數據應足以計算相對dpi。