1ページを4分割で両面印刷したときに、つぎのページが裏面になるようにする


何がしたいか

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分割すれば半額で済むではないかと気付いた。