给下面PDF文件打印【仅用XXX】水印
身份证正反面.pdf

from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import io
def add_text_watermark(input_pdf, output_pdf, watermark_text):
# 1. 注册中文字体(关键步骤)
# 替换为你的字体文件路径(如宋体、微软雅黑)
font_path = "simsun.ttc" # 若放在项目根目录,直接写文件名;否则写绝对路径
pdfmetrics.registerFont(TTFont('Chinese', font_path))
# 2. 生成水印PDF(内存中)
watermark_buffer = io.BytesIO()
c = canvas.Canvas(watermark_buffer, pagesize=letter)
c.setFillAlpha(0.3) # 透明度
# 使用注册的中文字体(名称为'Chinese',大小40)
c.setFont("Chinese", 12)
c.rotate(45) # 旋转角度
# 重复添加水印(覆盖页面)
for x in range(0, 600, 150):
for y in range(-200, 800, 200):
c.drawString(x, y, watermark_text) # 中文正常显示
c.save()
# 3. 合并原PDF与水印
watermark_buffer.seek(0)
watermark_pdf = PdfReader(watermark_buffer)
watermark_page = watermark_pdf.pages[0]
reader = PdfReader(input_pdf)
writer = PdfWriter()
for page in reader.pages:
page.merge_page(watermark_page)
writer.add_page(page)
# 4. 输出结果
with open(output_pdf, "wb") as f:
writer.write(f)
# 使用示例
add_text_watermark(
input_pdf="cat.pdf",
output_pdf="带水印的文件.pdf",
watermark_text="仅用XXX"
)
效果如下:
