何がしたいか
pdfファイルで、A4を4面分割し、両面印刷するときを考える。
デフォルトだと次のような順序でページが割り当てられると思う。
そのまま用紙を読むぶんにはこれでOKなのだが、今回わたしは用紙をバラバラに切りわけて、冊子にしたいとおもっている。そのため、両面印刷したときに、ちょうど次のページが真裏に来るようにページの順序を入れ替えたいのだ。
こうすれば、印刷したあとで紙を切ると両面のペアになってくれる。
プログラム
PyPDF2を利用した。もともとpdfの結合として使っていたが、ページの並び替えにも役立つようだ。
import PyPDF2
def sorting(i):
lst = [0, 2, 4, 6, 3, 1, 7, 5]
q = i % 8
return lst[q]
targetPdf = PyPDF2.PdfFileReader('./target.pdf')
sortedPdf = PyPDF2.PdfFileWriter()
merger = PyPDF2.PdfFileMerger()
sort = []
for i in range(int(targetPdf.getNumPages() / 8) * 8):
sort.append(sorting(i) + int(i / 8) * 8)
for i in range(int(targetPdf.getNumPages() / 8) * 8):
sortedPdf.addPage(targetPdf.getPage(sort[i]))
with open('./sorted.pdf', 'wb') as f:
sortedPdf.write(f)
ページ数が8で割り切れない場合の処理がかけていない。
一旦、あまりの箇所は対象から除外することで回避している。
なんでこんなことがしたかったか(背景)
実はコンビニだとA4とA3の印刷代金が変わらない(らしい)。いままでA4の2分割(小冊子)を利用していたが、A3を4分割すれば半額で済むではないかと気付いた。