亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實(shí)現(xiàn)為PDF去除水印的示例代碼

 更新時(shí)間:2022年04月02日 15:50:38   作者:KjPrime  
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)PDF去除水印功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

為什么做出這個(gè)?

就是有時(shí)候從網(wǎng)上下載的資料中的pdf有水印,看著不舒服。

比如說我從網(wǎng)上下載的試卷,然后去打印店打印,打印之后水印看著很不舒服,而去水印wps要會(huì)員,而我是一個(gè)程序員,為什么不做一個(gè)呢,何樂而不為。

雖然最后是做出來的,但是還是有限制。

原理

把pdf轉(zhuǎn)化為圖片,然后將圖片去水印。

圖片去水印,是又條件限制的,必須水印的顏色和pdf中文字的顏色的rgb相差很大,然后把水印的顏色改變成背景顏色。

特色

網(wǎng)上很多和我類似的原理去水印,但是都是先pdf轉(zhuǎn)化為圖片存起來,然后圖片去水印之后,然后把圖片拼接成pdf。

而我就不需要中間步驟,我是直接輸入pdf文件,輸出pdf文件。

成果

安裝依賴

Image

pip install pillow

fitz

pip install PyMuPDF

代碼

程序處理pdf需要的時(shí)間比較久(因?yàn)樘幚淼氖窍袼攸c(diǎn)),可以先用頁(yè)數(shù)少的pdf進(jìn)行測(cè)試之后再去頁(yè)數(shù)比較多的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不夠清晰,可以調(diào)大,調(diào)大,文件大小也會(huì)變大
        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你需要根據(jù)自己的水印的顏色進(jìn)行更改。
                    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("************去水印時(shí)間比較久***********")
    for pdf_path in path_array:
        print(pdf_path, "去水印中...")
        single_pdf_clearwater(pdf_path)
    print("完成")


def folder_pdf_files(folder: str) -> list[str]:  # 一個(gè)文件夾里面有多少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), "個(gè)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("程序運(yùn)行時(shí)間:", round(time_end - time_start, 2), "秒")

想法

雖然最后實(shí)現(xiàn)了,但是有限制。

為了去除保存圖片后取圖片的中間步驟,我查閱了很多的文獻(xiàn)和資料,后面發(fā)現(xiàn)只有我最不想看的英文文檔才找到了問題的答案。我就感覺,比較偏的點(diǎn),只有英文文獻(xiàn)才有。

因?yàn)橄拗?,我在想是不是可以?a href="http://chabaoo.cn/article/243273.htm" target="_blank">python-普通pdf的添加水印的逆向思維進(jìn)行操作,就是把水印圖層直接取出來。
如果處理的pdf文件比較多,并且頁(yè)數(shù)很多,程序運(yùn)行就要很久,我都感覺像深度學(xué)習(xí)了。

到此這篇關(guān)于Python實(shí)現(xiàn)為PDF去除水印的示例代碼的文章就介紹到這了,更多相關(guān)Python PDF去水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論