十行Python3代码实现去除pdf文件水印

目录
  • 1、引言
  • 2、代码实战
    • 2.1去除原理
    • 2.2代码解析
    • 2.3代码整合
  • 3、总结

1、引言

小屌丝:鱼哥,最近有点不像话了。

小鱼:嗯?? 啥个意思嘛~

小屌丝:一周了,没分享小知识了。

小鱼:就因为这个??

小屌丝:那是,我这么爱学习的人。

小鱼:怕是你有什么事情解决不了,想到我了吧?

小屌丝:呵 ~ 笑话 ~ 我 能有…什…么…事情…

小鱼:说吧,

小屌丝:这可是你让我说的,我可没主动要问的!

小鱼:说吧,咋还磨磨唧唧了呢

小屌丝:我在某站下载的pfd文档,有水印,如何去掉啊?

小鱼:我突然想起来,PPT还没写完。

小屌丝:我家楼下刚开一个烧烤店,据说还不错!

小鱼:PPT写不完,可以晚上写,助人为乐让我更快乐。

2、代码实战

在上一篇博文,我们知道了如何给pdf文档添加水印,

而本篇,我们就给pdf去水印

如果不知道如何添加水印,就看这篇:2行Python代码实现给pdf文件添加水印

小屌丝:你这添加完水印,又去除水印,你这是闹哪样??

小鱼:我喜欢,我稀罕,我乐意!!

2.1 去除原理

去除方法:

1、用 PyMuPDF 打开 pdf 文件,将 pdf 的每一页都转换为图片 pixmap,

2、pixmap 有它自己的 RGB,只需要将 pdf 水印中的 RGB 改为(255, 255, 255),并保存图片

3、按照生成的图片,插入到pdf文档中

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

2.2 代码解析

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转换成图片,并去除水印

代码示例:

# -*- coding:utf-8 -*-
# @Time   : 2022-02-23
# @Author : carl_DJ

from PIL import Image
from itertools import product
import fitz

# 去除pdf的水印
def remove_pdfwatermark():
    #打开源pfd文件
    pdf_file = fitz.open("跟小鱼学习去水印.pdf")

    #page_no 设置为0
    page_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

if __name__ == '__main__':
    remove_pdfwatermark()

执行完成,

查看生成图片:

查看图片内容:

3、图片转为pdf

代码示例:

# -*- coding:utf-8 -*-
# @Time   : 2022-02-23
# @Author : carl_DJ

from PIL import Image
from itertools import product
import fitz

''' 图片转为pdf'''
#图片所在的文件夹
pic_dir = 'D:\Project\watemark'

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)
    #将打开后的图片转成单页pdf
    pdfbytes = imgdoc.convertToPDF()
    imgpdf = fitz.open("pdf", pdfbytes)
    #将单页pdf插入到新的pdf文档中
    pdf.insertPDF(imgpdf)
pdf.save("跟小鱼学习去水印_完成.pdf")
pdf.close()

执行代码,

查看生成的pdf文档

2.3 代码整合

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

# -*- coding:utf-8 -*-
# @Time   : 2022-02-23
# @Author : carl_DJ

from PIL import Image
from itertools import product
import fitz

# 去除pdf的水印
def remove_pdfwatermark():
    #打开源pfd文件
    pdf_file = fitz.open("跟小鱼学习去水印.pdf")

    #page_no 设置为0
    page_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 = 'D:\Project\watemark'

	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)
	    #将打开后的图片转成单页pdf
	    pdfbytes = imgdoc.convertToPDF()
	    imgpdf = fitz.open("pdf", pdfbytes)
	    #将单页pdf插入到新的pdf文档中
	    pdf.insertPDF(imgpdf)
	pdf.save("跟小鱼学习去水印_完成.pdf")
	pdf.close()

if __name__ == '__main__':
    remove_pdfwatermark()
    pictopdf()

3、总结

写到这里,今天的分享就差不多快结束了。

需要理解的流程是,

1.pdf文档需要先转换成图片,进行水印去除,

2.再转换成pdf

3.最后插入到新的pdf文档中。

到此这篇关于十行Python3代码实现去除pdf文件水印的文章就介绍到这了,更多相关Python3去除pdf水印内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 2行Python代码实现给pdf文件添加水印

    目录 1. 引言 2.指定水印内容输出到pdf文件 2.1 模块安装 2.2 思路 2.3 代码示例 3.水印内容批量输出到pdf文件 3.1 模块安装 3.2 思路 3.3 代码示例 4.总结 1. 引言 小屌丝:鱼哥,新年快乐! 小鱼:无事不登三宝殿,有啥事,你直说吧… 小屌丝:别说的这么直接,这大过年的… 小鱼:别整没用的,就你那点小心思,我还能不知道. 小屌丝:… 小屌丝:鄙视就鄙视,只要能帮我解决问题,我然你鄙视三连! 小鱼:…还可以这样,那你说吧,啥事? 小屌丝:就是…就是… 小鱼:

  • Python实现给PDF添加水印的方法

    前言 利用 PyPDF2 处理 PDF 文件,相关文档:https://pythonhosted.org/PyPDF2/ 本文针对 仅有 PDF 文件,而无相关 PDF 编辑器的情况下,给 PDF 添加水印. 一.前期准备 安装 PyPDF2 ,命令提示框输入: pip install PyPDF2 新建 watermark.pdf 文件 实际的水印,可以在此文件里修改水印文字的字体和位置. 实现步骤: 新建 watermark.word ,[设计] → \to → [水印][自定义水印] →

  • Python去除PDF水印的实现示例

    今天介绍下用 Python 去除 PDF (图片)的水印.思路很简单,代码也很简洁. 首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面. 这张图片是前几天整理<数据结构和算法>PDF里的一个截图,带着公众号的水印. 从上图可以明显看到,为了不影响阅读正文,水印颜色一般比较浅.因此,我们可以利用颜色差这个特征来去掉水印.即:用 Python 读取图片的颜色,并将浅颜色部分变白. Python 标准库 PIL 可以获取图片的颜色,Python2 是系统自带的,Pyth

  • Python实现批量向PDF文件添加中文水印

    目录 前言 实现步骤 完整代码 前言 可以通过设置批量PDF文件所在的路径及需要添加的水印名称可以实现批量添加PDF水印的效果. 实现思路是这样的,通过在批量PDF文件路径下面生成一个带有水印的PDF模板.最后,将批量文件的每个PDF页面和水印模板进行合并完成批量添加水印的效果. 需要注意的是批量PDF文件必须和PDF模板水印文件的大小尺寸保持一致,这个可以在代码里面调节一下就成了. 实现步骤 首先将需要添加水印的PDF文件准备好放在一个文件夹下面. 在代码中设置好PDF批量文件的路径及水印名称

  • python为图片和PDF去水印详解

    目录 安装模块 获取图片的 RGB 图片去水印 PDF 去水印 图片转为 pdf 总结 网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读.比如下面的图片就是在 pdf 文件上截取出来的. 安装模块 PIL:Python Imaging Library 是 python 上非常强大的图像处理标准库,但是只能支持 python 2.7,于是就有志愿者在 PIL 的基础上创建了支持 python 3的 pillow,并加入了一些新的特性. pip install pillow pymupdf

  • 十行Python3代码实现去除pdf文件水印

    目录 1.引言 2.代码实战 2.1去除原理 2.2代码解析 2.3代码整合 3.总结 1.引言 小屌丝:鱼哥,最近有点不像话了. 小鱼:嗯?? 啥个意思嘛~ 小屌丝:一周了,没分享小知识了. 小鱼:就因为这个?? 小屌丝:那是,我这么爱学习的人. 小鱼:怕是你有什么事情解决不了,想到我了吧? 小屌丝:呵 ~ 笑话 ~ 我 能有…什…么…事情… 小鱼:说吧, 小屌丝:这可是你让我说的,我可没主动要问的! 小鱼:说吧,咋还磨磨唧唧了呢 小屌丝:我在某站下载的pfd文档,有水印,如何去掉啊? 小鱼:

  • python3用PyPDF2解析pdf文件,用正则匹配数据方式

    我就废话不多说了,大家还是看代码吧! import PyPDF2 import re pdf_file = open('xxx.pdf', mode='rb') read_pdf = PyPDF2.PdfFileReader(pdf_file) # 获取pdf文件的所有页数 number_of_pages = read_pdf.getNumPages() # print('total_page: ', number_of_pages) line_list = [] # 循环遍历每一页 for i

  • Python3将jpg转为pdf文件的方法示例

    本文实例讲述了Python3将jpg转为pdf文件的方法.分享给大家供大家参考,具体如下: #coding=utf-8 #!/usr/bin/env python """ convert image to pdf file """ #Author: mrbeann import os import sys import glob import platform from reportlab.lib.pagesizes import letter,

  • 十行Python3代码实现把情书写到图片中

    目录 1.引言 2.Pillow 2.1 Pillow 安装 2.2 Pillow 介绍 2.3 实战 1.引言 小屌丝:鱼哥,你说这就快到圣诞节了,我应该送女神什么礼物呢? 小鱼:你的女神又不缺什么礼物,倒不如送点惊喜? 小屌丝:送什么惊喜呢? 小鱼:不如,送一份情书? 小屌丝:鱼哥,你的意思,让我领着我女神去KTV里面唱歌? 小鱼:我没有那么肤浅,此情书,不是张学友的那首<情书>,也不是吉克隽逸的那首<三行情书>. 小屌丝:那是什么情书呢? 难道要我去复印社打印一份?? 小鱼:

  • C#如何给PDF文件添加水印

    水印种类及功能介绍 PDF水印分为两种:文本水印和图片水印.文本水印一般被用在商业领域,提醒读者该文档是受版权保护的,其他人不能抄袭或者免费使用.除了这个特征,水印还可以用来标记这个文档 的一些基本状态信息,例如是草稿状态还是最终版本?图片水印是美化PDF文件的一个很好的选择,它可以用多彩的.独特的图片来作为PDF文件的背景.那么,怎样用编程的方式给PDF文件 添加水印呢?有很多种实现方法,其中一种最快最容易的办法也许是用第三方软件,例如Spire.PDF.本文会阐述怎样用免费的第三方软件Spi

  • C#给PDF文件添加水印

    本文实例为大家分享了C#添加PDF文件水印的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using iTextSharp.text.html.simpleparser; using iTextSharp.text.pdf; usi

  • iOS实现PDF文件浏览功能

    写了一个小Demo,显示本地PDF格式文件,支持翻页.跳页.缩放. 先看一下效果图: iOS开发,显示PDF格式文件方法有很多: 最简单的应该是UIWebView,可以加载本地或网络PDF文件,支持上下滑动浏览.缩放. 优化一点的是用系统的QLPreviewController加载,实现起来也比较方便,支持上下滑动浏览,左后滑动可多PDF文件切换,同时支持原生的分享打印,QLPreviewController支持的文档格式也比较多,如pdf.doc.docx.xls.xlsx.txt.ppt.m

随机推荐