Python实现为PDF去除水印的示例代码


Posted in Python onApril 03, 2022

前言

为什么做出这个?

就是有时候从网上下载的资料中的pdf有水印,看着不舒服。

比如说我从网上下载的试卷,然后去打印店打印,打印之后水印看着很不舒服,而去水印wps要会员,而我是一个程序员,为什么不做一个呢,何乐而不为。

虽然最后是做出来的,但是还是有限制。

原理

把pdf转化为图片,然后将图片去水印。

图片去水印,是又条件限制的,必须水印的颜色和pdf中文字的颜色的rgb相差很大,然后把水印的颜色改变成背景颜色。

特色

网上很多和我类似的原理去水印,但是都是先pdf转化为图片存起来,然后图片去水印之后,然后把图片拼接成pdf。

而我就不需要中间步骤,我是直接输入pdf文件,输出pdf文件。

成果

安装依赖

Image

pip install pillow

fitz

pip install PyMuPDF

代码

程序处理pdf需要的时间比较久(因为处理的是像素点),可以先用页数少的pdf进行测试之后再去页数比较多的pdf。

from PIL import Image
import os
import io
import fitz
import time


def single_pdf_clearwater(pdf_path: str):
    pdf = fitz.open(pdf_path)   # 打开pdf目录
    pdf_img = fitz.open()       # 打开空文件,用来存图片pdf
    for page_inf in pdf:
        definition = 3    # 清晰度,感觉输出的pdf不够清晰,可以调大,调大,文件大小也会变大
        matrix = fitz.Matrix(definition, definition)
        img = page_inf.get_pixmap(matrix=matrix).tobytes()
        img = Image.open(io.BytesIO(img))
        width, height = img.size
        for i in range(width):
            for j in range(height):
                if sum(img.getpixel((i, j))) > 600: # 这里的600你需要根据自己的水印的颜色进行更改。
                    img.putpixel((i, j), (255, 255, 255))
        img = img.tobytes()  # = img = np.asarray(img);img = bytearray(img)
        img = fitz.Pixmap(fitz.csRGB, width, height, img)
        img = img.tobytes()
        img = fitz.open("png", img)
        pdf_bytes = img.convert_to_pdf()
        pdf_img.insert_pdf(fitz.open("pdf", pdf_bytes))
    if not os.path.exists("output"):
        os.makedirs("output")  # 处理好的pdf存入了output目录下
    pdf_img.save("output/去水印pdf_" + os.path.basename(pdf_path))


def group_pdf_clearwater(path_array: list[str]):
    print("************去水印时间比较久***********")
    for pdf_path in path_array:
        print(pdf_path, "去水印中...")
        single_pdf_clearwater(pdf_path)
    print("完成")


def folder_pdf_files(folder: str) -> list[str]:  # 一个文件夹里面有多少pdf文件
    file_list = []
    for a, b, c in os.walk(folder):
        if b == []:
            for filename in c:
                if filename[-3:].lower() == 'pdf':
                    file_path = os.path.join(a, filename)
                    file_list.append(file_path)
    print(folder, ": 有", len(file_list), "个pdf文件")
    return file_list


if __name__ == '__main__':
    time_start = time.time()
    path_list = folder_pdf_files("pdf的目录")
    group_pdf_clearwater(path_list)
    time_end = time.time()
    print("程序运行时间:", round(time_end - time_start, 2), "秒")

想法

虽然最后实现了,但是有限制。

为了去除保存图片后取图片的中间步骤,我查阅了很多的文献和资料,后面发现只有我最不想看的英文文档才找到了问题的答案。我就感觉,比较偏的点,只有英文文献才有。

因为限制,我在想是不是可以和python-普通pdf的添加水印的逆向思维进行操作,就是把水印图层直接取出来。
如果处理的pdf文件比较多,并且页数很多,程序运行就要很久,我都感觉像深度学习了。

到此这篇关于Python实现为PDF去除水印的示例代码的文章就介绍到这了,更多相关Python PDF去水印内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
python的unittest测试类代码实例
Dec 07 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
Python pyecharts绘制条形图详解
Python OpenCV超详细讲解读取图像视频和网络摄像头
You might like
PHP学习之整理字符串
2011/04/17 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
电子商务专业自荐信
2014/06/02 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
2014年科研工作总结
2014/12/03 职场文书
少先队中队工作总结
2015/08/14 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫