给PDF文件加水印,我们也可以使用之前用过的PyPDF2
库,但是会稍显麻烦,因为PyPDF2
主要用于PDF的合并、拆分、旋转等。所以需要先生成一个PDF的水印页面,然后再与原来页面进行合并,如此这般。
但我们可以使用另一个库:PyMuPDF
。
1、首先,安装PyMuPDF
:
pip install pymupdf
2、使用库,编写代码,如下:
"""
example096 - Python 给PDF加水印的方法
Author: 不在同一频道上的呆子
Date: 2024/7/27
"""
import fitz # PyMuPDF
def add_watermark(pdf_path, output_path, watermark_text, shrink_amount=72, horizontal_offset=50, vertical_offset=50):
"""
编写加水印方法:add_watermark
:原pdf路径:pdf_path
:输出路径:output_path
:水印文本:watermark_text
:缩放:shrink_amount
:水平便宜:horizontal_offset
:垂直偏移:vertical_offset
"""
doc = fitz.open(pdf_path)
for page in doc:
# 创建一个矩形水印,稍微缩小以避免遮挡文字
original_rect = page.rect
watermark_rect = fitz.Rect(
original_rect.x0 + shrink_amount / 2,
original_rect.y0 + shrink_amount / 2,
original_rect.x1 - shrink_amount / 2,
original_rect.y1 - shrink_amount / 2
)
# 设置文本插入的起始点
text_pos = (watermark_rect.x0 + horizontal_offset, watermark_rect.y1 - vertical_offset)
# 添加水印
page.insert_text(
text_pos, # 文本插入的起始点
watermark_text, # 水印文本
fontsize=36, # 字体大小
fontname="Helvetica", # 字体名称
color=(0, 0, 0), # 字体颜色(黑色)
)
doc.save(output_path)
doc.close()
# 调用
pdf_path1 = 'Resources/Windows8使用指南.pdf'
output_path1 = 'Resources/Windows8使用指南_加水印.pdf'
watermark_text1 = "DEMO" # 支持英文
add_watermark(pdf_path1, output_path1, watermark_text1, horizontal_offset=230, vertical_offset=350)
运行以上代码,我成功为我的PDF加上了水印。