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

发布于 2024-10-27 13:52:27 字数 221 浏览 7 评论 0原文

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

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

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

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

谢谢!

I'm using java pdfBox library to validate single page pdf files with embedded images.

I know that pdf file itself doesen't contain the DPI information.

However the images that have the equal dimensions in the document have different sizes in pixels after extracting and no dpi meta information.

So is it possible to somehow calculate the image sizes relative to pdf page or to extract images with their dpi information (for png or jpeg image files) using pdfBox?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我喜欢麦丽素 2024-11-03 13:52:27

从 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());

这是一个示例输出:

Found image [X0]

位置 = 0.0, 0.0

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

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

尺寸 = 8.48 英寸、11.743334

英寸 尺寸 = 215.39198 毫米、298.28067 毫米

dpi = 300 dpi (X)、300 dpi (Y )

Get the PrintImageLocations.java file from the PDFBOX src download. Here's an except of the source, only the last line is by me, and it will output the 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());

And here's a sample output:

Found image [X0]

position = 0.0, 0.0

size = 2544px, 3523px <---- pixels

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

size = 8.48in, 11.743334in

size = 215.39198mm, 298.28067mm

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

云裳 2024-11-03 13:52:27

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

I am not familiar with pdfBox, but you has a CTM associated with every raster image in pdf. CTM gives one data about position and dimensions of image on the page. Thus and data from extracted images should be sufficient to calculate relative dpi.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文