日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

用Python去除扫描型PDF中的水印

發(fā)布時間:2023/12/13 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Python去除扫描型PDF中的水印 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

內(nèi)容概述

含水印掃描型PDF文件,其中某頁如下圖所示,用Python去除其頁頂及頁底的水印。

處理思路:PDF中的每一頁的水印的相對位置基本相同,將PDF每一頁輸出成圖片,然后進(jìn)行圖片編輯,用白色填充方形覆蓋水印,最后這些處理后的圖片重新合成PDF文件。

該方法缺點:

  • 處理后的得到PDF文件大小比原文件大了不少。
  • 那種還可以提取文字的PDF,用該法處理后PDF文件就再不能提取文字了。
  • 很難處理夾雜在文本中水印。
  • 副作用:

  • 禁止打印PDF變成可打印了。
  • 先前步驟:

  • 安裝poppler軟件,并將其執(zhí)行文件所在文件夾路徑新添至環(huán)境變量Path(針對Windows系統(tǒng))。
  • pip install pdf2image
  • pip install fpdf
  • 放碼過來

    將PDF輸出成圖片文件集

    from pdf2image import convert_from_path from PIL import ImageDraw# 100dpi對應(yīng)文檔的長寬及水印左上右下坐標(biāo) filePath = "a.pdf" dpi = 100 # watermark1 = (290, 47, 536, 66) watermark2 = (283, 1072, 542, 1165) gWidth = 827 gHeight = 1170 ###########dpi2 = 150 # 按需調(diào)整這個參數(shù)<=============== pages = convert_from_path(filePath, dpi2) width, height = pages[0].size# 方便多次調(diào)整,不用次次用系統(tǒng)自帶繪圖軟件獲得坐標(biāo)位置 # 長寬貌似不與dpi成比例關(guān)系 watermark1 = (watermark1[0] * width / gWidth, watermark1[1] * height / gHeight, \ watermark1[2] * width / gWidth, watermark1[3] * height / gHeight)watermark2 = (watermark2[0] * width / gWidth, watermark2[1] * height / gHeight, \ watermark2[2] * width / gWidth, watermark2[3] * height / gHeight)print(watermark1) print(watermark2)num = 0 for page in pages:draw = ImageDraw.Draw(page)# 水印涂白,可用系統(tǒng)自帶繪圖軟件獲得坐標(biāo)位置draw.rectangle(watermark1, fill = 'white')draw.rectangle(watermark2, fill = 'white')outPath = 'out/%d.jpg' % numprint(outPath)page.save(outPath, 'JPEG')num = num + 1

    將處理后的圖片合成PDF文件

    from fpdf import FPDF from PIL import Image import os,redef makePdf(pdfFileName, listPages):cover = Image.open(listPages[0])width, height = cover.sizepdf = FPDF(unit = "pt", format = [width, height])listPages.sort(key = lambda i : int(re.compile(r'(\d+)').search(i).group(1)))for page in listPages:print(page)pdf.add_page()pdf.image(page, 0, 0)pdf.output(pdfFileName, "F")makePdf("result.pdf", ["out/"+imgFileName for imgFileName in os.listdir('out') \if imgFileName.endswith("jpg")])

    參考資料

  • 用Python將多張圖片合并成一PDF文件
  • GitHub - Belval/pdf2image: A python module that wraps the pdftoppm utility to convert PDF to PIL Image object
  • 總結(jié)

    以上是生活随笔為你收集整理的用Python去除扫描型PDF中的水印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。