如何用Python给多页PDF添加文本?现有代码遇两问题求助
解决PDF批量添加内容及页面顺序问题
问题根源
- 仅对第一页执行内容合并操作,未遍历所有页面,导致无法给所有页面添加文本
- 先将原PDF所有页面追加到输出对象,再单独添加修改后的第一页,造成原第一页重复且修改后的第一页被放到文档末尾
修正后的代码
from PyPDF2 import PdfFileWriter, PdfFileReader import io from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.lib.units import cm file = input("Give path to the file >> ") packet = io.BytesIO() can = canvas.Canvas(packet, pagesize=letter) # 注册字体 pdfmetrics.registerFont(TTFont('Arial', 'Arial.ttf')) can.setFont(psfontname="Arial", size=10) # 绘制文本 can.drawString(93, 54.5, "2022-12-21") # 绘制白色矩形(修正RGB值范围:ReportLab要求参数为0-1) can.setFillColorRGB(254/255, 254/255, 254/255) can.rect(92.5, 65, 2*cm, 0.34*cm, fill=1, stroke=0) # 保存canvas内容 can.save() # 重置缓冲区指针到开头 packet.seek(0) # 读取生成的单页PDF new_pdf = PdfFileReader(packet) # 读取原PDF existing_pdf = PdfFileReader(open(file, "rb")) output = PdfFileWriter() # 遍历原PDF每一页,逐个合并内容 for page_num in range(existing_pdf.getNumPages()): page = existing_pdf.pages[page_num] merged_page = page merged_page.merge_page(new_pdf.pages[0]) output.add_page(merged_page) # 写入输出文件 with open("destination3.pdf", "wb") as output_stream: output.write(output_stream) print("PDF created!")
关键修改说明
- 遍历所有页面:通过循环处理原PDF的每一页,确保所有页面都能合并指定内容
- 修正页面顺序:按原文档顺序添加合并后的页面,避免重复和顺序错乱
- 修复RGB值错误:调整颜色参数到ReportLab要求的0-1范围,保证白色矩形正常显示
内容的提问来源于stack exchange,提问作者Twitzi
相关产品推荐
相关产品推荐

