我一直在测试两种使用两个Python模块测量PDF的尺寸的方法 - Wand(ImageMagick绑定)和GDAL。
获取this PDF的维度会在每个模块中返回完全不同的结果:
其中一个'错'了吗?如果我理解正确,以像素为单位的PDF尺寸与设备有关 - 但是,这两个结果使用相同的显示设备。
是否有其他因素会影响PDF大小的计算?
答案 0 :(得分:4)
如果依靠Wand(ImageMagick绑定)来处理PDF,您可能会想象使用ImageMagick 而不是 。
因为ImageMagick无法自行处理PDF - 它只处理光栅图像。
对于其他格式,IM必须依赖'委托'。 ImageMagick代理是外部的第三方实用程序,它们由ImageMagick运行,首先将“外部”文件格式转换为光栅图像 - 然后传递给ImageMagick以进行进一步的工作。
因此,即使您只想使用ImageMagick确定PDF页面的尺寸,这也不像人们想要的那样简单:
调用Ghostscript将PDF页面渲染为光栅图像。 (你知道Ghostscript将使用哪种分辨率来创建栅格吗?!?)
运行一些ImageMagick命令,以'像素'的形式返回GS创建的光栅图像的尺寸。
返回结果可能需要花费很长时间 - 结果取决于光栅化PDF页面时所选择的分辨率。
这是工作的错误工具......
(对于GDAL来说基本上是相同的,即使它没有使用Ghostscript进行光栅化。但是你知道GDAL在将矢量PDF页面转换为栅格时使用的默认分辨率吗?!? )
PDF使用键/MediaBox
将所有页面的维度存储在“词典”中。此密钥必须出现在所有有效的PDF文件中。
请注意,PDF还知道/CropBox
,/ArtBox
,/TrimBox
和/BleedBox
的(可选)概念。 /CropBox
键值(如果存在)可以命令PDF查看器隐藏整个页面的某些部分,并仅显示其较小的视口框(打印或查看时)。
确定PDF页面尺寸的一个命令行工具是pdfinfo
。此实用程序基于Poppler库 - 因此,如果您不想运行外部命令,请将您自己的应用程序绑定到此lib。
pdfinfo
要快得多:
无需渲染或栅格化或完全解释PDF文件。
它只是(非常快)查找维度的字典条目。
这些尺寸在 points 中返回。此单元源自PostScript世界:72点相当于1英寸。因此,在72 DPI / PPI的分辨率下,它也会向您显示“像素尺寸”......
我针对您的关联示例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表示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
条目限制了可见部分用于查看这些大小的端口的页面:
419.535 x 297.644 pts
297.646 x 419.524 pts
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 < / em> versio,它使用Ghostscript v9.10 作为委托。如果你在与其他IM / GS版本不同的系统上测试相同的东西,你的输出可能会有所不同!)
所以这最后一个例子可能会回答“还有其他因素会影响PDF大小的计算吗?” OP问题的一部分。