如何检查PDF页面的嵌入图像的分辨率(DPI)?

时间:2015-01-14 08:25:05

标签: c# pdf dpi pdfsharp

是否有免费的图书馆,可用于解析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; 
    }
}

2 个答案:

答案 0 :(得分:3)

您可以使用命令行工具获取所需信息: pdfimages

但是,您需要一个基于Poppler library的最新版本pdfimages '基于{的pdfimages' {3}}!)

最近的Poppler版本允许您使用-list选项:

pdfimages -list -f 2 -l 4 my.pdf

上述示例命令的输出显示页面范围内的所有图像,范围从2( f 第一页显示)到4( l < / em> 要显示的页面。

以下是上述命令的输出,使用我专门为此问题准备的示例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%

输出显示以下内容:

  1. 三页2-4上有三张图片(如第1 + 2列所示,标题为pagenum)。

  2. 所有三张图片的PDF 对象ID 均相同:16 0(如第11 + 12列所示,标题object + ID )。这意味着PDF只定义了一个不同的对象,但显示了三次(即图像只嵌入一次,但显示在3页上)。

  3. 图片的宽度为697像素,其高度为1238像素,其图像深度(每种颜色的位数)为8,其色彩空间为gray其颜色通道/组件的数量为1,其压缩方案为jpeg,其字节大小(嵌入式)为142K,其压缩率为17%(如下所示)第4-9和14 + 15列widthheightcolorcompbpcsizeratio )。

  4. 但是,相同的图像会出现在不同分辨率的不同页面上(以 PPI - 每英寸像素数 - 不是 DPI ):

    • 第2页显示两个方向的PPI均为320

    • 第4页显示两个方向的PPI均为151

    • ,而第3页显示水平(X)方向的PPI为84,垂直(Y)方向的PPI为115


  5. 现在,如果命令行工具无法重新用于您的目标:作为上述工具基础的Poppler库肯定是免费的('自由',如同在自由',以及'免费,如啤酒')。


    以下是 XPDF 我用来演示上述命令的输出。

答案 1 :(得分:1)

  

PDF不一定在其定义中使用DPI。 PDF允许   文档创建者可以定义自己的用户坐标空间   或者可能不会映射到类似于Dots Per Inch的任何内容。

来自here: