【问题标题】:Are PDF dimensions meaningful when measured in pixels?以像素为单位测量时,PDF 尺寸是否有意义?
【发布时间】:2015-04-12 10:50:52
【问题描述】:

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

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

  • 魔杖报告 556x748
  • GDAL 报告 2317x3117。

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

还有其他因素会影响 PDF 大小(以像素为单位)的计算吗?

【问题讨论】:

  • 我会说 Wand 假设 72 DPI 和 GDAL 300 DPI。
  • 谢谢,有道理
  • PDF的度量单位是Point。因此,如果您使用像素,则必须始终考虑分辨率。
  • 另外:这个PDF的页面大小不等,很多是556*748左右(左右上下10pt),很多是947*728左右,最后一个为 2065*2249。因此,无论如何,在询问 此 pdf 的尺寸 时,您不应期望得到明确的结果。

标签: pdf image-processing imagemagick pixel dimensions


【解决方案1】:

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

如果您依赖 Wand(ImageMagick 绑定)来处理 PDF,那么您并没有像您想象的那样使用 ImageMagick。

因为 ImageMagick 不能自己处理 PDF——它只能处理光栅图像。

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

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

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

  2. 运行一些 ImageMagick 命令以返回 GS 创建的光栅图像的尺寸(以“像素”为单位)。

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

这对工作来说是错误的工具......

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

为工作使用正确的工具

PDF 将所有页面的尺寸存储在带有键 /MediaBox 的“字典”中。此密钥必须存在于所有有效的 PDF 文件中。

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

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

pdfinfo 更快:

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

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

  3. 这些维度以 points 的形式返回。这个单位起源于 PostScript 世界:72 点相当于 1 英寸。因此,在分辨率为 72 DPI/PPI 时,它也会向您显示“像素尺寸”...

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

我已针对您链接的示例 PDF 运行 pdfinfo 命令以确定页面范围 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 的页码方法是从零开始的{first page has number '0'} -- 因此第 116-117 页的 [115-116] 范围。)

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

957 x 751
2065 x 2249

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

我已经看到 ImageMagick 设置为使用 -r75x75 的情况——这当然会返回不同的值!

使用另一个 PDF 的示例

接下来的示例使用代表 IXUS 850 IS 相机用户手册的 PDF 完成,可在网上找到。我将只检索前 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]) 返回的内容:

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 版本的不同系统上测试相同的东西,您的输出可能会有所不同!)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多