我正在使用java pdfBox库来验证带有嵌入图像的单页pdf文件。
我知道pdf文件本身并不包含DPI信息。
然而,文档中具有相同尺寸的图像在提取后具有不同的像素大小,并且没有dpi元信息。
那么有可能以某种方式计算相对于pdf页面的图像大小,或使用pdfBox提取带有dpi信息的图像(对于png或jpeg图像文件)吗?
谢谢!
答案 0 :(得分:5)
从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 = 300dpi(X),300dpi(Y)
答案 1 :(得分:0)
我不熟悉pdfBox,但你有一个CTM与pdf中的每个光栅图像相关联。 CTM提供有关页面上图像位置和尺寸的一个数据。因此,提取图像的数据应足以计算相对dpi。