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

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

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

table

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

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

EDIT: вот код, который я написал. Извините, что не опубликовал его.

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()

3 ответов


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

pdfnup --nup 8x4 --outfile output.pdf input.pdf

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

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


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

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

латексный скрипт

сохраните следующий скрипт 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=... тоже.