以像素为单位测量时PDF尺寸是否有意义?

时间:2015-02-11 21:37:44

标签: pdf image-processing imagemagick pixel dimensions

我一直在测试两种使用两个Python模块测量PDF的尺寸的方法 - Wand(ImageMagick绑定)和GDAL

获取this PDF的维度会在每个模块中返回完全不同的结果:

  • Wand报告556x748
  • GDAL报告2317x3117。

其中一个'错'了吗?如果我理解正确,以像素为单位的PDF尺寸与设备有关 - 但是,这两个结果使用相同的显示设备。

是否有其他因素会影响PDF大小的计算?

1 个答案:

答案 0 :(得分:4)

'Wand'和'GDAL'不用于处理PDF

如果依靠Wand(ImageMagick绑定)来处理PDF,您可能会想象使用ImageMagick 而不是

因为ImageMagick无法自行处理PDF - 它只处理光栅图像。

对于其他格式,IM必须依赖'委托'。 ImageMagick代理是外部的第三方实用程序,它们由ImageMagick运行,首先将“外部”文件格式转换为光栅图像 - 然后传递给ImageMagick以进行进一步的工作。

因此,即使您只想使用ImageMagick确定PDF页面的尺寸,这也不像人们想要的那样简单:

  1. 调用Ghostscript将PDF页面渲染为光栅图像。 (你知道Ghostscript将使用哪种分辨率来创建栅格吗?!?)

  2. 运行一些ImageMagick命令,以'像素'的形式返回GS创建的光栅图像的尺寸。

  3. 返回结果可能需要花费很长时间 - 结果取决于光栅化PDF页面时所选择的分辨率。

    这是工作的错误工具......

    (对于GDAL来说基本上是相同的,即使它没有使用Ghostscript进行光栅化。但是你知道GDAL在将矢量PDF页面转换为栅格时使用的默认分辨率吗?!? )

    使用正确的工具

    PDF使用键/MediaBox将所有页面的维度存储在“词典”中。此密钥必须出现在所有有效的PDF文件中。

    请注意,PDF还知道/CropBox/ArtBox/TrimBox/BleedBox的(可选)概念。 /CropBox键值(如果存在)可以命令PDF查看器隐藏整个页面的某些部分,并仅显示其较小的视口框(打印或查看时)。

    确定PDF页面尺寸的一个命令行工具是pdfinfo。此实用程序基于Poppler库 - 因此,如果您不想运行外部命令,请将您自己的应用程序绑定到此lib。

    pdfinfo要快得多:

    1. 无需渲染或栅格化或完全解释PDF文件。

    2. 它只是(非常快)查找维度的字典条目。

    3. 这些尺寸在 points 中返回。此单元源自PostScript世界:72点相当于1英寸。因此,在72 DPI / PPI的分辨率下,它也会向您显示“像素尺寸”......

    4. 示例(使用OP中的链接PDF)

      我针对您的关联示例PDF运行pdfinfo命令,以确定页面范围116-117的维度(使用 -f f < / em> irst和 -l 表示该范围的 l ast页面。命令在几分之一秒内完成:

      结果如下:

      pdfinfo -f 116 -l 117 -box soils-of-manawatu-county-soil-survey-report-30.pdf
      
       Title:          
       Subject:        
       Keywords:       
       Author:         
       Creator:        ABBYY FineReader
       Producer:       
       CreationDate:   Tue Dec 18 19:11:50 2007
       ModDate:        Tue Dec 18 19:11:50 2007
       Tagged:         no
       UserProperties: no
       Suspects:       no
       Form:           none
       JavaScript:     no
       Pages:          117
       Encrypted:      no
       Page  116 size: 957 x 751 pts
       Page  116 rot:  0
       Page  117 size: 2065 x 2249 pts
       Page  117 rot:  0
       Page  116 MediaBox:     0.00     0.00   957.00   751.00
       Page  116 CropBox:      0.00     0.00   957.00   751.00
       Page  116 BleedBox:     0.00     0.00   957.00   751.00
       Page  116 TrimBox:      0.00     0.00   957.00   751.00
       Page  116 ArtBox:       0.00     0.00   957.00   751.00
       Page  117 MediaBox:     0.00     0.00  2065.00  2249.00
       Page  117 CropBox:      0.00     0.00  2065.00  2249.00
       Page  117 BleedBox:     0.00     0.00  2065.00  2249.00
       Page  117 TrimBox:      0.00     0.00  2065.00  2249.00
       Page  117 ArtBox:       0.00     0.00  2065.00  2249.00
       File size:      2105582 bytes
       Optimized:      yes
       PDF version:    1.2
      

      正如您所看到的,您的PDF在其117页中的每一页都没有相同的页面尺寸!

      现在让我们尝试使用ImageMagick命令:( [1]

      identify              \
        -format "%W x %H\n" \
         soils-of-manawatu-county-soil-survey-report-30.pdf[115-116]
      

      [1] 注意: ImageMagick的页码编号方法从零开始{第一页有数字'0'} - 因此页面116-117的[115-116]范围。)

      这需要6秒钟才能完成,并返回:

      957 x 751
      2065 x 2249
      

      我在这里很幸运,因为Ghostscript似乎已经运行了一个等于-r72x72的分辨率参数。

      我见过将ImageMagick设置为使用-r75x75的情况 - 这当然会返回不同的值!

      使用其他PDF的示例

      接下来的示例使用PDF表示IXUS 850 IS相机的用户手册,如网络上所示。我将仅检索前3页的信息:

      pdfinfo -box -l 3 _IXUS_850IS_ADVCUG_EN.pdf
      
       Creator:        FrameMaker 6.0
       Producer:       Acrobat Distiller 5.0.5 (Windows)
       CreationDate:   Thu Aug 17 16:43:06 2006
       ModDate:        Tue Aug 22 12:20:24 2006
       Tagged:         no
       UserProperties: no
       Suspects:       no
       Form:           AcroForm
       JavaScript:     no
       Pages:          146
       Encrypted:      no
       Page    1 size: 419.535 x 297.644 pts
       Page    1 rot:  90
       Page    2 size: 297.646 x 419.524 pts
       Page    2 rot:  0
       Page    3 size: 297.646 x 419.524 pts
       Page    3 rot:  0
       Page    1 MediaBox:     0.00     0.00   595.00   842.00
       Page    1 CropBox:     87.25   430.36   506.79   728.00
       Page    1 BleedBox:    87.25   430.36   506.79   728.00
       Page    1 TrimBox:     87.25   430.36   506.79   728.00
       Page    1 ArtBox:      87.25   430.36   506.79   728.00
       Page    2 MediaBox:     0.00     0.00   595.00   842.00
       Page    2 CropBox:    148.17   210.76   445.81   630.28
       Page    2 BleedBox:   148.17   210.76   445.81   630.28
       Page    2 TrimBox:    148.17   210.76   445.81   630.28
       Page    2 ArtBox:     148.17   210.76   445.81   630.28
       Page    3 MediaBox:     0.00     0.00   595.00   842.00
       Page    3 CropBox:    148.17   210.76   445.81   630.28
       Page    3 BleedBox:   148.17   210.76   445.81   630.28
       Page    3 TrimBox:    148.17   210.76   445.81   630.28
       Page    3 ArtBox:     148.17   210.76   445.81   630.28
       File size:      6888764 bytes
       Optimized:      yes
       PDF version:    1.4
      

      从输出中可以看出,所有三种页面大小(“/MediaBox”)都是595 x 842 pts(== A4),但不同的/CropBox条目限制了可见部分用于查看这些大小的端口的页面:

      1. 第1页:419.535 x 297.644 pts
      2. 第2页:297.646 x 419.524 pts
      3. 第3页:297.646 x 419.524 pts
      4. 最重要的是,第一页旋转了90度(从Page 1 rot: 90这一行可以看出。)

        现在让我们比较我的ImageMagick命令( [2] )返回的内容:

        identify -format "%W x %H\n" _IXUS_850IS_ADVCUG_EN.pdf[0-2]
        
         842 x 595
         595 x 842
         595 x 842
        

        [2] 注意:我系统上的IM是 6.9.0-0 Q16 < / em> versio,它使用Ghostscript v9.10 作为委托。如果你在与其他IM / GS版本不同的系统上测试相同的东西,你的输出可能会有所不同!)

        所以这最后一个例子可能会回答“还有其他因素会影响PDF大小的计算吗?” OP问题的一部分。