例えば 10ページの A4横 の PDF を、5ページの A3 の PDF に変換します。
プログラム
pdf_a4_a3_landscape.py
#! /usr/bin/python
#
# pdf_a4_a3_landscape.py
#
# Feb/01/2023
#
import sys
import PyPDF2
from PyPDF2 import Transformation
#
# ------------------------------------------------------------------
def pdf_merge_proc(pdf_reader1):
deltx = 960
delty = 1080
pages= len(pdf_reader1.pages)
nn_out = int((pages + 1) / 2)
sys.stderr.write("pages = %d\n" % pages)
sys.stderr.write("nn_out = %d\n" % nn_out)
#
pdf_writer = PyPDF2.PdfWriter()
#
for icount in range(nn_out):
it = icount * 2
page_obj_a = pdf_reader1.pages[it]
page_obj_out = PyPDF2.PageObject.create_blank_page(width=deltx, height=delty)
op = Transformation().translate(tx=0, ty=540)
page_obj_out.merge_page(page_obj_a)
page_obj_out.add_transformation(op)
jt = it + 1
if jt < pages:
page_obj_b = pdf_reader1.pages[jt]
page_obj_out.merge_page(page_obj_b)
#
pdf_writer.add_page(page_obj_out)
#
return pdf_writer
# ------------------------------------------------------------------
sys.stderr.write ("*** 開始 ***\n")
pdf_in = sys.argv[1]
pdf_out = sys.argv[2]
#
pdf_file_in = open(pdf_in, 'rb')
pdf_reader1 = PyPDF2.PdfReader(pdf_file_in)
#
pdf_writer = pdf_merge_proc(pdf_reader1)
#
pdf_output_file = open(pdf_out, 'wb')
pdf_writer.write(pdf_output_file)
pdf_output_file.close()
pdf_file_in.close()
#
sys.stderr.write ("*** 終了 ***\n")
# ------------------------------------------------------------------
実行方法
./pdf_a4_a3_landscape.py file_a.pdf file_a3.pdf
次のバージョンで確認しました。
$ python --version
Python 3.10.7
>>> import PyPDF2
>>> PyPDF2.__version__
'3.0.1'
A4縦の変換はこちら
Python3: A4 の PDF を A3 の PDF に変換