python一键去PDF水印,只需十行代码,超级简单...
创始人
2024-04-11 20:34:23
0

用python制作去除 pdf 文件水印脚本

  • 前因后果
  • 去除水印原理
  • 代码剖析
      • 1、先查看PDF文档中的水印rgb值是多少
      • 2、pdf转换成图片,并去除水印
      • 3、图片转为pdf
  • 代码整合
  • 总结

前因后果

弟弟最近要考试,临时抱佛脚在网上找了一堆学习资料复习,这不刚就来找我了,说PDF上有水印,影响阅读效果,到时候考不好就怪资料不行,气的我差点当场想把他揍一顿!

算了,弟弟长大了,看在打不过他的份上,就不打他了~

稍加思索,我想起了Python不是可以去水印?说搞就搞!

去除水印原理

去除方法:

  1. 用 PyMuPDF 打开 pdf 文件,将 pdf 的每一页都转换为图片 pixmap
  2. pixmap 有它自己的RGB,只需要将 pdf 水印中的 RGB 改为(255, 255, 255),并保存图片 ;
  3. 按照生成的图片,插入到pdf文档中;

因为pfd文档无法直接去除水印,需要先将pfd文档转换成图片,在逐一对图片进行水印去除操作,最后在把图片插入到pdf文档中。

代码剖析

1、先查看PDF文档中的水印rgb值是多少

可以看到,RGB(179,179,179),因为这里要的是RGB色值总和,所以我们就认为,超过510,就认为是水印。

敲黑板

光学三原色是红绿蓝(RGB),也就是说它们是不可分解的三种基本颜色,其他颜色都可以通过这三种颜色混合而成,三种颜色等比例混合就是白色,没有光就是黑色。
在计算机中,可以用三个字节表示 RGB 颜色,1个字节能表示的最大数值是 255, 所以,(255, 0, 0)代表红色,(0, 255, 0)代表绿色,(0, 0, 255)代表蓝色。相应地,(255, 255, 255)代表白色,(0, 0, 0)代表黑色。从(0, 0, 0) ~ (255, 255, 255) 之间的任意组合都可以代表一个不同的颜色。
图片每个位置颜色由四元组表示,前三位分别是 RGB,第四位是 Alpha 通道

2、pdf转换成图片,并去除水印

代码示例:

from PIL import Image
from itertools import product
import fitz# 去除pdf的水印
def remove_pdfwatermark():#打开源pfd文件pdf_file = fitz.open("源码找落落阿.pdf")#page_no 设置为0page_no = 0#page在pdf文件中遍历for page in pdf_file:#获取每一页对应的图片pix (pix对象类似于我们上面看到的img对象,可以读取、修改它的 RGB)#page.get_pixmap() 这个操作是不可逆的,即能够实现从 PDF 到图片的转换,但修改图片 RGB 后无法应用到 PDF 上,只能输出为图片pix = page.get_pixmap()#遍历图片中的宽和高,如果像素的rgb值总和大于510,就认为是水印,转换成255,255,255-->即白色for pos in product(range(pix.width), range(pix.height)):if sum(pix.pixel(pos[0], pos[1])) >= 510:pix.set_pixel(pos[0], pos[1], (255, 255, 255))#保存去掉水印的截图pix.pil_save(f"./{page_no}.png", dpi=(30000, 30000))#打印结果print(f'第 {page_no} 页去除完成')page_no += 1if __name__ == '__main__':remove_pdfwatermark()

执行完成

查看生成图片:

查看图片内容

3、图片转为pdf

代码示例:

from PIL import Image
from itertools import product
import fitz''' 图片转为pdf'''
#图片所在的文件夹
pic_dir = 'F:\123'pdf = fitz.open()
#图片数字文件先转换成int类型进行排序
img_files = sorted(os.listdir(pic_dir), key=lambda x: int(str(x).split('.')[0]))
for img in img_files:print(img)imgdoc = fitz.open(pic_dir + '/' + img)#将打开后的图片转成单页pdfpdfbytes = imgdoc.convertToPDF()imgpdf = fitz.open("pdf", pdfbytes)#将单页pdf插入到新的pdf文档中pdf.insertPDF(imgpdf)
pdf.save("源码找落落阿_完成.pdf")
pdf.close()

执行代码

查看生成的pdf文档

代码整合

上面的内容都了解以后,我们就整合代码,直接运行就可以了。

from PIL import Image
from itertools import product
import fitz# 去除pdf的水印
def remove_pdfwatermark():# 打开源pfd文件pdf_file = fitz.open("源码找落落阿.pdf")# page_no 设置为0page_no = 0# page在pdf文件中遍历for page in pdf_file:# 获取每一页对应的图片pix (pix对象类似于我们上面看到的img对象,可以读取、修改它的 RGB)# page.get_pixmap() 这个操作是不可逆的,即能够实现从 PDF 到图片的转换,但修改图片 RGB 后无法应用到 PDF 上,只能输出为图片pix = page.get_pixmap()# 遍历图片中的宽和高,如果像素的rgb值总和大于510,就认为是水印,转换成255,255,255-->即白色for pos in product(range(pix.width), range(pix.height)):if sum(pix.pixel(pos[0], pos[1])) >= 510:pix.set_pixel(pos[0], pos[1], (255, 255, 255))# 保存去掉水印的截图pix.pil_save(f"./{page_no}.png", dpi=(30000, 30000))# 打印结果print(f'第 {page_no} 页去除完成')page_no += 1# 去除的pdf水印添加到pdf文件中
def pictopdf():# 水印截图所在的文件夹# pic_dir = input("请输入图片文件夹路径:")pic_dir = 'F:\123'pdf = fitz.open()# 图片数字文件先转换成int类型进行排序img_files = sorted(os.listdir(pic_dir), key=lambda x: int(str(x).split('.')[0]))for img in img_files:print(img)imgdoc = fitz.open(pic_dir + '/' + img)# 将打开后的图片转成单页pdfpdfbytes = imgdoc.convertToPDF()imgpdf = fitz.open("pdf", pdfbytes)# 将单页pdf插入到新的pdf文档中pdf.insertPDF(imgpdf)pdf.save("源码找落落阿_完成.pdf")pdf.close()if __name__ == '__main__':remove_pdfwatermark()pictopdf()

兄弟们学习python,有时候不知道怎么学,从哪里开始学。掌握了基本的一些语法或者做了两个案例后,不知道下一步怎么走,不知道如何去学习更加高深的知识。
那么对于这些大兄弟们,我准备了大量的免费视频教程,PDF电子书籍,以及源代码!
直接在文末名片自取即可~








总结

需要理解的流程是:

  • pdf文档需要先转换成图片,进行水印去除;
  • 再转换成pdf ;
  • 最后插入到新的pdf文档中;

写到这里,今天的分享就差不多快结束了,咱们下次再见!

相关内容

热门资讯

中钢国际(000928)发布现... 截至2025年12月30日收盘,中钢国际(000928)报收于6.56元,较前一交易日下跌1.5%,...
明年“两新”政策方案发布 政策... 央视网消息(新闻联播):记者12月30日从国家发展改革委了解到,2026年优化实施“两新”政策方案正...
男子毒死9条宠物狗一审获刑4年... 极目新闻记者 曹雪娇 此前,北京首例宠物中毒刑事公诉案一审宣判,被告因投放危险物质罪被判有期徒刑4年...
黑龙江一个调解案例入选国家典型... 人民网哈尔滨12月30日电 (记者张齐)近日,国家知识产权局办公室、最高人民法院办公厅联合发布202...
联动解“薪愁”!新兴县综治中心... 近日,新兴县社会治安综合治理中心调解大厅内暖意融融,工人代表刘某某手持一面印着“解民薪忧办实事,勤政...
原创 中... 最近,巴拿马阿赖汉市政府做出了一个引人注目的决定:在未提前通知的情况下,夜间悄然拆除了中巴公园及其标...
(粤港澳大湾区)大湾区仲裁员及... 中新社香港12月30日电 记者30日从香港特区政府律政司获悉,粤港澳三地法律部门当日正式发布《粤港澳...
中央商场控股子公司被泗阳规划局... 观点网讯:12月30日,南京中央商场(集团)股份有限公司发布公告,披露其控股子公司泗阳雨润中央购物广...
涉嫌内幕交易!千亿锂矿巨头被移... 锂矿龙头之一的赣锋锂业突发公告。 12月29日晚间,江西赣锋锂业集团股份有限公司(以下简称“赣锋锂业...
中央商场控股子公司泗阳雨润被江... 观点网讯:12月30日,南京中央商场(集团)股份有限公司发布公告,披露其控股子公司泗阳雨润中央购物广...