2017-01-16 13 views
1

Я хочу взять размер страницы документа, например, A4, A5, A6 и т.д.Постскриптум. Получить документ размер страницы

Решение, которое я нашел, это разбор припиской текста и извлечения строки A6 из

featurebegin{ 
%%BeginFeature: *PageSize A6 

    <</DeferredMediaSelection true /PageSize [298 420] /ImagingBBox null /MediaClass null>> setpagedevice 
%%EndFeature 
}featurecleanup 

, но это работает медленно ...

Как я могу это сделать? Существуют ли библиотеки для получения полной информации о документе?

Я предпочитаю решения в java, если существует.

+0

Найти копию официальной * Справочника по языку PostScript *. Файл «PostScript», вообще говоря, не имеет (и не требует!) Упоминания о размере страницы, хотя размер физической страницы может быть «принят во время генерации описания этой страницы» (из ссылки), и это обычно размеры в пунктах, а не по имени, как вы думаете. – usr2564301

ответ

1

Ваше решение там работает только для соответствующего файла DSC (Document Structure Convention). Хотя многие файлы соответствуют друг другу, другие нет. Также это работает только в том случае, если файл PostScript содержит комментарий (% вводит комментарий в PostScript).

Вместо этого вы можете переопределить оператор setpagedevice и распечатать требуемый размер носителя, если он есть.

/Oldsetpagedevice /setpagedevice load def 

/setpagedevice { 
    dup /PageSize known { 
    dup /PageSize get 
    dup 0 get 20 string cvs exch 1 get 20 string cvs exch 
    (Requested Media Size is) print print (points by) print print (points\n) print 
    } if 
    Oldsetpagedevice 
} bind def 

Что вы подразумеваете под «полной информацией о документе»? Кстати, вам нужно знать, что (в отличие от PDF) PostScript-файлы - это программы, а не документы. Так что способ узнать, что действительно происходит, это интерпретировать программу.

Вы можете использовать Ghostscript, но у него нет интерфейса Java, и вам нужно будет быть более конкретным относительно информации, которую вы хотите.

+0

Какую информацию я могу взять ** Ghostscript **? – Sergey

+0

FYI, 'DeferredMediaSelection' описан в PLRM, который у меня есть (3-е изд.), Но, конечно, нет гарантии, что документ содержит это. (@Sergey: это полезно для вас, потому что его значение '/ PageSize' - это то, что я упомянул выше: размер в точках.) – usr2564301

+0

@RadLexus В точках ... Я понял :( – Sergey

0

Если вы запустили постскриптум через ghostscript с помощью -sDEVICE=bbox, он сообщал бы об углах прямоугольника, который обрабатывает выводимый вывод, который может быть (рядом с) тем, что вы хотите.

Информация обычно печатается на stderr в формате DSC %%BoundingBox: x0 y0 x1 y1.