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

如何用同页数PDF逐页为另一PDF加水印(PyPDF2编程疑问)

给PDF每页添加对应页的水印解决方案

嘿,我来帮你搞定这个问题!你要实现的是把pdf2.pdf的每页对应叠加到pdf1.pdf的对应页上作为水印,核心就是通过循环遍历每一页,完成页面合并操作就行。先给你理清楚思路,再给你新手友好的完整代码~

实现思路

  1. 导入正确的模块:精简导入PyPDF2里需要的读取和写入类,避免冗余
  2. 读取两个PDF文件:用PdfFileReader分别打开并读取pdf1.pdf和pdf2.pdf
  3. 校验页数一致性:先检查两个PDF的页数是否相同,防止后续循环出错
  4. 循环处理每一页:遍历每一页的索引,依次取出两个PDF的对应页面
  5. 合并页面作为水印:把pdf2的页面合并到pdf1的对应页面上(可调整叠加顺序)
  6. 写入输出文件:将处理好的所有页面写入到新的PDF文件中

完整代码(带详细注释)

# 直接导入PyPDF2中需要的读取和写入类,精简写法
from PyPDF2 import PdfFileReader, PdfFileWriter

def add_corresponding_watermark(pdf1_path, pdf2_path, output_path):
    # 使用with语句自动管理文件打开/关闭,避免资源泄漏
    with open(pdf1_path, 'rb') as pdf1_file, open(pdf2_path, 'rb') as pdf2_file:
        # 创建两个PDF的读取对象
        pdf1_reader = PdfFileReader(pdf1_file)
        pdf2_reader = PdfFileReader(pdf2_file)
        
        # 先校验两个PDF的页数是否一致,不一致直接提示错误
        if pdf1_reader.getNumPages() != pdf2_reader.getNumPages():
            print("⚠️ 错误:两个PDF文件的页数不相同,无法完成对应页水印添加!")
            return
        
        # 创建用于输出的PDF写入对象
        output_writer = PdfFileWriter()
        
        # 循环遍历每一页的索引(从0开始,对应第1页到最后一页)
        for page_num in range(pdf1_reader.getNumPages()):
            # 获取pdf1当前索引对应的页面
            main_page = pdf1_reader.getPage(page_num)
            # 获取pdf2对应索引的页面(作为水印)
            watermark_page = pdf2_reader.getPage(page_num)
            
            # 把水印页合并到主页面上
            # 👉 注意:这里是watermark_page叠加在main_page上面
            # 如果需要水印在底层(不遮挡主内容),可以改成:
            # watermark_page.mergePage(main_page)
            # 然后把watermark_page添加到输出
            main_page.mergePage(watermark_page)
            
            # 将处理好的页面添加到输出对象中
            output_writer.addPage(main_page)
        
        # 把处理好的内容写入到输出文件
        with open(output_path, 'wb') as output_file:
            output_writer.write(output_file)
        print("✅ 水印添加完成!输出文件已保存为:", output_path)

# 调用函数,替换成你的实际文件路径
add_corresponding_watermark('pdf1.pdf', 'pdf2.pdf', 'output_with_watermark.pdf')

额外说明

  • 如果你的pdf2.pdf是透明背景的水印文件,直接用上面的代码就可以得到正常的水印效果;如果pdf2是不透明的页面,会覆盖pdf1的内容,这时候记得按照代码注释里的提示调整合并顺序,让pdf1的内容在上面。
  • PyPDF2对一些复杂格式的PDF(比如带特殊字体、加密的文件)支持有限,如果遇到处理失败的情况,可以试试更强大的PyMuPDF(fitz)库,不过先把这个基础版本跑通会更容易理解~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:20:46