Ось невеликий сценарій Python, що використовує бібліотеку PyPdf, яка виконує роботу акуратно. Збережіть його у скрипті під назвою un2up
(або як завгодно), зробіть його виконуваним ( chmod +x un2up
) та запустіть його як фільтр ( un2up <2up.pdf >1up.pdf
).
#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
q = copy.copy(p)
(w, h) = p.mediaBox.upperRight
p.mediaBox.upperRight = (w/2, h)
q.mediaBox.upperLeft = (w/2, h)
output.addPage(p)
output.addPage(q)
output.write(sys.stdout)
Ігноруйте будь-які попередження про депресію; з ними потребують лише підтримання PyPdf.
Якщо вхід орієнтований незвично, можливо, вам доведеться використовувати різні координати при обрізанні сторінок. Див. Чому мій код неправильно розділив кожну сторінку у відсканованому PDF?
На всякий випадок, коли це корисно, ось моя попередня відповідь, яка використовує комбінацію двох інструментів плюс певне ручне втручання:
- Pdfjam (принаймні версія 2.0) на основі пакету pdfсторінок LaTeX для обрізання сторінок;
- Pdftk , щоб повернути ліву і праву половинки назад разом.
Обидва інструменти потрібні, оскільки, наскільки я можу сказати, pdfpages не в змозі застосувати дві різні перетворення на одній сторінці в одному потоці. У дзвінку до pdftk
, замініть 42 на кількість сторінок у вхідному документі ( 2up.pdf
).
pdfjam -o odd.pdf --trim '0cm 0cm 14.85cm 0cm' --scale 1.141 2up.pdf
pdfjam -o even.pdf --trim '14.85cm 0cm 0cm 0cm' --scale 1.141 2up.pdf
pdftk O=odd.pdf E=even.pdf cat $(i=1; while [ $i -le 42 ]; do echo O$i E$i; i=$(($i+1)); done) output all.pdf
Якщо у вас немає pdfjam 2.0, достатньо встановити PDFLaTeX з пакетом pdfpages (в Ubuntu: вам потрібен texlive-латекс і, можливо, (на Ubuntu: texlive-fonts-рекомендовано ), і використовувати наступний драйвер файл driver.tex
:
\batchmode
\documentclass{minimal}
\usepackage{pdfpages}
\begin{document}
\includepdfmerge[trim=0cm 0cm 14.85cm 0cm,scale=1.141]{2up.pdf,-}
\includepdfmerge[trim=14.85cm 0cm 0cm 0cm,scale=1.141]{2up.pdf,-}
\end{document}
Потім запустіть такі команди, замінивши 42 на кількість сторінок у вхідному файлі (який потрібно викликати 2up.pdf
):
pdflatex driver
pdftk driver.pdf cat $(i=1; pages=42; while [ $i -le $pages ]; do echo $i $(($pages+$i)); i=$(($i+1)); done) output 1up.pdf