既存のPDFに、Pythonでページを追加する方法、まずChatGPTに聞いてみた
↓ これは、このままではエラーになるので、下記の「修正」を参考にして下さい。
import PyPDF2 from PyPDF2 import PdfFileWriter, PdfFileReader from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter import io def add_page_numbers(input_pdf, output_pdf): # 読み込むPDFファイルを開く pdf_reader = PdfFileReader(open(input_pdf, "rb")) pdf_writer = PdfFileWriter() # 各ページに番号を追加 for page_num in range(pdf_reader.getNumPages()): # PDFページを読み込む page = pdf_reader.getPage(page_num) # PDFのサイズを取得 packet = io.BytesIO() can = canvas.Canvas(packet, pagesize=letter) width, height = letter # ページ番号を追加(右下に配置) can.drawString(width - 50, 10, str(page_num + 1)) can.save() # 新しいページを作成 packet.seek(0) new_pdf = PdfFileReader(packet) page.mergePage(new_pdf.getPage(0)) # ページをPDFライターに追加 pdf_writer.addPage(page) # 新しいPDFを保存 with open(output_pdf, "wb") as output_pdf_stream: pdf_writer.write(output_pdf_stream) # 使用例 input_pdf = "input.pdf" output_pdf = "output_with_page_numbers.pdf" add_page_numbers(input_pdf, output_pdf)
修正
上記のソースは、メソッドが古いのでエラーになる。。。以下のように修正
↓ これは、動作する。
import PyPDF2 from PyPDF2 import PdfWriter, PdfReader from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter import io def add_page_numbers(input_pdf, output_pdf): # 読み込むPDFファイルを開く pdf_reader = PdfReader(open(input_pdf, "rb")) pdf_writer = PdfWriter() # 各ページに番号を追加 for page_num in range(len(pdf_reader.pages)):##(pdf_reader.getNumPages()): # PDFページを読み込む page = pdf_reader.pages[page_num]##pdf_reader.getPage(page_num) # PDFのサイズを取得 packet = io.BytesIO() can = canvas.Canvas(packet, pagesize=letter) width, height = letter # ページ番号を追加(右下に配置) can.drawString(width - 50, 10, str(page_num + 1)) can.save() # 新しいページを作成 packet.seek(0) new_pdf = PdfReader(packet) page.merge_page(new_pdf.pages[0])###getPage(0)) # ページをPDFライターに追加 pdf_writer.add_page(page) # 新しいPDFを保存 with open(output_pdf, "wb") as output_pdf_stream: pdf_writer.write(output_pdf_stream) # 使用例 input_pdf = "input.pdf" output_pdf = "output_with_page_numbers.pdf" add_page_numbers(input_pdf, output_pdf)