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解决字典中的值是列表问题的方法
Mar 04 Python
线程和进程的区别及Python代码实例
Feb 04 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
Python管理Windows服务小脚本
Mar 12 Python
python smtplib发送带附件邮件小程序
May 22 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
python实现简单flappy bird
Dec 24 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
python字符串替换第一个字符串的方法
Jun 26 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
Python pyecharts绘制条形图详解
Python OpenCV超详细讲解读取图像视频和网络摄像头
You might like
解析PHP提交后跳转
2013/06/23 PHP
smarty表格换行实例
2014/12/15 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
原生js实现日期联动
2015/01/12 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
javascript如何写热点图
2015/12/08 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
Python中functools模块函数解析
2017/03/12 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
办公室文秘岗位职责
2013/11/15 职场文书
企业后勤岗位职责
2014/02/28 职场文书
工作评语大全
2014/04/26 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
汉字听写大会观后感
2015/06/12 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers