最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)讀取PDF并提取文本和圖片

 更新時間:2026年04月28日 08:14:19   作者:LSTM97  
在日常工作和學(xué)習(xí)中,我們經(jīng)常會遇到需要從 PDF 文件中批量提取文本或圖片的情況。比如,整理一份掃描版合同中的條款,或者收集一份產(chǎn)品手冊里所有的配圖。 之前處理 PDF 可能會讓人感到頭疼,但有了合適

在日常工作和學(xué)習(xí)中,我們經(jīng)常會遇到需要從 PDF 文件中批量提取文本或圖片的情況。比如,整理一份掃描版合同中的條款,或者收集一份產(chǎn)品手冊里所有的配圖。

之前處理 PDF 可能會讓人感到頭疼,但有了合適的庫,這一切都變得簡單。今天,我們將介紹如何使用 Spire.PDF for Python 這個強(qiáng)大的庫,僅需幾行代碼,就能輕松搞定 PDF 中的文本和圖片提取)。

在開始之前,請確保你已經(jīng)安裝了 Spire.PDF 庫:

pip install Spire.PDF

1. 加載 PDF 文檔

在進(jìn)行任何操作之前,首先需要將 PDF 文件加載到我們的代碼中。Spire.PDF 非常靈活,支持 從文件路徑加載 ,也支持 從數(shù)據(jù)流(Stream)加載 。

方式一:從文件加載

這是最直接的方式,適用于本地磁盤上的固定文件。

from spire.pdf import PdfDocument

# 創(chuàng)建一個 PdfDocument 實例
pdf = PdfDocument()
# 加載本地的 PDF 文檔
pdf.LoadFromFile("sample.pdf")

方式二:從數(shù)據(jù)流加載

如果你的 PDF 數(shù)據(jù)是從網(wǎng)絡(luò)接口接收到的,或者是通過其他方式在內(nèi)存中生成的字節(jié)數(shù)據(jù),這種方式就非常實用。

from spire.pdf import PdfDocument, Stream

# 將文件讀取為字節(jié)數(shù)組(這里演示從文件讀,實際也可以來自網(wǎng)絡(luò))
with open("sample.pdf", "rb") as f:
    byte_data = f.read()

# 創(chuàng)建數(shù)據(jù)流對象
pdfStream = Stream(byte_data)
# 從流中加載 PDF
pdf = PdfDocument(pdfStream)

2. 提取文本

文本提取是處理文檔最常用的功能之一。下面的代碼演示了如何遍歷 PDF 的所有頁面,并將每一頁的文本拼接起來。

主要用到 PdfTextExtractor 和 PdfTextExtractOptions 這兩個輔助類。設(shè)置 IsExtractAllText = True 可以確保提取出頁面上的大部分可見文本。

# 假設(shè) pdf 對象已經(jīng)通過上面的方式加載完成
all_text = ""

# 循環(huán)遍歷每一頁
for pageIndex in range(pdf.Pages.Count):
    # 根據(jù)索引獲取當(dāng)前頁
    page = pdf.Pages.get_Item(pageIndex)

    # 創(chuàng)建文本提取器
    text_extractor = PdfTextExtractor(page)

    # 配置提取選項
    options = PdfTextExtractOptions()
    options.IsExtractAllText = True
    options.IsSimpleExtraction = True

    # 執(zhí)行提取并累加
    all_text += text_extractor.ExtractText(options)

# 打印結(jié)果
print(all_text)

3. 提取圖片

很多時候,PDF 里的關(guān)鍵信息其實藏在插圖或圖表里。Spire.PDF 同樣為我們準(zhǔn)備了非常便捷的圖片提取方案。

通過 PdfImageHelper 幫助類,我們可以直接獲取頁面上的圖片信息,然后一鍵保存為圖片文件(如 .png 格式)。

# 獲取第一頁(索引為0)
page = pdf.Pages.get_Item(0)

# 創(chuàng)建圖片輔助對象
image_helper = PdfImageHelper()
# 獲取該頁面上的所有圖片信息
images_info = image_helper.GetImagesInfo(page)

# 遍歷并保存每一張圖片
for i in range(len(images_info)):
    # 保存為 PNG 格式
    images_info[i].Image.Save(f"output/Images/image_{i}.png")

print(f"成功提取 {len(images_info)} 張圖片")

注意 :如果是掃描件(圖片型 PDF),提取出來的其實是一整張掃描圖;如果是電子文檔生成的 PDF,則能精準(zhǔn)提取出嵌入的獨(dú)立圖標(biāo)或照片。

4. 進(jìn)階提示

雖然上述代碼已經(jīng)覆蓋了基礎(chǔ)需求,但在實際應(yīng)用中還有幾點值得注意:

  1. 分頁處理 :示例中為了演示,提取了所有文本。如果你想按頁處理,只需在循環(huán)中控制 pageIndex 即可。
  2. 中文支持 :該庫對中文支持良好,提取中文 PDF 時只要保持編碼環(huán)境為 UTF-8 即可。
  3. 免費(fèi)版限制 :如果你使用的是免費(fèi)版的 Spire.PDF,請注意它通常對處理的頁數(shù)有限制(例如僅支持前 10 頁)。如果需要處理頁數(shù)較多的文檔,可能需要評估商業(yè)版。

5.方法補(bǔ)充

提取 PDF 中的文本和圖片,關(guān)鍵在于根據(jù)文檔類型和需求選擇合適的庫。如果追求通用與平衡PyMuPDF (fitz) 是首選:它速度極快,能同時完美提取文本和圖片,且支持對掃描版 PDF 進(jìn)行光學(xué)字符識別 (OCR)。

主流 Python PDF 提取工具對比

庫名核心特長處理速度推薦指數(shù)最佳適用場景
PyMuPDF (fitz)全能、高速、穩(wěn)定極快★★★★★大多數(shù)通用場景,尤其是需要同時提取文本和圖片時。
pdfplumber表格提取精準(zhǔn)、API 友好較慢★★★★☆處理需要精確提取復(fù)雜表格的金融、數(shù)據(jù)類報告。
pdf-oxide極致性能最快★★★★☆性能瓶頸項目、大規(guī)模批量處理;純文本提取極快。
pypdf輕量、功能基礎(chǔ)一般★★★☆☆僅需快速提取純文本或合并、拆分 PDF 等操作。
pdfminer.six布局分析準(zhǔn)確一般★★☆☆☆需要深入了解頁面布局坐標(biāo),且有能力二次開發(fā)的場景。

如果你的 PDF 是掃描件(由圖片組成),PyMuPDF 仍是首選,因為它集成了 OCR 功能。對于純文本提取速度有極致要求,可以嘗試新的高性能庫 pdf-oxide。

這里用最小化代碼來演示最核心的三個庫。

1. PyMuPDF (fitz) - 全能首選

PyMuPDF 是處理 PDF 的瑞士軍刀,以其卓越的性能和對文本、圖片完美支持而聞名。

安裝

pip install PyMuPDF

提取文本和圖片的完整示例

下面的代碼展示了如何打開一個 PDF 文件,遍歷每一頁,提取其中的所有文本,并將頁面上的所有圖片保存下來。

import fitz  # PyMuPDF 的導(dǎo)入名
def extract_text_and_images(pdf_path):
    """從PDF中提取文本并保存所有圖片"""
    doc = fitz.open(pdf_path)
    full_text = ""
    for page_num in range(len(doc)):
        page = doc[page_num]
        # 1. 提取當(dāng)前頁的文本
        page_text = page.get_text()
        full_text += page_text
        # 2. 提取當(dāng)前頁的圖片
        image_list = page.get_images(full=True)
        for img_index, img in enumerate(image_list):
            xref = img[0]  # 圖片的引用ID
            base_image = doc.extract_image(xref)
            image_bytes = base_image["image"]
            image_ext = base_image["ext"]  # 圖片擴(kuò)展名,如 'png', 'jpeg'
            with open(f"image_page{page_num+1}_{img_index}.{image_ext}", "wb") as img_file:
                img_file.write(image_bytes)
    doc.close()
    return full_text
# 使用示例
text_content = extract_text_and_images("your_document.pdf")
print(text_content[:500]) # 打印前500個字符

2. pdfplumber - 表格提取的利器

當(dāng)你的 PDF 包含表格時,pdfplumber 的 extract_table() 方法非常強(qiáng)大,可以智能解析并提取表格結(jié)構(gòu)。

安裝

pip install pdfplumber

提取表格并打印

import pdfplumber
with pdfplumber.open("table_file.pdf") as pdf:
    first_page = pdf.pages[0]
    # 嘗試自動識別并提取頁面上的第一個表格
    table = first_page.extract_table()
    if table:
        for row in table:
            print(row)   # 打印表格的每一行

3. pypdf - 簡單文本提取

如果你只需要提取純文本,不關(guān)心圖片和格式,pypdf 是一個輕量級的選擇。

安裝

pip install pypdf

基礎(chǔ)文本提取

from pypdf import PdfReader
reader = PdfReader("example.pdf")
text = ""
for page in reader.pages:
    text += page.extract_text()
print(text)

進(jìn)階技巧:處理掃描版 PDF(OCR)

如果 PDF 是掃描件或圖片型 PDF(無法直接選中文字),PyMuPDF 內(nèi)部集成了對 Tesseract 的支持。

import pymupdf
doc = pymupdf.open("scanned.pdf")
for page in doc:
    # 獲取 OCR 文本頁,如果已有文本層,常規(guī)方法也能拿到
    tp = page.get_textpage_ocr()
    text = page.get_text(textpage=tp)
    print(text)

6.總結(jié)

通過 Spire.PDF for Python,你會發(fā)現(xiàn)處理 PDF 文件變得如此簡單。無論是讀取文件、逐頁分析文字,還是把珍貴的插圖保存下來,只需要短短的十幾行代碼就能搞定。這大大提升了文檔處理的效率,讓你能專注于下一步的數(shù)據(jù)分析或業(yè)務(wù)邏輯。

現(xiàn)在就去試試吧,用代碼解放你的雙手!

到此這篇關(guān)于Python實現(xiàn)讀取PDF并提取文本和圖片的文章就介紹到這了,更多相關(guān)Python提取PDF文本和圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Python中range與Numpy中arange的比較

    淺談Python中range與Numpy中arange的比較

    這篇文章主要介紹了淺談Python中range與Numpy中arange的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 一文詳解NumPy分割與搜索數(shù)組

    一文詳解NumPy分割與搜索數(shù)組

    NumPy 提供了 np.array_split() 函數(shù)來分割數(shù)組,將一個數(shù)組拆分成多個較小的子數(shù)組和提供了多種方法來搜索數(shù)組中的元素,并返回匹配項的索引,本文將給大家詳細(xì)介紹NumPy分割與搜索數(shù)組,需要的朋友可以參考下
    2024-05-05
  • python實現(xiàn)感知機(jī)線性分類模型示例代碼

    python實現(xiàn)感知機(jī)線性分類模型示例代碼

    這篇文章主要給大家介紹了關(guān)于python實現(xiàn)感知機(jī)線性分類模型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 簡單了解python裝飾器原理及使用方法

    簡單了解python裝飾器原理及使用方法

    這篇文章主要介紹了簡單了解python裝飾器原理及使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • python嵌套字典比較值與取值的實現(xiàn)示例

    python嵌套字典比較值與取值的實現(xiàn)示例

    這篇文章主要給大家介紹了關(guān)于python嵌套字典比較值與取值的實現(xiàn)方法,詳細(xì)介紹了python字典嵌套字典的情況下獲取某個key的value的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-11-11
  • python如何用columns參數(shù)獲取DataFrame各列的表頭名

    python如何用columns參數(shù)獲取DataFrame各列的表頭名

    這篇文章主要介紹了python如何用columns參數(shù)獲取DataFrame各列的表頭名問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Python環(huán)境搭建以及Python與PyCharm安裝詳細(xì)圖文教程

    Python環(huán)境搭建以及Python與PyCharm安裝詳細(xì)圖文教程

    PyCharm是一種PythonIDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,這篇文章主要給大家介紹了關(guān)于Python環(huán)境搭建以及Python與PyCharm安裝的詳細(xì)圖文教程,需要的朋友可以參考下
    2024-03-03
  • python處理文本文件并生成指定格式的文件

    python處理文本文件并生成指定格式的文件

    本節(jié)主要介紹了python如何處理文本文件并生成指定格式的文件,需要的朋友可以參考下
    2014-07-07
  • python 成功引入包但無法正常調(diào)用的解決

    python 成功引入包但無法正常調(diào)用的解決

    這篇文章主要介紹了python 成功引入包但無法正常調(diào)用的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python中往列表中插入字典時,數(shù)據(jù)重復(fù)問題

    Python中往列表中插入字典時,數(shù)據(jù)重復(fù)問題

    這篇文章主要介紹了Python中往列表中插入字典時,數(shù)據(jù)重復(fù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論

繁峙县| 尼玛县| 康马县| 泽库县| 内黄县| 沙湾县| 常宁市| 新民市| 绵竹市| 靖宇县| 梁平县| 莱芜市| 江西省| 利津县| 克东县| 云林县| 万安县| 永修县| 舒兰市| 两当县| 苍山县| 临漳县| 东乡县| 平凉市| 湾仔区| 于都县| 墨江| 建宁县| 察隅县| 井研县| 平舆县| 蒙自县| 虎林市| 凤阳县| 建瓯市| 波密县| 永平县| 平昌县| 阿坝县| 丹棱县| 九江县|