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

Я пытался приготовить Код 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, я бы рекомендовал использовать
- на
pdfpagesпакет, - маленький 10-строчный латексный скрипт / документ,
- и .
латексный скрипт
сохраните следующий скрипт 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=... тоже.