Использование GhostScript для получения размера страницы - PullRequest
14 голосов
/ 31 мая 2010

Можно ли получить размер страницы (например, со страницы документа PDF), используя GhostScript? Я видел устройство «bbox», но оно возвращает ограничивающую рамку (она отличается на странице), а не TrimBox (или CropBox) страниц PDF. (См. http://www.prepressure.com/pdf/basics/page_boxes для получения информации о блоках страниц.) Любая другая возможность?

Ответы [ 3 ]

12 голосов
/ 05 июня 2010

К сожалению, с помощью Ghostscript не так просто получить (возможно, другие) размеры страниц (или * коробки) в PDF-файле с помощью Ghostscript.

Но поскольку вы спрашивали и о других возможностях: достаточно надежным способом определения размеров носителя для каждой страницы (и даже для каждого из встроенных блоков {Trim, Media, Crop, Bleed}) является инструмент командной строки pdfinfo. EXE. Эта утилита является частью инструментов XPDF от http://www.foolabs.com/xpdf/download.html. Вы можете запустить инструмент с параметром "-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
9 голосов
/ 28 июня 2010

Тем временем я нашел другой метод. Этот использует только 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 ]
  [....]
4 голосов
/ 04 октября 2018

Решение на чистом 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"

Команда печатает MediaBox каждой страницы в PDF как четыре числа в строке. Пример из 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, чтобы получить коробку обрезки.

...