Похоже, у вашего принтера есть непечатаемая область. Это не редкость, при обращении с бумагой необходимо удерживать бумагу во время печати, и это может привести к тому, что некоторые области носителя не будут пригодны для печати.
Если ваш контент достигает края носителя, возможно, простой принтер не может печатать там, в результате чего контент обрезается.
Вполне возможно, что ps2write отбросит медиаконтент до меньшего размера, но вы не можете (автоматически) уменьшить его масштаб, а также сместить местоположение контента, потому что контент соответствует размеру медиа.
Однако механизм FitPage не просматривает содержимое, а только запрашивает размер носителя. Таким образом, если вход запрашивает A3, а выбранный носитель имеет формат A4 (и фиксированный), то применяется коэффициент масштабирования для масштабирования содержимого до требуемого размера носителя (и запрос носителя для A3 игнорируется).
Итак, что вы можете сделать, так это оставить код, который у вас есть, как есть, но добавить процедуру BeginPage или Install, которая использует оператор масштабирования для дальнейшего уменьшения размера меток на странице и оператор перевода для небольшого смещения начала координат, чтобы что окончательный контент центрирован.
Что-то вроде (только пример, непроверенный):
<<
/BeginPage {
0.95 0.95 scale
16 20 translate
}
>> setpagedevice
Кстати, вы понимаете, что Ghostscript находится под лицензией AGPL?
Кроме того, я очень настоятельно рекомендую вам не использовать ключи -g и -r, а вместо этого просто использовать -dDEVICEWIDTHPOINTS и -dDEVICEHEIGHTPOINTS для изменения размера носителя.
Переключатель -g работает с пикселями, но устройства вывода высокого уровня (например, pdfwrite и ps2write) не испускают пиксели, они записывают векторные объекты высокого уровня. Однако из-за различий в графических моделях PostScript и PDF некоторые элементы необходимо преобразовывать в изображения и заключать таким образом в вывод PostScript. Установив разрешение на 300, вы фиксируете разрешение, при котором отображаются эти элементы (например, страницы с прозрачностью). Я бы посоветовал вам не делать этого, если только вы не работаете в очень строго контролируемом рабочем процессе и не знаете разрешение конечного вывода.
Используя переключатели DEVICEHEIGHTPOINTS и DEVICEWIDTHPOINTS, вы можете управлять размером носителя без привязки к разрешению. Обратите внимание, что в PostScript (и PDF) 1 пункт = 1/72 дюйма.
16.01.2017
-c
и-f
, но это больше не приводит к выводу, может быть, я не могу использовать его с PDFFitPage одновременно? Я не изменяю исходный код, просто использую его как библиотеку, чтобы использовать его в управляемом контексте. Значит, мне не нужно распространять свой код? Тем не менее, я каждый раз знаю разрешение конечного вывода, но я думаю, что изменю свой код на -dDEVICE* с -gx. 16.01.2017