使用GhostScript获取页面大小

时间:2010-05-31 11:47:05

标签: pdf size ghostscript

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

3 个答案:

答案 0 :(得分:12)

不幸的是,在Ghostscript的帮助下,在PDF中获取(可能是不同的)页面大小(或*盒子)似乎并不容易。

但是,由于您还要求其他可能性:确定每个页面(甚至每个嵌入式{Trim,Media,Crop,Bleed}框)的媒体大小的相当可靠的方法是命令行工具pdfinfo。可执行程序。该实用程序是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
Creator:        FrameMaker 6.0
Producer:       Acrobat Distiller 5.0.5 (Windows)
CreationDate:   08/17/06 16:43:06
ModDate:        08/22/06 12:20:24
Tagged:         no
Pages:          146
Encrypted:      no
Page    1 size: 419.535 x 297.644 pts
Page    2 size: 297.646 x 419.524 pts
Page    3 size: 297.646 x 419.524 pts
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

答案 1 :(得分:9)

与此同时,我发现了一种不同的方法。这个只使用Ghostscript(就像你需要的那样)。无需额外的第三方实用程序。

此方法使用一个用PostScript编写的小助手程序,附带Ghostscript源代码。查看 toolbin 子目录中的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 ]
  [....]

答案 2 :(得分:3)

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