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的Django框架使用的一些实用建议
Apr 03 Python
Python教程之全局变量用法
Jun 27 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
python调用百度REST API实现语音识别
Aug 30 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
浅析python的Lambda表达式
Feb 27 Python
Python随机数函数代码实例解析
Feb 09 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
Python pyecharts绘制条形图详解
Python OpenCV超详细讲解读取图像视频和网络摄像头
You might like
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
在Django的URLconf中使用命名组的方法
2015/07/18 Python
python自动翻译实现方法
2016/05/28 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Python Collatz序列实现过程解析
2019/10/12 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
工业学校毕业生自荐信范文
2014/01/03 职场文书
高三语文教学反思
2014/01/15 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
二婚主持词
2015/06/30 职场文书
九年级英语教学反思
2016/02/15 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
高中政治教学反思
2016/02/23 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
SQL写法--行行比较
2021/08/23 SQL Server