使用GhostScript获取页面大小

Ari*_*les 15 pdf size ghostscript

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

Kur*_*fle 12

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

但是,由于您还要求其他可能性:确定每个页面(甚至每个嵌入式{Trim,Media,Crop,Bleed}框)的介质大小的相当可靠的方法是命令行工具pdfinfo.exe.该实用程序是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

  • 要获取所有页面,请不要指定第一个(所以没有`-f`)并将最后一页设置为-1(所以`-l -1`) (2认同)

Kur*_*fle 10

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

这个方法使用一个小的帮助程序,用PostScript编写,附带Ghostscript的源代码.看在toolbin子目录的pdf_info.ps文件.

包含的注释表示您应该像这样运行它以列出使用的字体,使用的媒体大小

gswin32c -dNODISPLAY ^
   -q ^
   -sFile=____.pdf ^
   [-dDumpMediaSizes] ^
   [-dDumpFontsUsed [-dShowEmbeddedFonts]] ^
   toolbin/pdf_info.ps
Run Code Online (Sandbox Code Playgroud)

我确实在本地示例文件上运行它,命令行参数只询问媒体大小(不是使用的字体).结果如下:

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 ]
  [....]
Run Code Online (Sandbox Code Playgroud)

  • 您可以在Ghostscript的Git存储库中查找它:[http://git.ghostscript.com/?p=ghostpdl.git;a=summary](http://git.ghostscript.com/?p=ghostpdl.git;一个摘要=).或尝试**[此直接链接](http://git.ghostscript.com/?p=ghostpdl.git;a=blob_plain;f=gs/toolbin/pdf_info.ps;hb=HEAD)**. (2认同)
  • 再也无法在git repo中找到它 - 至少不是通过谷歌.并且,在ubuntu上/usr/share/ghostscript/9.18/lib目录不包含它.有替代方案吗?(替代地点或计划?) (2认同)

Ste*_*nev 5

纯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
Run Code Online (Sandbox Code Playgroud)

这是命令的细分:

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
Run Code Online (Sandbox Code Playgroud)

替换/MediaBox/CropBox以获取裁剪框。

  • 不错的答案!和不错的突破!不过我在这里遇到了一个错误(无法打开 X 显示 `:0.0`),这可以通过打开 X 服务器或通过在调用中添加 `-dNODISPLAY` 来修复(更好,因为我们无论如何都不需要 X) . (2认同)