end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

reportlab & pypdf for python によるpdfページへの四角形描画

以下のような感じみたい

from pypdf import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
import io
import sys

def main():
    org_pdf_path = sys.argv[1]
    new_pdf_path = "new.pdf"
    
    pdf_reader = PdfReader( open(org_pdf_path, "rb") )
    pdf_writer = PdfWriter()

    for page in pdf_reader.pages:
        page = add_rectangle_to_page(page)
        pdf_writer.add_page(page)

    # Write the modified PDF to a new file
    with open(new_pdf_path, "wb") as output_file:
        pdf_writer.write(output_file)

def add_rectangle_to_page(page):
    packet = io.BytesIO()
    can = canvas.Canvas(packet,
                        pagesize=(page.mediabox.width,
                                  page.mediabox.height))
    # alpha=0に近い程,透明
    can.setFillColorRGB(0.5, 0.5, 0.5, alpha=0.95)
    can.rect(20,20,                     # 左下座標
             page.mediabox.width-40,    # 幅
             page.mediabox.height-40,   # 高
             fill=True)
    can.save()

    # move to the beginning of the StringIO buffer
    packet.seek(0)
    new_pdf = PdfReader(packet)

    # merge the rectangle with the page
    page.merge_page(new_pdf.pages[0] )
    return page


if __name__ == "__main__":
    main()