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

使用Fitz添加PDF水印时部分页面水印翻转问题求助

PDF水印翻转问题的解决建议

针对你用PyMuPDF(fitz)添加水印时出现部分页面水印上下翻转的问题,可尝试以下方案:

1. 替换水印添加方式,直接使用Pixmap插入

避免通过临时PDF文档传递页面时引入的变换干扰,直接提取水印页面的像素图插入目标页面:

doc_report = fitz.open(report_pdf_path)
doc_watermark = fitz.open(watermark_pdf_path)

for i in range(doc_report.page_count):
    page = doc_report.load_page(i)
    watermark_page = doc_watermark.load_page(i)
    # 获取无额外变换的水印像素图
    pix = watermark_page.get_pixmap(matrix=fitz.Matrix(1, 1))
    # 插入像素图到目标页面,覆盖原有内容
    page.insert_image(page.rect, pixmap=pix, overlay=True)

doc_report.save(save_path, encryption=fitz.PDF_ENCRYPT_KEEP)
doc_report.close()
doc_watermark.close()

2. 调整变换矩阵纠正翻转

如果目标页面存在隐性的垂直翻转变换,可通过自定义矩阵抵消该影响:

doc_report = fitz.open(report_pdf_path)
doc_watermark = fitz.open(watermark_pdf_path)

for i in range(doc_report.page_count):
    page = doc_report.load_page(i)
    rect = page.rect
    # 构造垂直翻转的纠正矩阵:先翻转y轴,再平移抵消位置偏移
    fix_matrix = fitz.Matrix(1, -1) * fitz.Matrix(1, 1).pretranslate(0, -rect.height)
    # 使用纠正后的矩阵显示水印页面
    page.showPDFpage(rect, doc_watermark, pno=i, matrix=fix_matrix, overlay=True, keep_proportion=True)

doc_report.save(save_path, encryption=fitz.PDF_ENCRYPT_KEEP)
doc_report.close()
doc_watermark.close()

3. 简化原代码逻辑,减少中间环节

去掉用于中转的临时PDF文档page_front,直接使用水印文档传入showPDFpage,避免中间步骤引入的变换异常:

doc_report = fitz.open(report_pdf_path)
doc_watermark = fitz.open(watermark_pdf_path)

for i in range(doc_report.page_count):
    page = doc_report.load_page(i)
    # 直接传入水印文档,指定对应页码
    page.showPDFpage(page.rect, doc_watermark, pno=i, keep_proportion=True, overlay=True, rotate=0)

doc_report.save(save_path, encryption=fitz.PDF_ENCRYPT_KEEP)
doc_report.close()
doc_watermark.close()

4. 排查水印PDF本身的问题

打开水印PDF文件,检查页面属性是否存在默认的翻转设置;也可以通过watermark_page.get_text("text")提取文本,查看文本方向是否异常,确认是否水印页面本身就包含翻转变换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:25:26