Как сшить несколько страниц 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=...
тоже.