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

标签 java image pdf dpi pdfbox

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

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

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

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

谢谢!

最佳答案

从 PDFBOX src 下载中获取 PrintImageLocations.java 文件。这是源代码的异常(exception),只有最后一行是我写的,它将输出 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

大小 = 2544px, 3523px <---- 像素

size = 610.56pu, 845.52pu <---- “页面单位”, 1pu = 1/72 英寸

尺寸 = 8.48 英寸,11.743334 英寸

尺寸 = 215.39198mm, 298.28067mm

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

关于java - 使用 pdfBox 从 PDF 中提取图像的 DPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472711/

相关文章:

java - 替换打开和关闭标签?

java - Java 中方法签名中的 Throw 和 Throw 语句之间的区别

jQuery 文档准备就绪事件

r - R 生成的 PDF 具有不一致的 MD5 校验和

java - java中的LinkedBlockingQueue和写锁

java - 在 autoconf 或 makefile 中禁用版本后缀/扩展

android - Android,对图像,视频和音频使用相同的onActivityResult

css - "img"中 "a"的中间垂直对齐

amazon-web-services - AWS API GATEWAY 配置以从 lambda 返回二进制 pdf 文件

javascript - Adobe PDF Forms Javascript,不同字段的求和值