Ghostscript для объединения нескольких файлов eps в один большой файл eps
Моя задача - объединить несколько маленьких файлов EPS в один большой EPS с условием, чтобы эти маленькие EPS не перекрывали друг друга.
Я надеялся, что это можно сделать программно, а не настраивать их вручную с помощью инструментов графического интерфейса.
Я пробовал команды ghostscript, но у меня получился маленький eps поверх друг друга.
Я также смотрю на psutils (psnup/pstops), но я не совсем уверен, может ли это помочь мне.
Я не возражаю против использования более тяжелой программы /lib, такой как Ghost4j (хотя, возможно, мне придется добавить туда больше функций, если она не поддерживает мою потребность). Я просто хочу убедиться, что это не может быть сделано легко или с помощью существующих инструментов.
Спасибо!
1 ответ
Знаете ли вы, как файлы EPS должны использоваться? Смысл файла EPS в том, что он предназначен для использования в качестве "черного ящика" приложением.
Когда приложение создает программу PostScript, оно может включать EPS в окончательный вывод, не зная ничего о нем, кроме его размера. Поэтому, когда генерируется PostScript, приложение знает размер EPS и изменяет CTM, чтобы масштабировать содержимое по мере необходимости и размещать его на странице.
Если вы хотите использовать несколько файлов EPS, то вы должны сделать то же самое, вы должны изменить CTM между каждым файлом EPS, чтобы он размещался в нужном размере и положении на требуемой странице. Если вы этого не сделаете, то все они окажутся в текущей позиции и масштабируются на странице. Как вы говорите, они оказываются друг на друге.
Теперь весь смысл файла EPS заключается в том, что он может быть размещен программно, но для этого нужно написать программу:-)
Сначала вам нужно разобрать Bounding Box из файла EPS. Если EPS правильно соответствует, это будет %%BoundingBox и, возможно, комментарии %%HiResBondingBox.
Вооружившись этой информацией, вам необходимо решить, какой размер носителя вы используете и / или как масштабировать файлы EPS в соответствии с желаемым носителем.
Затем вы запускаете новую программу PostScirpt, которая начинается с запроса определенного размера носителя, а затем использует scale
а также translate
операторы, чтобы перейти на правильную позицию на носителе, а затем выполняет первый файл EPS (либо путем включения содержимого, либо с помощью run
оператор).
Повторите процесс для каждого файла EPS.
Наконец, напишите новый контент, используя showpage
оператор
Предполагая, что вы использовали устройство eps2write в Ghostscript, полученный файл будет новым EPS-файлом, который будет содержать содержимое отдельных EPS-файлов, масштабироваться и размещаться по вашему желанию.
Например, (все значения являются только мнимыми примерами данных):
%!
<< /PageSize [612 792] >> setpagedevice
gsave
306 396 moveto
0.5 0.5 scale
(example1.eps) run
grestore
gsave
306 0 moveto
1.5 1.5 scale
(example2.eps) run
grestore
gsave
0 396 moveto
(example3.eps) run
grestore
gsave
0 0 moveto
0.66 0.66 scale
(example4.eps) run
grestore
showpage