Python操作pdf文件
1 pdfpiumber庫
pdfpiumber
是一個免費、開源的Python庫,用於提取PDF文件中的文本和表格數據。它包括一個PDF解析器,可以找到和提取PDF文檔中的文本和表格數據。
1.1 安裝pdfplumber庫
在命令行中輸入執行
pip install pdfplumber
1.2 簡單使用
import pdfplumber
# pdf文件
pdf_path = './data/1.pdf'
with pdfplumber.open(pdf_path) as pdf:
# 查看所有的頁
print(pdf.pages)
# 遍歷每一頁pdf page
for page in pdf.pages:
# 提取文字
text = page.extract_text()
# 提取表格內容
tabel = page.extract_table()
# 獲取pdf頁面的大小
bbbox = page.bbox
print(text)
print(tabel)
print(bbbox)
方法和功能:
- crop 主要用於裁剪頁面
- within_bbox 類似crop,但是如果對象含有超出裁剪邊框(bounding box)部分,則不包含此對象
- dedupe_chars 返回具有重複字符的頁面版本
- extract_text 將 page 中的字符對象(character object)裝入單個字符串(string)
- extract_words 提取單詞,返回一個 list 返回 pdf 文件中字符的屬性
- extracr_tables 提取表格中的內容,並轉爲一個list對象
- to_image 返回關於 PageImage 類的實例
- close 關閉文件
以上就是使用PDFPlumber庫的基本教程。PDFPlumber庫還有其他高級功能,例如提取圖像和鏈接。可以查看官方文檔以瞭解更多信息。
2 PyPDF2庫
PyPDF2是一個純Python庫,用於處理基本的PDF文檔。它允許您合併,拆分,裁剪和旋轉PDF文件。
以下介紹pypdf2的3.0版本的使用。
2.1 安裝PyPDF2庫
在命令行中輸入以下命令以安裝PyPDF2庫:
pip install PyPDF2
2.2 使用
- 導入模塊
import PyPDF2 as pdf2
- 打開PDF文件
對於打開一個PDF文件,我們需要使用PyPDF2方法打開該文件:
# 讀pdf
pdf_reader = pdf2.PdfReader(pdf_path)
要訪問PDF的頁面數量,請使用:
len(pdf_reader.pages)
- 讀取PDF文本內容
要僅僅讀取PDF的文本內容,可以使用以下代碼:
for page in pdf_pages:
text = page.extract_text()
print(text)
- 寫入PDF文件
使用以下代碼打開一個新的PDF文件:
# pdf編寫器
pdf_write = pdf2.PdfWriter()
可以寫入文本和圖像,使用以下代碼:
# 添加頁
pdf_writer.addPage(page)
我們可以通過 PdfWriter
來創建一個新的PDF,將文本和圖像添加到新的PDF中:
new_file = open('new_file_name.pdf', 'wb')
pdf_writer.write(new_file)
new_file.close()
以上是使用PyPDF2庫的基本講解。使用PyPDF2,你可以在Python代碼中處理PDF文件。 PyPDF2也有一些高級功能,例如將PDF拆分爲多個文件,添加密碼保護等。
2.3 代碼案例
2.3.1 拆分pdf
import PyPDF2 as pdf2
pdf_path = './data/企業註冊登記表.pdf'
# 1 讀pdf
pdf_reader = pdf2.PdfReader(pdf_path)
# 2 獲取所有頁
pdf_pages = pdf_reader.pages
# 3 獲取每一頁的pdf文本信息
for page in pdf_pages:
# 提取文本
text = page.extract_text()
print(text)
# 4 拆分pdf 每一頁寫入一個pdf中
for i, page in enumerate(pdf_pages):
# pdf編寫器
pdf_write = pdf2.PdfWriter()
# 添加頁 pdf_write.add_page(page)
pdf_write.add_page(pdf_reader.pages[i])
with open(f'./{i + 1}.pdf', 'wb') as f:
# 寫入文件
pdf_write.write(f)
2.3 2 合併pdf
import pathlib
import PyPDF2 as pdf2
pdf_files = pathlib.Path('./data').rglob('*.pdf')
pdf_merger = pdf2.PdfMerger()
for pdf in pdf_files:
# 下面兩行代碼效果一樣
pdf_merger.append(pdf)
# pdf_merger.append(pdf2.PdfReader(pdf))
with open('./合併.pdf', 'wb') as f:
pdf_merger.write(f)
PdfMerger.append方法:
@deprecation_bookmark(bookmark="outline_item", import_bookmarks="import_outline")
def append(
self,
fileobj: Union[StrByteType, PdfReader, Path],
outline_item: Optional[str] = None,
pages: Union[
None, PageRange, Tuple[int, int], Tuple[int, int, int], List[int]
] = None,
import_outline: bool = True,
) -> None:
所以使用PdfMerger中的append方法時,可以直接傳入pdf文件的路徑,二進制內容和pdf讀取器(StrByteType, PdfReader, Path)