真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中PyPDF2模塊是什么

小編給大家分享一下Python中PyPDF2模塊是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

在垣曲等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,垣曲網(wǎng)站建設(shè)費(fèi)用合理。

對(duì)于PDF文件,常見的需求也就是兩類:

  • 處理文件本身,屬于文件頁面級(jí)操作,如合并/分拆PDF頁面、加/解密、加/去水印;

  • 處理文件內(nèi)容,屬于內(nèi)容級(jí)操作,如提取文字、表格數(shù)據(jù)、圖表等。

目前Python用于處理PDF的模塊,主要有3個(gè):

  • PyPDF2:模塊成熟,最后一次更新在2年前,適合頁面級(jí)操作,文字提取效果較差。

  • PDFMiner:擅長(zhǎng)文字抽取,目前主分支已停止維護(hù),取而代之的是Pdfminer.six

  • Pdfplumber:基于pdfminer.six的文本內(nèi)容抽取工具,使用門檻更低,如支持表格提取。

實(shí)戰(zhàn)中,可以根據(jù)需求的類型選擇模塊。如果是頁面級(jí)的操作,就用PyPDF2。如果需要內(nèi)容抽取,優(yōu)先使用pdfplumber。

對(duì)應(yīng)的模塊安裝:

  • pip install pypdf2

  • pip install pdfminer.six

  • pip install pdfplumber

PyPDF2

PyPDF2的主要能力在頁面級(jí)操作,比如:

  • 獲取PDF文檔基本信息

  • PDF分割及合并

  • PDF的旋轉(zhuǎn)及排序

  • PDF加水印及去水印

  • PDF加密及解密

PyPDF2的核心兩個(gè)類是PdfFileReaderPdfFileWriter,完成PDF文件的讀寫操作。

獲取PDF文檔基本信息

import pathlib from PyPDF2 import PdfFileReader path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/002pdf') f_path = path.joinpath('2020-新冠肺炎疫情對(duì)中國連鎖餐飲行業(yè)的影響調(diào)研報(bào)告-中國連鎖經(jīng)營(yíng)協(xié)會(huì).pdf') with open(f_path, 'rb') as f:    pdf = PdfFileReader(f)    info = pdf.getDocumentInfo()    cnt_page = pdf.getNumPages()    is_encrypt = pdf.getIsEncrypted() print(f''' 作者: {info.author} 創(chuàng)建者: {info.creator} 制作者: {info.producer} 主題: {info.subject} 標(biāo)題: {info.title} 總頁數(shù): {cnt_page} 是否加密: {is_encrypt} ''')

PDF分割及合并

import pathlib from PyPDF2 import PdfFileReader, PdfFileWriter path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/002pdf') f_path = path.joinpath('2020-新冠肺炎疫情對(duì)中國連鎖餐飲行業(yè)的影響調(diào)研報(bào)告-中國連鎖經(jīng)營(yíng)協(xié)會(huì).pdf') out_path = path.joinpath('002pdf_split_merge.pdf') out_path_1 = path.joinpath('002pdf_split_half_front.pdf') out_path_2 = path.joinpath('002pdf_split_half_back.pdf') # 把文件分為兩半 with open(f_path, 'rb') as f, open(out_path_1, 'wb') as f_out1, open(out_path_2, 'wb') as f_out2:    pdf = PdfFileReader(f)    pdf_out1 = PdfFileWriter()    pdf_out2 = PdfFileWriter()    cnt_pages = pdf.getNumPages()    print(f'共 {cnt_pages} 頁')    for i in range(cnt_pages):        if i <= cnt_pages //2:            pdf_out1.addPage(pdf.getPage(i))        else:            pdf_out2.addPage(pdf.getPage(i))    pdf_out1.write(f_out1)    pdf_out2.write(f_out2) # 再把后半個(gè)文件與前半個(gè)文件合并,后半個(gè)文件在前 with open(out_path, 'wb') as f_out:    cnt_f, cnt_b = pdf_out1.getNumPages(), pdf_out2.getNumPages()    pdf_out = PdfFileWriter()    for i in range(cnt_b):        pdf_out.addPage(pdf_out2.getPage(i))    for i in range(cnt_f):        pdf_out.addPage(pdf_out1.getPage(i))    pdf_out.write(f_out)

PDF的旋轉(zhuǎn)及排序

import pathlib from PyPDF2 import PdfFileReader, PdfFileWriter path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/002pdf') f_path = path.joinpath('2020-新冠肺炎疫情對(duì)中國連鎖餐飲行業(yè)的影響調(diào)研報(bào)告-中國連鎖經(jīng)營(yíng)協(xié)會(huì).pdf') out_path = path.joinpath('002pdf_rotate.pdf') with open(f_path, 'rb') as f, open(out_path, 'wb') as f_out:    pdf = PdfFileReader(f)    pdf_out = PdfFileWriter()    page = pdf.getPage(0).rotateClockwise(90)    pdf_out.addPage(page)    # 把第二頁放到前面    pdf_out.addPage(pdf.getPage(2))    page = pdf.getPage(1).rotateCounterClockwise(90)    pdf_out.addPage(page)    pdf_out.write(f_out)

PDF加水印及去水印

加圖片水印,其實(shí)就是在頁面中增加一個(gè)透明背景的圖片,通過頁面的mergePage方法即可完成。

import pathlib from PyPDF2 import PdfFileReader, PdfFileWriter path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/002pdf') f_path = path.joinpath('2020-新冠肺炎疫情對(duì)中國連鎖餐飲行業(yè)的影響調(diào)研報(bào)告-中國連鎖經(jīng)營(yíng)協(xié)會(huì).pdf') wm_path = path.joinpath('watermark.pdf') en_path = path.joinpath('002pdf_with_watermark_en.pdf') out_path = path.joinpath('002pdf_with_watermark.pdf') with open(f_path, 'rb') as f, open(wm_path, 'rb') as f_wm, open(out_path, 'wb') as f_out:    pdf = PdfFileReader(f)    pdf_wm = PdfFileReader(f_wm)    pdf_out = PdfFileWriter()    wm_cn_page = pdf_wm.getPage(0)    wm_en_page = pdf_wm.getPage(1)    cnt_pages = pdf.getNumPages()    for i in range(cnt_pages):        page = pdf.getPage(i)        page.mergePage(wm_cn_page)        pdf_out.addPage(page)    pdf_out.write(f_out)

去水印,就比較復(fù)雜,需要根據(jù)不同情況具體分析。因?yàn)樗】赡苁俏淖帧D片或者各種組合,關(guān)鍵是識(shí)別出特征。

去水印的3個(gè)常見思路參考:

1.找到特征詞后替換,適合英文文檔,但不適用于中文等CJK字符。

2.把PDF頁轉(zhuǎn)成圖片后,用圖像算法去水印,但這樣會(huì)破壞文件原信息結(jié)構(gòu)。

3.根據(jù)水印大小位置特征,找到所有元素后刪除。這是更推薦的方式。

第3種方式效果最好,但如果碰到一些復(fù)雜的文檔水印,就非??简?yàn)?zāi)托摹?/p>

你得一個(gè)個(gè)識(shí)別操作命令,一邊替換一邊檢查效果,直到水印成功去除。

但,未必剩下的所有頁都可以用同樣特征模式來消除,因?yàn)檫@份PDF可能經(jīng)過多人加水印,已經(jīng)包含多種加水印方式。

所以,去水印并沒有一種100%安全有效(不錯(cuò)刪信息)且通用的方法。

加水印、去水印本質(zhì)上是一種攻防策略。

比如一些工具推出去水印功能,一旦公開,加水印方就能識(shí)別并避開它的去除方法。

最后,尊重版權(quán),是每個(gè)人應(yīng)有的態(tài)度。

除了學(xué)習(xí)外,正式使用時(shí),應(yīng)該遵守內(nèi)容創(chuàng)作方的規(guī)則。

PDF加密解密

PDF里的密碼,分為用戶密碼和所有者密碼。

PyPDF2里提供了基本的加密功能,“防君子不防小人”。

如果打開PDF文件后,復(fù)制了新文件,那新文件就不受所有者密碼的約束,可被修改。

import pathlib from PyPDF2 import PdfFileReader, PdfFileWriter path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/002pdf') f_path = path.joinpath('2020-新冠肺炎疫情對(duì)中國連鎖餐飲行業(yè)的影響調(diào)研報(bào)告-中國連鎖經(jīng)營(yíng)協(xié)會(huì).pdf') out_path_encrypt = path.joinpath('002pdf_encrypt.pdf') out_path_decrypt = path.joinpath('002pdf_decrypt.pdf') with open(f_path, 'rb') as f, open(out_path_encrypt, 'wb') as f_out:    pdf = PdfFileReader(f)    pdf_out = PdfFileWriter()    cnt_pages = pdf.getNumPages()    for i in range(cnt_pages):        page = pdf.getPage(i)        pdf_out.addPage(page)    pdf_out.encrypt('123456', owner_pwd='654321')    pdf_out.write(f_out) # 重新讀取加密文件并生成解密文件 with open(out_path_encrypt, 'rb') as f, open(out_path_decrypt, 'wb') as f_out:    pdf = PdfFileReader(f)    if not pdf.isEncrypted:        print('文件未被加密')    else:        success = pdf.decrypt('123456')        # if not success:        pdf_out = PdfFileWriter()        pdf_out.appendPagesFromReader(pdf)        pdf_out.write(f_out)

看完了這篇文章,相信你對(duì)Python中PyPDF2模塊是什么有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)站名稱:Python中PyPDF2模塊是什么
路徑分享:http://weahome.cn/article/ggoiee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部