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

3
我正在使用Java pdfBox库来验证带有嵌入式图像的单页PDF文件。
我知道PDF文件本身不包含DPI信息。
然而,文档中具有相等尺寸的图像在提取后具有不同的像素大小,并且没有dpi元数据。
因此,是否可能通过某种方式计算与PDF页面相关的图像大小或使用pdfBox提取具有其dpi信息的图像(对于png或jpeg图像文件)?
谢谢!
2个回答

7

从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.56页元, 845.52页元 <---- "页元",1页元 = 1/72英寸

尺寸 = 8.48英寸, 11.743334英寸

尺寸 = 215.39198毫米, 298.28067毫米

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


对我有用。在我的版本中,最后添加的一行应该是“ctmNew.getScaleX()”而不是“ctmNew.getXScale()”(Y也是同样)。 - Alex K.

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接