Python操作pdf文件|pdfpiumbe&PyPDF2

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)

方法和功能:

  1. crop 主要用於裁剪頁面
  2. within_bbox 類似crop,但是如果對象含有超出裁剪邊框(bounding box)部分,則不包含此對象
  3. dedupe_chars 返回具有重複字符的頁面版本
  4. extract_text 將 page 中的字符對象(character object)裝入單個字符串(string)
  5. extract_words 提取單詞,返回一個 list 返回 pdf 文件中字符的屬性
  6. extracr_tables 提取表格中的內容,並轉爲一個list對象
  7. to_image 返回關於 PageImage 類的實例
  8. close 關閉文件

以上就是使用PDFPlumber庫的基本教程。PDFPlumber庫還有其他高級功能,例如提取圖像和鏈接。可以查看官方文檔以瞭解更多信息。

2 PyPDF2庫

PyPDF2是一個純Python庫,用於處理基本的PDF文檔。它允許您合併,拆分,裁剪和旋轉PDF文件。

以下介紹pypdf2的3.0版本的使用。

2.1 安裝PyPDF2庫

在命令行中輸入以下命令以安裝PyPDF2庫:

pip install PyPDF2

2.2 使用

  1. 導入模塊
import PyPDF2 as pdf2
  1. 打開PDF文件

對於打開一個PDF文件,我們需要使用PyPDF2方法打開該文件:

# 讀pdf
pdf_reader = pdf2.PdfReader(pdf_path)

要訪問PDF的頁面數量,請使用:

len(pdf_reader.pages)
  1. 讀取PDF文本內容

要僅僅讀取PDF的文本內容,可以使用以下代碼:

for page in pdf_pages:
    text = page.extract_text()
    print(text)
  1. 寫入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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章