นี่เป็นสคริปต์ 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 ที่สแกน
ในกรณีที่มันมีประโยชน์ต่อไปนี้เป็นคำตอบก่อนหน้าของฉันซึ่งใช้การรวมกันของเครื่องมือสองอย่างบวกกับการแทรกแซงด้วยตนเอง:
จำเป็นต้องใช้เครื่องมือทั้งสองเพราะเท่าที่ฉันบอก 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-latex-recommended และบางที (บน 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