当前位置: 首页 > article >正文

Python PyMupdf 去除PDF文档中Watermark标识水印

通过PDF阅读或编辑工具,可在PDF中加入Watermark标识的PDF水印,如下图:
PDF水印

该类水印特点

这类型的水印,会在文件的字节流中出现/WatermarkEMC等标识,那么,我们可以通过改变文件字节内容,清理掉这些水印。

水印去除

安装pymupdf

pip install --upgrade pymupdf

清理水印代码如下:

"""
移除PDF文件中的水印

参数:
    input_pdf_path (str): 输入PDF文件的路径
    output_pdf_path (str): 输出PDF文件的路径
"""
def remove_pdf_watermark(input_pdf_path, output_pdf_path):
    # 打开PDF文件
    doc = fitz.open(input_pdf_path)
    for page in doc:
        page.clean_contents()  # 清理页面绘图命令
        xref = page.get_contents()[0]   # 获取页面字节流,以xref的形式返回        
        cont0 = doc.xref_stream(xref).decode()  # 将流解码为字符串
        if '/Watermark' in cont0:   # 找到水印标识
            start = cont0.index("/Artifact")    # 获取水印起始位置
            end = cont0.index("EMC", start) # 获取水印结束位置
            cont = cont0[:start] + cont0[end:]  # 替换掉水印
            doc.update_stream(xref, cont.encode())  # 更新流
    doc.save(output_pdf_path, garbage=4)    # 保存修改后的PDF文件        
    doc.close()

代码功能解析

这段代码的功能是移除PDF文件中的水印。具体步骤如下:

  • 打开输入的PDF文件。
  • 遍历每一页,清理页面绘图命令。
  • 获取页面字节流并解码为字符串。
  • 检查是否包含水印标识 /Watermark。
  • 如果找到水印,定位其起始和结束位置,并替换掉水印内容。
  • 更新页面字节流。
  • 保存修改后的PDF文件。

控制流图(CFG)

控制流图

代码原理

  • 开始:程序开始执行。
  • 打开PDF文件:使用 fitz.open 方法打开输入的PDF文件。
  • 遍历每一页:检查是否还有未处理的页面。
  • 清理页面绘图命令:调用 page.clean_contents 方法清理页面绘图命令。
  • 获取页面字节流并解码:获取页面字节流并将其解码为字符串。
  • 是否包含水印标识:检查解码后的字符串中是否包含水印标识 /Watermark
  • 定位水印起始和结束位置:如果找到水印标识,定位其起始和结束位置。
  • 替换掉水印内容:将水印部分从字符串中移除。
  • 更新页面字节流:将修改后的内容重新编码并更新页面字节流。
  • 保存修改后的PDF文件:保存修改后的PDF文件到指定路径。
  • 关闭PDF文件:关闭PDF文件。
  • 结束:程序结束执行。

程序运行效果

水印去除


http://www.kler.cn/a/451270.html

相关文章:

  • EasyExcel 模板+公式填充
  • 基于Spring Boot的工商局商家管理系统
  • 100V宽压输入反激隔离电源,适用于N道沟MOSFET或GaN或5V栅极驱动器,无需光耦合
  • Linux的启动流程
  • CloudCompare下载、安装与汉化
  • Python选择题训练工具:高效学习、答题回顾与音频朗读一站式体验
  • 国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
  • Rust: offset祼指针操作
  • 【Linux】虚拟机扩展磁盘
  • 「实战应用」如何用图表控件SciChart WPF实现应用程序的DPI感知?
  • WebDriverManager 下载及安装教程
  • ffmpeg源码分析(九)解协议
  • 记录 io.springfox 3.0.0 整合 spring boot 2.6.x 由于 springfox bug 引发问题
  • HTML制作一个普通的背景换肤案例2024版
  • udp tcp协议
  • 重温设计模式--备忘录模式
  • Sui 基金会任命 Christian Thompson 为新任负责人
  • 快速建站(网站如何在自己的电脑里跑起来) 详细步骤 一
  • 时钟抖动定义和测量方法
  • macos自动制作dmg安装包脚本
  • 深入理解数据结构:数组、链表与列表
  • 【魅力golang】之-通道
  • Unity中如何实现绘制Sin函数图像
  • whisper.cpp: Android端测试 -- Android端手机部署音频大模型
  • 独一无二,万字详谈——Linux之文件管理
  • 虚幻引擎结构之UWorld