我正在使用 java pdfBox 库来验证带有嵌入图像的单页 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]
位置 = 0.0, 0.0
大小 = 2544 像素,3523 像素 <---- 像素
大小 = 610.56pu,845.52pu <----“页面单位”,1pu = 1/72 英寸
尺寸 = 8.48 英寸,11.743334 英寸
尺寸 = 215.39198mm, 298.28067mm
dpi = 300 dpi (X), 300 dpi (Y)
我不熟悉 pdfBox,但你有一个与 pdf 中的每个光栅图像相关联的 CTM。CTM 提供有关页面上图像位置和尺寸的一种数据。因此,来自提取图像的数据应该足以计算相对 dpi。