Как мне объединить несколько файлов PDF разных размеров? - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно объединить несколько файлов PDF в одну страницу PDF .Мне нужно сшить несколько PDF-файлов, которые я генерирую.Если я прошиваю горизонтально, все PDF-файлы имеют одинаковую высоту, но не одинаковую ширину.Когда я прошиваю вертикально, все PDF-файлы имеют одинаковую ширину, но не одинаковую высоту.

Я нашел много ответов, говорящих об этом с помощью pdfjam / pdfnup.Я пытался это сделать, но кажется, что это происходит только тогда, когда каждый элемент, к которому нужно присоединиться, имеет одинаковое измерение, иначе я просто не могу заставить его работать правильно.

Я бы действительно предпочел сделать это в ghostscript, так как остальная часть моих манипуляций с PDF уже сделана в ghostscript.Хотя я не нашел решения для этого.

Например, элементы, которые я собираю вместе, выглядят примерно так:

┌---------------------------------------┐
┬-┬----------------┬-┬----------------┬-┬
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
| |                | |                | |
┴-┴----------------┴-┴----------------┴-┴
└---------------------------------------┘

Сначала я пытаюсь присоединиться к 5коробки, которые образуют центральную секцию по горизонтали.Затем мне нужно соединить это с полями выше и ниже.

1 Ответ

1 голос
/ 04 апреля 2019

Мой ответ здесь содержит программу 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.

...