まず、PyPDF2モジュールの中にあるトリミングするための関数cropbox.lower_leftとcropbox.upper_rightは理解しにくいのですが、分かりやすく言うと、A0サイズ(縦1189mm 横841mm)を例にすると、
.cropbox.lower_left=(0で左切れない,1189で上切れない)
.cropbox.upper_right=(841で右切れない,0で下切れない)
というように書くことができます。
下が、A0サイズ1ページのPDFをA4サイズ16ページのPDFに分割するためのプログラムです。
import PyPDF2
# A0サイズPDFのファイルパス。予め縦にしておく。
pdf_path = '学会ポスター.pdf'
# PDFファイルを読み込む
pdf_file = open(pdf_path, 'rb')
pdf_reader = PyPDF2.PdfReader(pdf_file)
#ミリをポイントに変換するための定数。
#2.8ポイント≒1ミリメートル
pt_per_mm = 72 / 25.4 #≒2.8
# 各A4ページを作成
for a in range(4):
for b in range(4):
#aは列。bは行を指し、最初に縦を上から取り、その後に右へ移動します
p1 = pdf_reader.pages[0]
p1.cropbox.lower_left=((0+210*(a))*pt_per_mm,(1189-297*(b))*pt_per_mm)
p1.cropbox.upper_right=((841-(3-a)*210)*pt_per_mm,(0+891-297*(b))*pt_per_mm)#y
#A4ページをPDFファイルに保存します
output_path = f"output/{a}列{b}行目.pdf"
pdf_writer = PyPDF2.PdfWriter()
pdf_writer.add_page(p1)
with open(output_path, 'wb') as output_file:
pdf_writer.write(output_file)
A0サイズのPDFは、ポスター用であればパワーポイントで用意するのが良いと思います。
参考
A4サイズのページサイズ
a4_width = 210
a4_height = 297
A0サイズのページサイズ
a0_width = 841
a0_height = 1189