运行Python代码添加PDF水印未生成输出文件,遗漏了什么内容?
PDF水印代码错误修复
你代码的问题主要有3处:
- 缩进逻辑错误:写输出文件的
with open代码块放在了for循环内部,每处理一页就会覆盖写入一次输出文件,不仅会造成不必要的IO消耗,还容易触发文件占用冲突,导致最终输出文件损坏或者写入失败。你需要把这部分代码完全移出for循环,等所有页面都处理完成后再一次性写入。 - PyPDF2版本兼容问题:你使用的
PdfFileReader、PdfFileWriter是PyPDF2 1.x版本的旧API,2022年之后发布的2.x及以上版本已经移除了这些接口,如果你的环境安装的是新版PyPDF2,运行时会直接触发报错无输出,需要替换为新的PdfReader、PdfWriter接口。 - 文件句柄未主动释放:你直接将
open()返回的文件对象作为参数传入PDF读取类,没有主动关闭文件的逻辑,部分操作系统下会触发文件占用,导致PDF读取或写入失败。
修复后的可运行代码如下:
# pdf watermarkerV2 修复版 import PyPDF2 # 主动管理文件句柄,读取目标PDF和水印PDF with open('super.pdf', 'rb') as template_file, open('wtr.pdf', 'rb') as watermark_file: template = PyPDF2.PdfReader(template_file) watermark = PyPDF2.PdfReader(watermark_file) watermark_page = watermark.pages[0] output = PyPDF2.PdfWriter() # 遍历所有页面加水印 for page in template.pages: page.merge_page(watermark_page) output.add_page(page) # 所有页面处理完成后统一写入输出文件 with open('watermarked.pdf', 'wb') as output_file: output.write(output_file)
如果运行后还是没有输出,先检查当前工作目录下是否存在super.pdf和wtr.pdf,确认文件名没有拼写错误、相对路径正确即可。
内容的提问来源于stack exchange,提问作者BoyWantsToCode
相关产品推荐
相关产品推荐

