python使用PyPDF2 和 pdfplumber操作PDF文件
一、第三方庫(kù)介紹
Python 操作 PDF 會(huì)用到兩個(gè)庫(kù),分別是:PyPDF2 和 pdfplumber。
PyPDF2 可以更好的讀取、寫入、分割、合并PDF文件;
pdfplumber 可以更好的讀取 PDF 文件中內(nèi)容和提取 PDF 中的表格,主要應(yīng)用于機(jī)器生成的PDF,而非掃描的PDF文檔。
對(duì)應(yīng)的官網(wǎng)分別是:
PyPDF2:https://pythonhosted.org/PyPDF2/
pdfplumber:https://github.com/jsvine/pdfplumber
由于這兩個(gè)庫(kù)都不是 Python 的標(biāo)準(zhǔn)庫(kù),所以在使用之前都需要單獨(dú)安裝,在終端中依次輸入如下命令進(jìn)行安裝:pip install PyPDF2
pip install pdfplumber
二、基本使用
1、拆分pdf
拆分的大概思路如下:
讀取 PDF 的整體信息、總頁(yè)數(shù)等
按照頁(yè)數(shù)每頁(yè)拆分為一個(gè)PDF
將小的文件塊重新保存為新的 PDF 文件
import os.path from PyPDF2 import PdfFileReader, PdfFileWriter pdf_path = r"D:\自動(dòng)化\pdf.pdf" out_dir = r"D:\自動(dòng)化\pdf\拆分" if not os.path.exists(out_dir): os.makedirs(out_dir) # 獲取 PdfFileReader 對(duì)象 pdf_reader = PdfFileReader(pdf_path) # 獲取 pdf 文件頁(yè)數(shù) pageCount = pdf_reader.getNumPages() for page in range(pageCount): pdf_writer = PdfFileWriter() pdf_writer.addPage(pdf_reader.getPage(page)) out_path = out_dir + "\\%s.pdf" % page with open(out_path, "wb") as out: pdf_writer.write(out)
import os from PyPDF2 import PdfFileWriter, PdfFileReader """ 拆分PDF為多個(gè)小的PDF文件, @param filename:拆分后的文件名 @param filepath:文件路徑 @param save_dir:保存小的PDF的文件路徑 @param step: 每step間隔的頁(yè)面生成一個(gè)文件,例如step=3,表示0-2頁(yè)、2-5頁(yè)...為一個(gè)文件 @return: """ def 拆分PDF(file_name, file_path, save_dir, step=3): if not os.path.exists(save_dir): os.mkdir(save_dir) if step < 1: print("輸入的拆分間隔不能小于1") return pdf_reader = PdfFileReader(file_path) # 獲取文件總頁(yè)數(shù) pageCount = pdf_reader.getNumPages() # 讀取每一頁(yè)的數(shù)據(jù) for page in range(0, pageCount, step): pdf_writer = PdfFileWriter() # 拆分pdf,每 step 頁(yè)的拆分成一個(gè)文件 for index in range(page, page + step): if index < pageCount: pdf_writer.addPage(pdf_reader.getPage(index)) # 保存拆分后的小文件 childName = '%s%s.pdf' % (file_name, int(page / step) + 1) save_path = os.path.join(save_dir, childName) print(save_path) with open(save_path, "wb") as out: pdf_writer.write(out) print("文件已成功拆分,保存路徑為:" + save_dir) if __name__ == '__main__': 拆分PDF('拆分PDF', 'D:\自動(dòng)化\pdf\二期第1講.pdf', 'D:\自動(dòng)化\pdf\拆分2', 4)
2、合并pdf
比起拆分來(lái),合并的思路更加簡(jiǎn)單:
確定要合并的 文件順序
循環(huán)追加到一個(gè)文件塊中
保存成一個(gè)新的文件
from PyPDF2 import PdfFileReader, PdfFileWriter import os pdf_dir = r"D:\自動(dòng)化\pdf\拆分" out_path = r"D:\自動(dòng)化\pdf\merge.pdf" pdfList = os.listdir(pdf_dir) pdf_writer = PdfFileWriter() for i in range(len(pdfList)): path = pdf_dir + "\\%s.pdf" % i pdf_reader = PdfFileReader(path) for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page)) with open(out_path, "wb") as out: pdf_writer.write(out)
3、提取文字內(nèi)容
import pdfplumber pdf_path = r"D:\自動(dòng)化\pdf\道德經(jīng).pdf" with pdfplumber.open(pdf_path) as pdf: # 讀取所有內(nèi)容 for page in pdf.pages: print(page.extract_text()) # 讀取第一頁(yè)的文字內(nèi)容 # page = pdf.pages[0] # print(page.extract_text())
4、提取表格內(nèi)容
extract_table():獲取page頁(yè)的第一個(gè)表格數(shù)據(jù),表格數(shù)據(jù)為一個(gè)二維列表
extract_tables():獲取page頁(yè)的所有表格數(shù)據(jù),表格數(shù)據(jù)為一個(gè)三維列表
import pdfplumber pdf_path = r"D:\自動(dòng)化\pdf\道德經(jīng).pdf" with pdfplumber.open(pdf_path) as pdf: # 獲取第2頁(yè)數(shù)據(jù) page = pdf.pages[1] # 獲取第2頁(yè)的第一個(gè)表格的內(nèi)容 table = page.extract_table() print(type(table), table) # 獲取第2頁(yè)所有表格的內(nèi)容 tables = page.extract_tables() print(type(tables), tables)
5、PDF加密
PDF 文件加密需要使用 encrypt 函數(shù),對(duì)應(yīng)的加密代碼也比較簡(jiǎn)單:
from PyPDF2 import PdfFileReader, PdfFileWriter pdf_path = r"D:\自動(dòng)化\pdf\道德經(jīng).pdf" sava_path = r"D:\自動(dòng)化\pdf\加密后.pdf" pdf_reader = PdfFileReader(pdf_path) pdf_writer = PdfFileWriter() for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page)) # 添加密碼 pdf_writer.encrypt("mima") with open(sava_path, "wb") as out: pdf_writer.write(out)
6、PDF解密
PDF 文件加密需要使用 encrypt 函數(shù),解密則是使用decrypt 函數(shù),代碼如下:
from PyPDF2 import PdfFileReader, PdfFileWriter pdf_path = r"D:\自動(dòng)化\pdf\加密后.pdf" sava_path = r"D:\自動(dòng)化\pdf\解密后.pdf" pdf_reader = PdfFileReader(pdf_path) # 利用密碼解密 pdf_reader.decrypt('mima') pdf_writer = PdfFileWriter() for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page)) with open(sava_path, "wb") as out: pdf_writer.write(out)
到此這篇關(guān)于python使用PyPDF2 和 pdfplumber操作PDF文件的文章就介紹到這了,更多相關(guān)PyPDF2 和 pdfplumber操作PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用PyPDF2庫(kù)實(shí)現(xiàn)向PDF文件中插入內(nèi)容
- Python利用PyPDF2庫(kù)實(shí)現(xiàn)輕松提取PDF文本
- Python使用PyPDF2?Pillow庫(kù)來(lái)將PDF文件轉(zhuǎn)圖片
- PyPDF2讀取PDF文件內(nèi)容保存到本地TXT實(shí)例
- 解決pyPdf和pyPdf2在合并pdf時(shí)出現(xiàn)異常的問題
- Python實(shí)現(xiàn)PyPDF2處理PDF文件的方法示例
- Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解
- Python使用pdfplumber庫(kù)高效解析PDF文件
- Python利用pdfplumber庫(kù)提取pdf中表格數(shù)據(jù)
- python用pdfplumber提取pdf表格數(shù)據(jù)并保存到excel文件中
- Python利用pdfplumber實(shí)現(xiàn)讀取PDF寫入Excel
相關(guān)文章
通過pycharm的database設(shè)置進(jìn)行數(shù)據(jù)庫(kù)的可視化方式
這篇文章主要介紹了通過pycharm的database設(shè)置進(jìn)行數(shù)據(jù)庫(kù)的可視化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09在Python中實(shí)現(xiàn)shuffle給列表洗牌
今天小編就為大家分享一篇在Python中實(shí)現(xiàn)shuffle給列表洗牌,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-11-11在scrapy中使用phantomJS實(shí)現(xiàn)異步爬取的方法
今天小編就為大家分享一篇在scrapy中使用phantomJS實(shí)現(xiàn)異步爬取的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-12-12Python?ChineseCalendar包主要類和方法詳解
ChineseCalendar?是一個(gè)?Python?包,用于獲取中國(guó)傳統(tǒng)日歷信息。這個(gè)包提供了中國(guó)農(nóng)歷、二十四節(jié)氣、傳統(tǒng)節(jié)日、黃歷等信息,這篇文章主要介紹了Python?ChineseCalendar包簡(jiǎn)介,需要的朋友可以參考下2023-03-03Python網(wǎng)頁(yè)解析利器BeautifulSoup安裝使用介紹
這篇文章主要介紹了Python網(wǎng)頁(yè)解析利器BeautifulSoup安裝使用介紹,本文用一個(gè)完整示例一步一步安裝了BeautifulSoup的安裝和使用過程,需要的朋友可以參考下2015-03-03Python Pytorch深度學(xué)習(xí)之自動(dòng)微分
今天小編就為大家分享一篇關(guān)于Pytorch自動(dòng)微分的文章,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-10-10Python Django請(qǐng)求和響應(yīng)對(duì)象詳解
這篇文章主要給大家介紹了關(guān)于django的請(qǐng)求和響應(yīng)對(duì)象,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11python?ocr簡(jiǎn)單示例之識(shí)別驗(yàn)證碼
OCR(Optical character recognition,光學(xué)字符識(shí)別)是一種將圖像中的手寫字或者印刷文本轉(zhuǎn)換為機(jī)器編碼文本的技術(shù),下面這篇文章主要給大家介紹了關(guān)于python?ocr簡(jiǎn)單示例之識(shí)別驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下2023-01-01Python實(shí)現(xiàn)全角半角字符互轉(zhuǎn)的方法
大家都知道在自然語(yǔ)言處理過程中,全角、半角的的不一致會(huì)導(dǎo)致信息抽取不一致,因此需要統(tǒng)一。這篇文章通過示例代碼給大家詳細(xì)的介紹了Python實(shí)現(xiàn)全角半角字符互轉(zhuǎn)的方法,有需要的朋友們可以參考借鑒,下面跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11