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之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python-jenkins 获取job构建信息方式
May 12 Python
基于python检查矩阵计算结果
May 21 Python
Python常用类型转换实现代码实例
Jul 28 Python
python 装饰器的使用示例
Oct 10 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
一行Python命令实现批量加水印
Apr 07 Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
Python pyecharts绘制条形图详解
Python OpenCV超详细讲解读取图像视频和网络摄像头
You might like
PHP If Else(elsefi) 语句
2013/04/07 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
Javascript之String对象详解
2016/06/08 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
python和ruby,我选谁?
2017/09/13 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
python numpy实现rolling滚动案例
2020/06/08 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
Python 创建守护进程的示例
2020/09/29 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
小学生国旗下演讲稿
2014/04/25 职场文书
拉歌口号大全
2014/06/13 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书