例えば 10ページの A4 の PDF を、5ページの A3 の PDF に変換します。
pdf_a4_a3.py
#! /usr/bin/python3
#
# pdf_a4_a3.py
#
# Feb/1/2023
#
import sys
import PyPDF2
from PyPDF2 import Transformation
#
# ------------------------------------------------------------------
def pdf_merge_proc(pdf_reader1):
# pages= pdf_reader1.getNumPages()
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.getPage(it)
page_obj_a = pdf_reader1.pages[it]
page_obj_out = PyPDF2.PageObject.create_blank_page(width=1190, height=842)
page_obj_out.merge_page(page_obj_a)
jt = it + 1
if jt < pages:
page_obj_b = pdf_reader1.pages[jt]
page_obj_b.add_transformation(Transformation().translate(595, 0));
page_obj_out.merge_page(page_obj_b,expand=True);
#
pdf_writer.add_page(page_obj_out)
#
return pdf_writer
# ------------------------------------------------------------------
sys.stderr.write ("*** 開始 ***\n")
sys.stderr.write("PyPDF2.__version__ = %s\n" % PyPDF2.__version__)
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.py file_a4_in.pdf file_a3_out.pdf
次のバージョンで確認しました。
$ python --version
Python 3.10.7
>>> import PyPDF2
>>> PyPDF2.__version__
'3.0.1'