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与shell的3种交互方式介绍
Apr 11 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
Python多进程fork()函数详解
Feb 22 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
python实现超市商品销售管理系统
Oct 25 Python
Python绘制散乱的点构成的图的方法
Apr 21 Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
Python pyecharts绘制条形图详解
Python OpenCV超详细讲解读取图像视频和网络摄像头
You might like
用libTemplate实现静态网页的生成
2006/10/09 PHP
php生成WAP页面
2006/10/09 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jQuery对val和atrr("value")赋值的区别介绍
2014/09/26 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
python实现的生成word文档功能示例
2019/08/23 Python
python实现淘宝购物系统
2019/10/25 Python
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
毕业生自我鉴定实例
2014/01/21 职场文书
房地产财务管理制度
2014/02/02 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
超市收银员岗位职责
2015/04/07 职场文书