Как сшить несколько страниц PDF в один большой PDF-файл, похожий на холст?

У меня есть 32-страничный PDF-файл моего генеалогического древа. Вместо того, чтобы иметь генеалогическое древо на одной действительно большой странице PDF (что мне и нужно), оно отформатировано таким образом, что группа из 8 отдельных страниц размером с букву США должна быть сшита по ширине; 4 ряда завершают дерево. Поля каждой страницы составляют 22 пикселя.

Если вы визуализируете его в виде таблицы (где числа представляют собой номера страниц PDF):

таблица

Я пытался накрутить код на Python, чтобы сделать это, но не очень далеко продвинулся. Как я могу сшить PDF-файл, чтобы он был одной большой страницей, а не отдельными страницами меньшего размера?

Спасибо за помощь.

РЕДАКТИРОВАТЬ: Вот код, который я написал. Извините, что изначально не опубликовал.

from pyPdf import PdfFileWriter, PdfFileReader

STITCHWIDTH = 8;
currentpage = 1;

output = PdfFileWriter()
input1 = PdfFileReader(file("familytree.pdf", "rb"))

for(i=0; i<=4; i++)
    output.addPage(input1.getPage(currentpage))
    currentpage++;
    #do something to add other pages to width

print "finished with stitching"

outputStream = file("familytree-stitched.pdf", "wb")
output.write(outputStream)
outputStream.close()

person hao_maike    schedule 05.07.2011    source источник
comment
PDF -> изображение (т.е. SVG) -> PDF был бы способом, который я бы исследовал.   -  person mwhite    schedule 05.07.2011
comment
Хм... хорошая идея. Я думаю, что я буду использовать Illustrator, чтобы попробовать это.   -  person hao_maike    schedule 05.07.2011


Ответы (3)


В качестве альтернативы Бену Джексону предложение сначала преобразовать в PostScript и выполнить преобразование "N-up" в файлах PostScript, также имеется утилита под названием pdfnup, доступная как часть PDFjam, который может работать непосредственно с файлами PDF. Пример:

pdfnup --nup 8x4 --outfile output.pdf input.pdf
person Jukka Matilainen    schedule 06.07.2011

Используйте pdf2ps (часть Ghostscript) для преобразования PDF в PostScript. Обычно это преобразование без потерь. Затем используйте методы http://www.tailrecursive.org/postscript/nup.html или любую другую преамбулу PostScript "N-up" для реорганизации ваших страниц.

Образец ссылки сочетает в себе сценарий Perl для изменения PostScript для вставки некоторых фрагментов, но вы можете найти более сложные примеры, которые переопределяют showpage, так что вы можете просто вставить преамбулу с переопределенным showpage в начале вашего документа.

person Ben Jackson    schedule 05.07.2011
comment
@Ben Jackson: Нет, pdf2ps обычно не без потерь! (Старые версии Ghostscript конвертируют PDF в PostScript Level 1. Вы потеряете точную информацию о цвете, потеряете прозрачность, в большинстве случаев потеряете исходные шрифты и еще кое-что... - person Kurt Pfeifle; 29.01.2012

Если у вас есть установка LaTeX, я бы рекомендовал использовать

  1. пакет pdfpages,
  2. небольшой 10-строчный скрипт/документ LaTeX,
  3. и команда pdflatex.

LaTeX-скрипт

Сохраните следующий сценарий LaTeX как 8x4-letter.tex. Адаптируйте /path/to/input.pdf соответственно:

\documentclass{article}
\usepackage{color}
  \definecolor{mygray}{rgb}{.9,.9,.9} % background color for complete poster
  \pagecolor{mygray}                  % line must *precede* \usepackage{pdfpages}
\usepackage[final]{pdfpages}          % comment out for testing
\usepackage[paperwidth=4896ppt, paperheight=3168]{geometry}
                                      % dimensions of 8 letter widths, 4 heights

\pagestyle{plain}                     % do not use page numbering
\begin{document}                      % orig. slide sizes are 612x792 pts (Letter)
  \includepdf[nup=8x4,                % 8x4 grid was asked for
              delta=0 0,              % horiz.+vert. distance between slides
              scale=0.999,            % scale down for additional margins
              pages={1-32},           % input document has 32 pages
              noautoscale=false,      % set to true if you have larger pages
              frame=false]            % set to true if you want frames
              {/path/to/input.pdf}    % filename+path cannot have spaces!
\end{document}

Команда pdflatex

Теперь беги

pdflatex 8x4-letter.tex

Это должно создать файл PDF, 8x4-lettter.pdf.

Если вам нужны рамки вокруг каждой страницы, используйте frame=true. Чтобы добавить дополнительный интервал между страницами, используйте delta=10 10 или delta=17 11 или что вам больше подходит. Вы также можете изменить значение для scale=....

person Kurt Pfeifle    schedule 31.03.2015