Python PyMupdf 去除PDF文档中Watermark标识水印
通过PDF阅读或编辑工具,可在PDF中加入Watermark
标识的PDF水印,如下图:
该类水印特点
这类型的水印,会在文件的字节流中出现/Watermark
、EMC
等标识,那么,我们可以通过改变文件字节内容,清理掉这些水印。
水印去除
安装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文件中的水印。具体步骤如下:
控制流图(CFG)
代码原理
fitz.open
方法打开输入的PDF文件。page.clean_contents
方法清理页面绘图命令。/Watermark
。程序运行效果
作者:Humbunklung