如何检查 PDF 页面的嵌入图像的分辨率 (DPI)
本文关键字:分辨率 DPI 图像 何检查 检查 PDF | 更新日期: 2023-09-27 18:37:23
是否有任何免费库可用于获取PDF文件中包含的DPI图像的分辨率?
我已经尝试了以下代码,使用 PDFSharp,但它返回的 DPI 不正确。例如,它显示 96dpi,而它应该是 150dpi:
using (PdfDocument pdf = PdfReader.Open(sourcePdf))
{
for (int i = 0; i < pdf.Pages.Count; i++)
{
XGraphics xGraphics = XGraphics.FromPdfPage(pdf.Pages[i]);
float dpi = xGraphics.Graphics.DpiX;
}
}
您可以使用命令行工具来获取所需的信息: pdfimages
.
但是,您需要一个基于Poppler库的最新版本pdfimages
(而不是基于XPDF的"pdfimages"!
最近的 Poppler 版本允许您使用 -list
选项:
pdfimages -list -f 2 -l 4 my.pdf
上述示例命令的输出显示页面范围内的所有图像,从 2(要显示的页面)到 4(要显示
的页面)。以下是上述命令的输出,使用我专门为此问题准备的示例 PDF 文件(水平滚动以查看所有列):
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
---------------------------------------------------------------------------------------
2 0 image 697 1238 gray 1 8 jpeg no 16 0 320 320 142K 17%
3 1 image 697 1238 gray 1 8 jpeg no 16 0 151 151 142K 17%
4 2 image 697 1238 gray 1 8 jpeg no 16 0 84 115 142K 17%
输出显示以下内容:
- 三
页 2-4 上有三张图片(如第 1+2 栏所示,标题为
page
和num
)。所有三个图像的 PDF 对象 ID 都是相同的:
16 0
(如第 11+12 列所示,标题为object
+ID
)。这意味着PDF只定义了一个不同的对象,但显示它三次(即,图像只嵌入一次,但出现在3页上)。图像的宽度为
697
像素,高度为1238
像素,图像深度(每颜色位数)为8
,色彩空间为gray
颜色通道/分量的数量为1
,压缩方案为jpeg
,字节化(如嵌入)为142K
,压缩率为17%
(如第 4-9 列和 14+15 标题width
所示,height
、color
、comp
、bpc
、size
和ratio
)。但是,相同的图像以不同的分辨率出现在不同的页面上(以PPI表示 - 每英寸像素数---不是DPI):
第 2 页显示它的 PPI 在两个方向上均为
320
,第 4 页显示它的 PPI 在两个方向上均为
151
,而第 3 页显示它在水平 (X) 方向上的 PPI 为
84
,在垂直 (Y) 方向上为115
PPI。
现在,如果命令行工具不能重新用于您的目标:作为上面所示工具基础的 Poppler 库肯定是自由的("自由如自由",以及"自由如啤酒")。
这是我用来演示上述命令输出的PDF("my.pdf")的链接。
PDF 不一定在其定义中使用 DPI。PDF 允许 文档创建者定义自己的用户坐标空间,这可以 或者可能不会映射到类似于每英寸点数的任何内容。
从这里: