# addpage.py
#
# PDFファイルにページ番号を追加
#
# 準備:
# pip install reportlab, pdfrw
#
# 使い方:
# python addpage.py PDFファイル名
#
# 出力ファイルとして PDFファイル名_wpage.pdfが生成される
from reportlab.pdfgen.canvas import Canvas
from pdfrw import PdfReader, PageMerge
from pdfrw.toreportlab import makerl
from reportlab.lib.pagesizes import A4, landscape, portrait
from pdfrw.buildxobj import pagexobj
import sys
import os
if len(sys.argv) != 2 or ".pdf" not in sys.argv[1].lower():
print(f"Usage: python {sys.argv[0]} <pdf filename>")
sys.exit()
input_file = sys.argv[1]
output_file = os.path.splitext(sys.argv[1])[0] + "_wpage.pdf" # outputファイル名: inputファイル名_wpage.pdf
orientation = '' # 横にするときは landscapeを指定する。 大きさはA4で固定
expage = {} # ページ番号を非表示にしたいページをカンマで区切って指定 例: {3,5}
reader = PdfReader(input_file)
# pages = [pagexobj(p) for p in reader.pages]
pages = [pagexobj(PageMerge().add(p).render()) for p in reader.pages]
canvas = Canvas(output_file)
for page_num, page in enumerate(pages, start=1):
canvas.doForm(makerl(canvas, page))
footer_text = f"-{page_num}-" # ページ番号の書式
canvas.saveState()
canvas.setFillColorRGB(0, 0, 0) # ページ番号の色の設定
canvas.setFont('Times-Roman', 14) # ページ番号のフォントの種類, サイズの設定
if orientation == 'landscape':
canvas.setPageSize(landscape(A4))
if page_num not in expage:
canvas.drawString(420, 20, footer_text) # ページ番号の表示位置 横の場合
else:
if page_num not in expage:
canvas.drawString(290, 20, footer_text) # ページ番号の表示位置 縦の場合
canvas.restoreState()
canvas.showPage()
canvas.save()