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中lambda的用法及其与def的区别解析
Jul 28 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
关于python多重赋值的小问题
Apr 17 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
利用python在excel中画图的实现方法
Mar 17 Python
keras 多gpu并行运行案例
Jun 10 Python
详解Python 最短匹配模式
Jul 29 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
Python使用pyecharts控件绘制图表
Jun 05 Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
Python pyecharts绘制条形图详解
Python OpenCV超详细讲解读取图像视频和网络摄像头
You might like
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
详解Python中find()方法的使用
2015/05/18 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
python实现AES加密与解密
2019/03/28 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Django values()和value_list()的使用
2020/03/31 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
python 5个顶级异步框架推荐
2020/09/09 Python
django中ImageField的使用详解
2020/12/21 Python
如何利用python 读取配置文件
2021/01/06 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
业务总经理岗位职责
2014/02/03 职场文书
初中学生评语大全
2014/04/24 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
故意杀人案辩护词
2015/05/21 职场文书