如何检查PDF页面的嵌入图像的分辨率(DPI)?
有没有免费的库,可以用来获取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栏所示,142K
width
,height
,color
,comp
,bpc
,size
和ratio
)。 -
但是,相同的图像出现在不同分辨率的不同页面上(以PPI表示 – 每英寸像素数 – 不是DPI ):
-
第2页显示两个方向的PPI为
320
, -
第4页显示两个方向的PPI为
151
, -
而第3页显示水平(X)方向的PPI为
84
,垂直(Y)方向的PPI为115
PPI。
-
现在,如果命令行工具无法为您的目标重新定位:作为上述工具基础的Poppler库肯定是免费的( ‘自由’ ,以及‘免费啤酒’ )。
这是PDF( “my.pdf” )的链接,我用它来演示上面命令的输出。
PDF不一定在其定义中使用DPI。 PDF允许文档创建者定义他们自己的用户坐标空间,该空间可能会或可能不会映射到类似于每英寸点数的任何内容。
从这里: