Получите pdf Mediabox из потока pdf, используя postscript - PullRequest
0 голосов
/ 13 мая 2019

Я хочу получить медиабокс из потока PDF (а не из файла).

В настоящее время у меня есть этот файл postscript (script.ps):

() = File dup (r) file runpdfbegin
/PDFPageCount pdfpagecount def

% Print out the Page Size info for each page.
() = 1 1 PDFPageCount {
    dup (Page ) print =print
    pdfgetpage dup
    /MediaBox pget {
      aload pop exch 4 1 roll exch sub 3 1 roll sub
      ( ) print =print ( ) print =print
    } if
    () = flush
  } for
() = quit

Если я запускаюэто для файла PDF, он работает отлично.

gs -sNODISPLAY -sFile=file.pdf script.ps

Но я хочу, чтобы он запускал его через поток:

cat file.pdf | gs -sNODISPLAY script.ps -_

Возможно ли это?

1 Ответ

1 голос
/ 13 мая 2019

Вы не можете «потоковое» воспроизведение файла PDF, поскольку для его интерпретации требуется произвольный доступ к внутренним файлам. (например, таблица перекрестных ссылок обычно сохраняется в конце файла, а смещение таблицы перекрестных ссылок сохраняется в конце файла)

Если вы передаете PDF-файл в Ghostscript через стандартный ввод (т.е. не используя свой код PostScript), Ghostscript записывает его во временный файл на диске, прежде чем он начнет его обрабатывать.

Обратите внимание, что ваш код PostScript сильно зависит от Ghostscript (он использует расширения PostScript, которые существуют только в Ghostscript) и не будет работать с любым другим интерпретатором.

Код ожидает чтения из файла:

() = File dup (r) file runpdfbegin

Так что это не сработает. Вам нужно будет сделать то же самое, что и интерпретатор PDF Ghostscript, и записать stdin в файл, прежде чем запускать интерпретатор. Вряд ли стоит писать код в PostScript, возможно, проще записать его в файл, а затем вызвать Ghostscript для этого файла.

...