これは、PyPdfライブラリを使用して、仕事をきちんと行う小さなPythonスクリプトです。というスクリプト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内のすべてのページを分割しないのはなぜ?
便利な場合に備えて、2つのツールといくつかの手動介入の組み合わせを使用する以前の回答を次に示します。
pdfpagesが1つのストリームの同じページに2つの異なる変換を適用することができない限り、両方のツールが必要です。の呼び出しで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をお持ちでない場合は、pdfpagesパッケージでPDFLaTeXをインストールするだけで十分です(Ubuntuではtexlive-latex-recommended が必要で、おそらく(Ubuntuではtexlive-fonts-recommended )、次のドライバーを使用しますファイル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