Ну, ваша первая проблема заключается в том, что программы PostScript обычно записываются, чтобы рассчитывать на определенный размер носителя и обычно не имеют жесткой привязки к нему. Белое пространство важно для читаемости.
Как правило, программа PostScript, которую вы создаете, запрашивает определенный размер носителя, и интерпретатор будет прилагать все усилия, чтобы соответствовать этому. Если он не может сравниться с ним, он будет использовать стратегию, чтобы попытаться приблизиться как можно ближе, и масштабировать весь контент в соответствии с этими медиа.
Вы не можете ожидать, что принтер выполнит какие-либо из этих действий, если он не знает требуемый размер до его завершения, и вы не можете быть уверены в ограничивающей рамке, пока не будете отображены все маркирующие материалы. Это правда, что в некоторых файлах с файлами в целом есть комментарий %% BoundingBox, но .. это комментарий, он не имеет никакого эффекта в PostScript, его там в интересах приложений, которые не хотят интерпретировать PostScript.
Так вот, простой коммутатор, которого вы хотите, не существует, он нарушит нормальное функционирование интерпретатора для рендеринга.
Итак, первое, что вам нужно сделать, это определить ограничительную рамку содержимого. Вы можете сделать это, как говорит Стефан, используя устройство bbox. И на этом примечании, насколько я знаю, устройство bbox производит точный вывод. Если это не так, мы будем благодарны за сообщение об ошибке, подтверждающее его, чтобы мы могли это исправить. Если люди не сообщают об ошибках, как мы должны знать о них? Его неутешительно видеть, что кто-то распространяет FUD вместо того, чтобы помогать с сообщением об ошибке .......
ps2epsi не Ghostscript, его дрянной дешевый и веселый сценарий, я бы не использовал его. Однако ..... Если исходный PostScript оставляет материал в стеке, он будет поврежден (или недействителен) EPS-файл, и исходный PostScript должен быть исправлен, прежде чем пытаться использовать его, поскольку он нарушит любую программу PostScript, которая пытается (например, если вы включили EPS в документ, а затем распечатали его).
Итак, если вы используете Ghostscript, и хотите взять программу PostScript и получить EPS из нее, используйте устройство eps2write. У него не будет предварительного просмотра, честно говоря, кого это волнует.
Теперь, если я правильно помню запись bbox (и eps2write) всех операций маркировки, вы не можете просто записывать все небелые операции маркировки; что, если белый переписывает существующую метку на странице? Что делать, если носитель не белый? Обратите внимание, что если вы передаете PNG с Ghostscript, нетронутая часть вывода будет прозрачной, тогда как белые метки не будут.
Таким образом, bbox является степенью всех операций маркировки, независимо от цвета. Единственный способ продолжения - сделать контент и подсчитать не-белые пиксели. Но это работает только с определенным разрешением, изменяет разрешение и может также меняться точная ограничивающая рамка.
Как только у вас есть ограничивающая коробка, вы можете указать Ghostscript, чтобы использовать носитель такого размера. Обратите внимание, что почти наверняка также должны перевести источник, так как маловероятно, что контент начнет плотно в нижнем левом углу. Для установки размера носителя вам понадобятся -dDEVICEWIDTHPOINTS и -dDEVICEHEIGHTPOINTS, и вам нужно будет использовать -c и -f для отправки PostScript, чтобы соответствующим образом изменить исходный код. В простых случаях достаточно выполнить «-x-y translate», но если программа выполняет initgraphics, вам придется установить процедуру BeginPage для изменения исходного CTM.
Если вы установили размер носителя с -dDEVICEWIDTHPOINTS и т. Д., То все страницы будут иметь одинаковый размер. Если вы этого не хотите, вам нужно написать процедуру BeginPage для изменения размера каждой страницы в отдельности (вам также нужно будет зацепить setpagedevice и удалить записи/PageSize из словаря.
Я понятия не имею, почему Windows поместив диалоговое окно за активное окно, похоже, он начал делать это с Windows 7 (или, возможно, с Vista). Я не вижу никакого способа изменить это, потому что я не уверен, что вызывает диалог .... .
Лично я предлагаю вам попробовать двухэтапный подход к запуску оригинала через устройство eps2write Ghostscript, а затем взять EPS и создать файл PDF с помощью устройства pdfwrite и переключателя -dEPSCrop. Двойное преобразование плохое, но другие решения хуже. Обратите внимание, что файлы EPS не может быть быть многостраничным, поэтому вам нужно будет создать «n» EPS-файлы из n-страничной программы PostScript, а затем предоставить командную строку, в которой перечислены все файлы EPS в качестве входных данных для устройства pdfwrite.
Возьмите пример файла и попробуйте это из командной строки, прежде чем пытаться выполнить его скриптинг.
FYI вы можете получить bbox, запустив 'gswin64c.exe -sDEVICE = bbox -dBATCH -dNOPAUSE pdfname' –
Спасибо, @Stefan Hegny. То, что я также нашел здесь: 'gswin64c.exe -q -dBATCH -dNOPAUSE -sDEVICE = bbox -dLastPage = 1 GsCrop.ps | findstr %% BoundingBox' Мой вопрос: как я могу использовать эти числа дальше? – theozh