以像素为单位测量时,PDF 尺寸有意义吗?
Are PDF dimensions meaningful when measured in pixels?
我一直在测试两种使用两个 Python 模块测量 PDF 像素尺寸的方法 - Wand (ImageMagick bindings) and GDAL。
获取 this PDF returns 的维度,每个模块的结果完全不同:
- Wand 报告 556x748
- GDAL 报告 2317x3117。
其中之一是 'wrong'?如果我理解正确,以像素为单位的 PDF 尺寸取决于设备 - 但是,这两个结果使用相同的显示设备。
还有其他因素会影响 PDF 像素大小的计算吗?
'Wand' 和 'GDAL' 不能处理 PDF
如果您依赖 Wand(ImageMagick 绑定)来处理 PDF,那么您 而不是 使用 ImageMagick想象。
因为 ImageMagick 本身无法处理 PDF——它只能处理光栅图像。
对于其他格式,IM 必须依赖 'delegates'。 ImageMagick 代表是外部的第三方实用程序,ImageMagick 运行 首先将 'foreign' 文件格式转换为光栅图像——然后传递给 ImageMagick 以进行进一步的工作。
因此,即使您只想使用 ImageMagick 确定 PDF 页面的尺寸,这也不是一个简单的过程:
调用 Ghostscript 将 PDF 页面呈现为光栅图像。 (您知道 Ghostscript 将使用哪种分辨率来创建光栅吗?!?)
运行 一些 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
快得多:
不需要渲染或栅格化或完全解释 PDF 文件。
它只是(非常快速地)查找维度的字典条目。
这些维度被 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 页:
419.535 x 297.644 pts
- 第 2 页:
297.646 x 419.524 pts
- 第 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?" 部分。
我一直在测试两种使用两个 Python 模块测量 PDF 像素尺寸的方法 - Wand (ImageMagick bindings) and GDAL。
获取 this PDF returns 的维度,每个模块的结果完全不同:
- Wand 报告 556x748
- GDAL 报告 2317x3117。
其中之一是 'wrong'?如果我理解正确,以像素为单位的 PDF 尺寸取决于设备 - 但是,这两个结果使用相同的显示设备。
还有其他因素会影响 PDF 像素大小的计算吗?
'Wand' 和 'GDAL' 不能处理 PDF
如果您依赖 Wand(ImageMagick 绑定)来处理 PDF,那么您 而不是 使用 ImageMagick想象。
因为 ImageMagick 本身无法处理 PDF——它只能处理光栅图像。
对于其他格式,IM 必须依赖 'delegates'。 ImageMagick 代表是外部的第三方实用程序,ImageMagick 运行 首先将 'foreign' 文件格式转换为光栅图像——然后传递给 ImageMagick 以进行进一步的工作。
因此,即使您只想使用 ImageMagick 确定 PDF 页面的尺寸,这也不是一个简单的过程:
调用 Ghostscript 将 PDF 页面呈现为光栅图像。 (您知道 Ghostscript 将使用哪种分辨率来创建光栅吗?!?)
运行 一些 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
快得多:
不需要渲染或栅格化或完全解释 PDF 文件。
它只是(非常快速地)查找维度的字典条目。
这些维度被 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 页:
419.535 x 297.644 pts
- 第 2 页:
297.646 x 419.524 pts
- 第 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?" 部分。