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

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.lryc.cn/news/510811.html

相关文章:

  • 改进爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)
  • 解读DeepseekV3
  • 【网络安全 | 漏洞挖掘】如何通过竞态条件发现账户接管漏洞
  • 串口通信标准RS232、RS422、RS485有什么区别和不同
  • win版ffmpeg的安装和操作
  • 力扣56. 合并区间
  • 2024基于大模型的智能运维(附实践资料合集)
  • Android Java 版本的 MSAA OpenGL ES 多重采样
  • YOLO11改进-注意力-引入自调制特征聚合模块SMFA
  • VMware虚拟机安装银河麒麟操作系统KylinOS教程(超详细)
  • Elasticsearch-索引的批量操作
  • 【Android】application@label 属性属性冲突报错
  • 手机发烫怎么解决?
  • 【Artificial Intelligence篇】AI 携手人类:共铸未来创作新纪元
  • 小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面
  • Go快速开发框架2.6.0版本更新内容快速了解
  • 条件语句 - if, else, switch-case
  • Flink CDC MySQL 同步数据到 Kafka实践中可能遇到的问题
  • 代码随想录Day51 99. 岛屿数量,99. 岛屿数量,100. 岛屿的最大面积。
  • 说说 DinoGrid Open Edition 算法生成艺术背后的故事
  • FFmpeg推拉流命令
  • 【图像处理lec10】图像压缩
  • 单片机实物成品-007 汽车防盗系统(代码+硬件+论文)
  • Qt仿音乐播放器:动画类
  • 摄影构图与拍摄
  • Colyseus-monitor插件介绍
  • Hive练习题11-15
  • Overleaf中设置表格中的字体为Times New Roman
  • 模型 卡尼曼系统
  • 潇洒郎:部署Dify, 安装Ollama,Ollama下载模型,Dify配置模型