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

Are PDF dimensions meaningful when measured in pixels?

我一直在测试两种使用两个 Python 模块测量 PDF 像素尺寸的方法 - Wand (ImageMagick bindings) and GDAL

获取 this PDF returns 的维度,每个模块的结果完全不同:

其中之一是 'wrong'?如果我理解正确,以像素为单位的 PDF 尺寸取决于设备 - 但是,这两个结果使用相同的显示设备。

还有其他因素会影响 PDF 像素大小的计算吗?

'Wand' 和 'GDAL' 不能处理 PDF

如果您依赖 Wand(ImageMagick 绑定)来处理 PDF,那么您 而不是 使用 ImageMagick想象。

因为 ImageMagick 本身无法处理 PDF——它只能处理光栅图像。

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

因此,即使您只想使用 ImageMagick 确定 PDF 页面的尺寸,这也不是一个简单的过程:

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

  2. 运行 一些 ImageMagick 命令 return 'pixels' 中 GS 创建的光栅图像的尺寸。

这可能需要很长时间才能 return 结果 -- 结果取决于光栅化 PDF 页面时选择的分辨率。

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

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

使用正确的工具完成工作

PDF 将所有页面的尺寸存储在 'dictionary' 中,关键字为 /MediaBox。此密钥必须存在于所有有效的 PDF 文件中。

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

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

pdfinfo 快得多:

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

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

  3. 这些维度被 return 编辑为 。这个单位起源于 PostScript 世界:72 点相当于 1 英寸。因此,在分辨率为 72 DPI/PPI 时,它也会向您显示 "dimensions in pixels"...

示例(使用来自 OP 的链接 PDF)

我已经 运行 一个 pdfinfo 命令针对您链接的示例 PDF 来确定页面范围 116-117 的尺寸(使用 -f 用于 first 和 -l 用于范围的 last 页).命令在几分之一秒内完成:

结果如下:

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 秒才能完成,returns:

957 x 751
2065 x 2249

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

我见过 ImageMagick 被设置为使用 -r75x75 的情况——这当然会 return 不同的值!

使用另一个 PDF 的示例

下一个示例是使用 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

最重要的是,第一页旋转了 90 度(从 Page 1 rot: 90 行可以看出)。

现在让我们比较一下我的 ImageMagick 命令 ([2]) returns:

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 版本,它使用 Ghostscript v9.10 作为代理。如果你在与其他 IM/GS 版本不同的系统,您的输出可能会有所不同!)

因此最后一个示例可能会回答 OP 问题的 "Are there other factors that can affect the calculation of PDF size in pixels?" 部分。