Мой ответ здесь содержит программу PostScript, которая будет работать только с Ghostscript и только с версиями до 9.26, но с наложением.
Эта программа загружает вещи, которые вам не нужны, она предполагает, что вы пытаетесь разместить 2 входных страницы на носителе определенного размера, и масштабирует и поворачивает страницы, чтобы обеспечить наилучшее соответствие. Вам не захочется этого делать.
По сути, вы хотите переместить текущую точку в начало каждой страницы, нарисовать содержимое страницы, затем переместить текущую точку в начало следующей страницы, нарисовать содержимое этой страницы и т. Д.
В широком смысле это:
%%
%% First we open the PDF file
%%
File dup (r) file runpdfbegin pop
process_trailer_attrs
открывает файл PDF, затем это:
pdfgetpage %% get the page from the PDF file, stack: -save- -save- loop -dict-
dup /Page exch store %% save a copy of the page dict inside itself
pdfshowpage_init %% initialise the page
draw_page_content %% se above, draws the graphical objects, stack -save- -save- loop
рисует страницу (pdfgetpage принимает число, начиная с 0, чтобы страница рисовала из файла PDF).
Это:
PageXTx PageYTx translate %% Move to draw page 2
Перемещает текущую точку.
Так что это все операции, которые вам нужны, их объединение зависит от вас. Вам нужно будет определить размер итоговой конечной «страницы» и запустить Ghostscript с этим набором в качестве размера носителя (используйте -dDEVICEWIDTHPOINTS и -dDEVICEHEIGHTPOINTS), а затем вам нужно будет определить положение на этой странице каждой из «подстраницы» (имейте в виду, что источник находится внизу слева для PDF) перемещаются в это место, рисуют страницу, повторяют для каждой страницы.
Наконец вам нужно выполнить:
showpage
так, чтобы последняя нарисованная страница была сброшена, а затем в идеале:
//runpdfend exec %% End the PDF file
Так что это возможно, но, как вы видите, нетривиально в текущей реализации. Еще раз позвольте мне отметить, что это будет НЕ работать с версиями Ghostscript, которые больше, чем 9.26.