python使用PyPDF2 和 pdfplumber操作PDF文件
一、第三方庫介紹
Python 操作 PDF 會(huì)用到兩個(gè)庫,分別是: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è)庫都不是 Python 的標(biāo)準(zhǔn)庫,所以在使用之前都需要單獨(dú)安裝,在終端中依次輸入如下命令進(jìn)行安裝:pip install PyPDF2pip install pdfplumber
二、基本使用
1、拆分pdf
拆分的大概思路如下:
讀取 PDF 的整體信息、總頁數(shù)等
按照頁數(shù)每頁拆分為一個(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 文件頁數(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間隔的頁面生成一個(gè)文件,例如step=3,表示0-2頁、2-5頁...為一個(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)
# 獲取文件總頁數(shù)
pageCount = pdf_reader.getNumPages()
# 讀取每一頁的數(shù)據(jù)
for page in range(0, pageCount, step):
pdf_writer = PdfFileWriter()
# 拆分pdf,每 step 頁的拆分成一個(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
比起拆分來,合并的思路更加簡(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()) # 讀取第一頁的文字內(nèi)容 # page = pdf.pages[0] # print(page.extract_text())
4、提取表格內(nèi)容
extract_table():獲取page頁的第一個(gè)表格數(shù)據(jù),表格數(shù)據(jù)為一個(gè)二維列表
extract_tables():獲取page頁的所有表格數(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頁數(shù)據(jù) page = pdf.pages[1] # 獲取第2頁的第一個(gè)表格的內(nèi)容 table = page.extract_table() print(type(table), table) # 獲取第2頁所有表格的內(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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?GUI和游戲開發(fā)從入門到實(shí)踐
GUI是圖形用戶界面的縮寫,圖形化的用戶界面對(duì)使用過計(jì)算機(jī)的人來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Python圖形用戶界面與游戲開發(fā)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Django中的JWT身份驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了Django中的JWT身份驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
使用Python構(gòu)建智能BAT文件生成器的完美解決方案
這篇文章主要為大家詳細(xì)介紹了如何使用 wxPython 構(gòu)建一個(gè)智能的 BAT 文件生成器,它不僅能夠?yàn)?nbsp;Python 腳本生成啟動(dòng)腳本,還提供了完整的文件管理和數(shù)據(jù)庫存儲(chǔ)功能,感興趣的小伙伴可以了解下2025-07-07
django authenticate用戶身份認(rèn)證的項(xiàng)目實(shí)踐
Django的contrib.auth模塊中的authenticate()函數(shù)用于對(duì)用戶的憑據(jù)進(jìn)行身份驗(yàn)證,本文就來介紹一下django authenticate用戶身份認(rèn)證的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
Python模擬實(shí)現(xiàn)全功能貸款計(jì)算器
在個(gè)人理財(cái)中,貸款計(jì)算器是一款非常實(shí)用的工具,本文將教你如何使用Python編寫一個(gè)全功能的貸款計(jì)算器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
python基礎(chǔ)教程之簡(jiǎn)單入門說明(變量和控制語言使用方法)
這篇文章主要介紹了開始學(xué)習(xí)python的第一步需要知道的知識(shí)(變量和控制語言使用方法),需要的朋友可以參考下2014-03-03
Python實(shí)現(xiàn)保證只能運(yùn)行一個(gè)腳本實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)保證只能運(yùn)行一個(gè)腳本實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-06-06
基于Python實(shí)現(xiàn)人機(jī)PK小游戲
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)人機(jī)PK小游戲,簡(jiǎn)單來說,就是隨機(jī)生成玩家和敵人的屬性,同時(shí)互相攻擊,直至一方血量小于零,感興趣的小伙伴可以學(xué)習(xí)一下2023-06-06

