是否可以使用 GhostScript 获取页面大小(例如从 PDF 文档页面)?我见过“bbox”设备,但它返回边界框(每页不同),而不是 PDF 页面的 TrimBox(或 CropBox)。(有关页面框的信息,请参见http://www.prepressure.com/pdf/basics/page_boxes。)还有其他可能性吗?
3 回答
不幸的是,在 Ghostscript 的帮助下,在 PDF 中获取(可能不同的)页面大小(或 *Boxes)似乎并不容易。
但是由于您还要求其他可能性:命令行工具 pdfinfo.exe 是一种相当可靠的方法来确定每个页面(甚至每个嵌入式 {Trim,Media,Crop,Bleed}Boxes)的媒体大小。此实用程序是来自http://www.foolabs.com/xpdf/download.html的 XPDF 工具的一部分。您可以使用“-box”参数运行该工具,并使用“-f 3”告诉它从第 3 页开始,使用“-l 8”告诉它在第 8 页停止处理。
示例输出:
C:\downloads>pdfinfo -box -f 1 -l 3 _IXUS_850IS_ADVCUG_EN.pdf 创建者:FrameMaker 6.0 制作者:Acrobat Distiller 5.0.5 (Windows) 创建日期:08/17/06 16:43:06 修改日期:08/22/06 12:20:24 标签: 没有 页数:146 加密:否 第 1 页大小:419.535 x 297.644 点 第 2 页大小:297.646 x 419.524 点 第 3 页大小:297.646 x 419.524 点 第 1 页媒体框:0.00 0.00 595.00 842.00 第 1 页裁剪框:87.25 430.36 506.79 728.00 第 1 页出血盒:87.25 430.36 506.79 728.00 第 1 页修剪框:87.25 430.36 506.79 728.00 第 1 页艺术盒:87.25 430.36 506.79 728.00 第 2 页媒体框:0.00 0.00 595.00 842.00 第 2 页裁剪框:148.17 210.76 445.81 630.28 第 2 页出血框:148.17 210.76 445.81 630.28 第 2 页修剪框:148.17 210.76 445.81 630.28 第 2 页艺术盒:148.17 210.76 445.81 630.28 第 3 页媒体框:0.00 0.00 595.00 842.00 第 3 页裁剪框:148.17 210.76 445.81 630.28 第 3 页出血框:148.17 210.76 445.81 630.28 第 3 页修剪框:148.17 210.76 445.81 630.28 第 3 页艺术盒:148.17 210.76 445.81 630.28 文件大小:6888764 字节 优化:是 PDF版本:1.4
同时我发现了另一种方法。这个仅使用 Ghostscript(正如您所需要的那样)。无需额外的第三方实用程序。
这个方法使用一个小助手程序,用 PostScript 编写,附带 Ghostscript 的源代码。在工具箱子目录中查找该pdf_info.ps
文件。
包含的评论说您应该像这样运行它以列出使用的字体,使用的媒体尺寸
gswin32c -dNODISPLAY ^
-q ^
-sFile=____.pdf ^
[-dDumpMediaSizes] ^
[-dDumpFontsUsed [-dShowEmbeddedFonts]] ^
toolbin/pdf_info.ps
我确实在本地示例文件上运行了它,命令行参数只询问媒体大小(而不是使用的字体)。结果如下:
C:\> gswin32c ^
-dNODISPLAY ^
-q ^
-sFile=c:\downloads\_IXUS_850IS_ADVCUG_EN.pdf ^
-dDumpMediaSizes ^
C:/gs8.71/lib/pdf_info.ps
c:\downloads\_IXUS_850IS_ADVCUG_EN.pdf has 146 pages.
Creator: FrameMaker 6.0
Producer: Acrobat Distiller 5.0.5 (Windows)
CreationDate: D:20060817164306Z
ModDate: D:20060822122024+02'00'
Page 1 MediaBox: [ 595 842 ] CropBox: [ 419.535 297.644 ]
Page 2 MediaBox: [ 595 842 ] CropBox: [ 297.646 419.524 ]
Page 3 MediaBox: [ 595 842 ] CropBox: [ 297.646 419.524 ]
Page 4 MediaBox: [ 595 842 ] CropBox: [ 297.646 419.524 ]
[....]
纯 GhostScript PostScript 的解决方案,无需额外的脚本:
gs -dQUIET -sFileName=path/to/file.pdf -c "FileName (r) file runpdfbegin 1 1 pdfpagecount {pdfgetpage /MediaBox get {=print ( ) print} forall (\n) print} for quit"
该命令将 PDF 中每一页的 MediaBox 打印为每行四个数字。来自 3 页 PDF 的示例:
0 0 595 841
0 0 595 841
0 0 595 841
以下是命令的细分:
FileName (r) file % open file given by -sFileName
runpdfbegin % open file as pdf
1 1 pdfpagecount { % for each page index
pdfgetpage % get pdf page properties (pushes a dict)
/MediaBox get % get MediaBox value from dict (pushes an array of numbers)
{ % for every array element
=print % print element value
( ) print % print single space
} forall
(\n) print % print new line
} for
quit % quit interpreter. Not necessary if you pass -dBATCH to gs
替换/MediaBox
为/CropBox
以获取裁剪框。