You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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!")

关键修改说明

  1. 遍历所有页面:通过循环处理原PDF的每一页,确保所有页面都能合并指定内容
  2. 修正页面顺序:按原文档顺序添加合并后的页面,避免重复和顺序错乱
  3. 修复RGB值错误:调整颜色参数到ReportLab要求的0-1范围,保证白色矩形正常显示

内容的提问来源于stack exchange,提问作者Twitzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:15:32