15

是否可以使用 GhostScript 获取页面大小(例如从 PDF 文档页面)?我见过“bbox”设备,但它返回边界框(每页不同),而不是 PDF 页面的 TrimBox(或 CropBox)。(有关页面框的信息,请参见http://www.prepressure.com/pdf/basics/page_boxes。)还有其他可能性吗?

4

3 回答 3

12

不幸的是,在 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
于 2010-06-05T19:02:31.070 回答
10

同时我发现了另一种方法。这个仅使用 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 ]
  [....]
于 2010-06-28T13:16:51.800 回答
8

纯 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以获取裁剪框。

于 2018-10-04T10:08:25.140 回答