Berikut skrip Python kecil menggunakan pustaka PyPdf yang melakukan pekerjaan dengan rapi. Simpan dalam skrip bernama un2up
(atau apa pun yang Anda suka), jadikan itu executable ( chmod +x un2up
), dan jalankan sebagai filter ( 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)
Abaikan peringatan penghentian apa pun; hanya pengelola PyPdf yang perlu peduli dengan hal itu.
Jika input berorientasi dengan cara yang tidak biasa, Anda mungkin perlu menggunakan koordinat yang berbeda saat memotong halaman. Lihat Mengapa kode saya tidak membagi setiap halaman dengan benar dalam pdf yang dipindai?
Kalau-kalau berguna, inilah jawaban saya sebelumnya yang menggunakan kombinasi dua alat ditambah beberapa intervensi manual:
- Pdfjam (setidaknya versi 2.0), berdasarkan paket pdfpages LaTeX, untuk memotong halaman;
- Pdftk , untuk menyatukan kembali bagian kiri dan kanan.
Kedua alat diperlukan karena sejauh yang saya tahu pdfpages tidak dapat menerapkan dua transformasi berbeda ke halaman yang sama dalam satu aliran. Dalam panggilan ke pdftk
, ganti 42 dengan jumlah halaman dalam dokumen input ( 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
Jika Anda tidak memiliki pdfjam 2.0, cukup memiliki instalasi PDFLaTeX dengan paket pdfpages (di Ubuntu: Anda memerlukan texlive-latex-recommended dan mungkin (di Ubuntu: texlive-fonts-recommended ), dan gunakan driver berikut ini file 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}
Kemudian jalankan perintah berikut, ganti 42 dengan jumlah halaman dalam file input (yang harus dipanggil 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