使用pdfBox从PDF中提取的图像的DPI

我正在使用java pdfBox库来validation带有嵌入式图像的单页pdf文件。

我知道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]

position = 0.0,0.0

size = 2544px,3523px <---- pixels

size = 610.56pu,845.52pu <----“page units”,1pu = 1/72英寸

size = 8.48in,11.743334in

尺寸= 215.39198mm,298.28067mm

dpi = 300 dpi(X),300 dpi(Y)

我不熟悉pdfBox,但你有一个CTM与pdf中的每个光栅图像相关联。 CTM提供有关页面上图像位置和尺寸的一个数据。 因此,来自提取图像的数据应足以计算相对dpi。