Hier ist ein kleines Python-Skript, das die PyPdf-Bibliothek verwendet und die Aufgabe ordentlich erledigt. Speichern Sie es in einem Skript mit dem Namen un2up
(oder was auch immer Sie möchten), machen Sie es ausführbar ( chmod +x un2up
) und führen Sie es als Filter aus ( 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)
Ignorieren Sie alle Verwerfungswarnungen. Nur die PyPdf-Betreuer müssen sich mit diesen befassen.
Wenn die Eingabe ungewöhnlich ausgerichtet ist, müssen Sie möglicherweise andere Koordinaten verwenden, um die Seiten abzuschneiden. Siehe Warum teilt mein Code nicht jede Seite in einem gescannten PDF korrekt auf?
Nur für den Fall, dass es nützlich ist, hier ist meine frühere Antwort, die eine Kombination aus zwei Werkzeugen und einigen manuellen Eingriffen verwendet:
- Pdfjam (mindestens Version 2.0), basierend auf dem LaTeX-Paket pdfpages , zum Zuschneiden der Seiten;
- Pdftk , um die linke und rechte Hälfte wieder zusammenzusetzen.
Beide Tools werden benötigt, da pdfpages meines Erachtens nicht in der Lage ist, zwei verschiedene Transformationen auf dieselbe Seite in einem Stream anzuwenden. pdftk
Ersetzen Sie beim Aufruf von 42 durch die Anzahl der Seiten im Eingabedokument ( 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
Falls Sie nicht über pdfjam 2.0 verfügen, reicht eine PDFLaTeX-Installation mit dem pdfpages-Paket aus (unter Ubuntu: Sie benötigen texlive-latex empfohlen und möglicherweise (unter Ubuntu: texlive-fonts empfohlen ), und verwenden Sie den folgenden Treiber Datei 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}
Führen Sie dann die folgenden Befehle aus und ersetzen Sie 42 durch die Anzahl der Seiten in der Eingabedatei (die aufgerufen werden muss 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