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

问题描述 投票:0回答:2

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

我知道pdf文件本身不包含DPI信息。

然而,文档中具有相同尺寸的图像在提取后具有不同的像素大小,并且没有 dpi 元信息。

那么是否有可能以某种方式计算相对于 pdf 页面的图像大小或使用 pdfBox 提取具有 dpi 信息的图像(对于 png 或 jpeg 图像文件)?

谢谢!

java image pdf dpi pdfbox
2个回答
8
投票

从PDFBox官方示例源代码中获取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 像素 <---- pixels

大小 = 610.56pu, 845.52pu<---- "page units", 1pu = 1/72 inch

尺寸 = 8.48 英寸,11.743334 英寸

尺寸 = 215.39198mm, 298.28067mm

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.