Python如何将PDF格式水印定位添加到PDF每页右上角
PDF格式水印定点添加方案
你之前实现PNG水印的合并逻辑完全可复用,不需要额外依赖复杂库,只要把「生成临时PDF绘制图片」的步骤替换成「读取现有PDF水印+坐标变换」即可,核心是要调整水印页的坐标偏移,解决默认merge时左下角对齐导致位置不对的问题。
可直接运行的代码
from PyPDF2 import PdfWriter, PdfReader import webbrowser # ============================ 配置项 ============================ inputPath = 'input.pdf' # 待加水印的原PDF路径 outputPath = 'output.pdf' # 输出文件路径 watermarkPath = 'watermark.pdf' # PDF格式水印文件路径 x_offset = 515 # 水印横向偏移(相对于原页左下角) y_offset = 762 # 水印纵向偏移(相对于原页左下角) watermark_scale = 1 # 水印缩放比例,1为原始尺寸 watermark_on_top = True # 水印是否盖在原页面内容上层 # ==================================================================== # 读取水印文件,取第一页作为通用水印模板 watermark_reader = PdfReader(open(watermarkPath, "rb")) watermark_page = watermark_reader.pages[0] # 调整水印大小和位置 watermark_page.scale(watermark_scale, watermark_scale) watermark_page.mediabox.upper_right = ( watermark_page.mediabox.upper_right[0] + x_offset, watermark_page.mediabox.upper_right[1] + y_offset ) watermark_page.mediabox.lower_left = ( watermark_page.mediabox.lower_left[0] + x_offset, watermark_page.mediabox.lower_left[1] + y_offset ) # 逐页合并水印 output_writer = PdfWriter() input_reader = PdfReader(open(inputPath, "rb")) for page in input_reader.pages: page.merge_page(watermark_page, over=watermark_on_top) output_writer.add_page(page) # 写出结果 with open(outputPath, "wb") as out_file: output_writer.write(out_file) # 默认程序打开生成的PDF webbrowser.open(outputPath)
调参说明
- 依赖库如果运行报错先升级:执行
pip install --upgrade pypdf,新版pypdf完全兼容旧版PyPDF2的导入语法,修复了旧版坐标合并的偏移bug - 坐标计算参考:标准A4页面尺寸为宽595磅、高842磅,如果要放70磅大小的水印、右上角留10磅页边距,x_offset设为
595 - 水印宽度 - 边距、y_offset设为842 - 水印高度 - 边距,反复微调两个数值就能对准到目标位置 - 水印本身的透明度、颜色等属性直接在制作PDF水印文件时设置即可,合并过程会完整保留这些属性,不需要额外代码处理
- 如果水印是多页PDF,只要在循环里按页码取对应水印页合并即可,单页水印可直接复用到所有原文档页面
内容的提问来源于stack exchange,提问作者sueszli
相关产品推荐
相关产品推荐

