python去除pdf水印

项目文件夹结构

D:.
│  remove_pdfwatermark.py
│
└─PDFimages

python代码

from itertools import product
import fitz
import os

# 该函数用于去除pdf的水印
# 输入:待去除图片的pdf文件
# 输出:去除水印后的图片
def remove_pdfwatermark():

    # 在项目根文件夹下打开源pdf文件
    pdf_file = fitz.open("./待去除水印的pdf文件.pdf")

    page_no = 0
    for page in pdf_file:
        pix = page.get_pixmap()

        for pos in product(range(pix.width), range(pix.height)):
            if sum(pix.pixel(pos[0], pos[1])) >= 615:  # 将这里的615替换成要去除的水印rgb值
                pix.set_pixel(pos[0], pos[1], (255, 255, 255))
        # 将去除水印后的图片保存到根文件夹下的PDFimages文件夹中,并以页码命名
        pix.pil_save(f"./PDFimages/{page_no}.png", dpi=(30000, 30000))
        print(f"第 {page_no} 页去除完成")

        page_no += 1


# 该函数用于将去除好水印的图片转换为pdf文件
# 输入:当前文件夹下的图片
# 输出:去除水印后的pdf
def pictopdf():

    # 设置路径为去除水印后的图片保存路径
    pic_dir = "./PDFimages"

    pdf = fitz.open()
    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)
        pdfbytes = imgdoc.convertToPDF()
        imgpdf = fitz.open("pdf", pdfbytes)
        pdf.insertPDF(imgpdf)
    pdf.save("去除水印后的pdf文件.pdf")  # 保存的pdf名
    pdf.close()


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

安装依赖

pip install PyMuPDF
pip install pillow

参考资料

https://blog.csdn.net/wuyoudeyuer/article/details/123084385

https://cloud.tencent.com/developer/article/1524704

https://blog.csdn.net/weixin_44037416/article/details/96842058

注意事项

该代码的原理是将pdf转换为图片,然后在图片上滤除水印的像素,最后将图片合并为pdf。所以最后得到的是图片。

因此如果你最后想得到的是文字版的pdf,请参考如下链接来安装pdf编辑器

https://www.cnblogs.com/tiansz/p/16332954.html

posted @ 2022-05-31 20:06  tiansz  阅读(850)  评论(0编辑  收藏  举报