Как сшить несколько страниц PDF в один большой холстоподобный PDF? - PullRequest
8 голосов
/ 05 июля 2011

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

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

table

пытался собрать некоторый код 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()

Ответы [ 3 ]

5 голосов
/ 06 июля 2011

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

pdfnup --nup 8x4 --outfile output.pdf input.pdf
1 голос
/ 05 июля 2011

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

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

0 голосов
/ 31 марта 2015

Если у вас установлена ​​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=....

...