2 年ほど前にこの記事で PyMuPDF を用いて無線綴じで印刷する場合のページ割付を行うためのコードを紹介したが、今回は「中綴じ用」のそれである。
中綴じ用のページ割付
以下のコードで saddle_stitching.pdf が生成される。
import sys
import fitz
def main(filename):
src = fitz.open(filename)
page_count = src.page_count
page = src.load_page(0)
width = page.rect.width
height = page.rect.height
dst = fitz.open()
imax = int((page_count + 3) / 4) * 2
if page_count % 4 == 0:
j = page_count - 1
else:
j = imax * 2 - 1
k = 0
for i in range(imax):
if i % 2 == 0:
if j >= page_count:
dst.new_page(-1, width = width, height = height)
else:
dst.insert_pdf(src, from_page = j, to_page = j)
dst.insert_pdf(src, from_page = k, to_page = k)
else:
dst.insert_pdf(src, from_page = k, to_page = k)
if j >= page_count:
dst.new_page(-1, width = width, height = height)
else:
dst.insert_pdf(src, from_page = j, to_page = j)
j -= 1
k += 1
dst.save('saddle_stitching.pdf')
if __name__ == "__main__":
if len(sys.argv) == 2:
main(sys.argv[1])
2in1
PyMuPDF を使って一気に処理することも可能であるが、PDFMate Free PDF Merger で 2in1 印刷用の PDF に変換している。