·
日常编程 ·
42992
本文主要介绍了python清除PDF文件中水印的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
学校老师发的资料,有时候会带水印,有点强迫症的都想给它去掉。用Adobe Acrobat试了下,检测不到水印,无法删除!分析发现原来这类PDF文件是用word编辑的,其中的水印是加在了页眉中!
自己动手想办法搞定它。
"""
Title: 清除PDF水印(非pdf加的水印而是用word文件头加的然后转成了pdf)
Author: JackieZheng
Date: 2025-05-11 10:31:23
LastEditTime: 2025-05-12 23:43:21
LastEditors: Please set LastEditors
Description:
FilePath: \\pythonCode\\remove_pdf_watermark.py
"""
import os
import fitz # PyMuPDF
def remove_image_watermark(pdf_path):
doc = fitz.open(pdf_path)
for page_num in range(len(doc)):
page = doc[page_num]
xref = page.get_contents()[0] # 获取页面字节流,以xref的形式返回
cont0 = doc.xref_stream(xref).decode() # 将流解码为字符串
page.clean_contents()
if '/Header>> BDC' in cont0: # 找到word页眉总分
start_str = '/Header>> BDC' # 获取水印起始位置
end_str = 'c\r\nh\r\nf*\r\nq' # 获取水印结束位置 (需要自己根据情况找到类似字符)
cont = remove_between_strings(cont0, start_str, end_str)
doc.update_stream(xref, cont.encode()) # 更新流
print('page', page_num, 'processed')
doc.save(pdf_path[:-4] + '_processed.pdf')
doc.close()
def remove_between_strings(original_text, start_str, end_str):
start = original_text.index(start_str) + len(start_str)
end = original_text.index(end_str, start)
content = original_text[:start] + original_text[end:]
# print(content)
return content
pdf_path = r'C:\Users\JackieZheng\Desktop\满分冲刺练.pdf'
remove_image_watermark(pdf_path)
操作原理:把文件解码为字符串,分析找出水印部分内容,从中剔除掉即可。
前后效果对比:
到此这篇关于python清除PDF文件中水印的项目实践的文章就介绍到这了,更多相关python清除PDF水印内容请搜索骃骐网以前的文章或继续浏览下面的相关文章希望大家以后多多支持骃骐网!
您可能感兴趣的文章:
- Python去除PDF水印的实现示例
- python为图片和PDF去水印详解
- 2行Python代码实现给pdf文件添加水印
- 十行Python3代码实现去除pdf文件水印
- Python实现为pdf添加水印功能
- 详解Python如何实现批量为PDF添加水印
- Python实现为PDF大文件批量去除水印
- Python使用PyMuPDF实现添加PDF水印
- 使用python去除PDF简单水印的示例
在Python类初始化时直接对传入列表调用random.shuffle()会导致多个实例共享同一份被修改的数据,根本原因是未创建独立副本;解决方法是使用.copy()或list()构造新列表后再打乱。 在python类初始化时直接对传入列表调用`random.shuffle()`会导致多个实例共享同一份被修改的数据,根本原因是未创建独立副本;解决方法是使用`.copy()`或`list()`构造新...
本文探讨在 python 音乐点唱机(jukebox)应用中,如何高效组织和加载 wav 歌曲文件:对比基于文本配置文件的分组方案与基于文件名编码的隐式分组方案,并提供可落地的代码实现与性能建议。 本文探讨在 python 音乐点唱机(jukebox)应用中,如何高效组织和加载 wav 歌曲文件:对比基于文本配置文件的分组方案与基于文件名编码的隐式分组方案,并提供可落地的代码实现与性能建议。 在构...
本文介绍如何为接受任意JSON可序列化输入的函数设计精确、安全且符合mypy规范的类型提示,解决Union[List[Any], Dict[Any, Any]]不完整、禁用Any及递归类型声明等核心问题。 本文介绍如何为接受任意json可序列化输入的函数设计精确、安全且符合mypy规范的类型提示,解决`union[list[any], dict[any, any]]`不完整、禁用`any`及递归类...
本文介绍如何为支持json.dumps的函数参数设计严谨、可静态检查的类型提示,解决Union[List[Any], Dict[Any, Any]]不完整且违反mypy规范的问题,推荐使用递归TypeAlias定义完整的JSON可序列化类型。 本文介绍如何为支持`json.dumps`的函数参数设计严谨、可静态检查的类型提示,解决`union[list[any], dict[any, any]]`...
本文介绍如何为接受任意json可序列化输入的python函数编写精确、安全且mypy友好的类型注解,涵盖递归类型别名的定义、使用方式及注意事项。 本文介绍如何为接受任意json可序列化输入的python函数编写精确、安全且mypy友好的类型注解,涵盖递归类型别名的定义、使用方式及注意事项。 在Python中,json.dumps() 能处理的值类型并非无限宽泛,而是严格限定于以下几类:None、布...
抖音/TikTok 的 _signature 参数由前端 JS 基于 URL、设备指纹、页面加载时间等动态生成,常依赖 WebAssembly 或混淆代码,逆向成本高;实操应使用 Playwright 等真实浏览器自动执行 JS 获取,需严格模拟 UA、viewport、语言等环境,且签名 5–10 分钟失效。 抖音/TikTok 的 _signature 参数是怎么生成的? 它不是固定值,也不是...
必须将tests/与src/置于项目根目录平级,否则会导致import失败、路径混乱及CI崩溃;因pytest默认仅将当前目录加入sys.path,src不在其中则无法解析myapp模块,且易误导入已安装旧包而非正在开发的源码。 必须把 tests/ 和 src/ 放在项目根目录下平级,否则 import 会错、路径会乱、CI 会挂。 为什么不能把 tests 塞进 src 里 常见错误是建出 s...
pyodbc 支持多进程和多线程并行数据库操作,但连接必须在各进程/线程内独立创建;直接复用连接会导致错误。实际性能瓶颈常在 i/o 而非 cpu,因此线程池通常比进程池更高效、资源更轻量。 pyodbc 支持多进程和多线程并行数据库操作,但连接必须在各进程/线程内独立创建;直接复用连接会导致错误。实际性能瓶颈常在 i/o 而非 cpu,因此线程池通常比进程池更高效、资源更轻量。 在 Python...
浮动通过脱离文档流实现元素左/右对齐,导致父元素高度塌陷;常用清除方法包括clear属性、overflow设置和伪元素clearfix;现代布局中,float仍适用于文本环绕图片等简单场景,而复杂布局推荐使用Flexbox或Grid。 CSS浮动,说白了,就是让一个元素脱离常规的文档流,像浮在水面上一样,沿着其父容器的左侧或右侧移动,直到遇到父容器的边缘或者另一个浮动元素。它最早是为了实现文本环绕...
异常安全通过RAII和复制再交换等技术保障程序在异常下的正确性。1. 基本保证确保资源不泄漏,对象状态有效;2. 强保证实现操作的原子性,典型方法是复制再交换;3. 无异常保证要求关键操作如析构函数和swap不抛出异常。使用智能指针、锁包装器等RAII类可自动释放资源,避免泄漏。移动操作应尽量标记noexcept以支持标准容器高效操作。函数设计需明确异常行为,局部捕获异常并转化为安全状态。始终确保...