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

Python利用Spire.PDF for Python庫(kù)抽取PDF文檔文本

 更新時(shí)間:2026年02月06日 09:55:49   作者:用戶835629078051  
在當(dāng)今數(shù)字化的世界中,PDF無疑是最普遍的文檔格式之一,無論是報(bào)告、合同、發(fā)票還是學(xué)術(shù)論文,PDF都承載著海量的信息,本文將深入探討如何利用Spire.PDF for Python庫(kù),高效、準(zhǔn)確地從PDF文檔中提取文本,需要的朋友可以參考下

在當(dāng)今數(shù)字化的世界中,PDF(Portable Document Format)無疑是最普遍的文檔格式之一。無論是報(bào)告、合同、發(fā)票還是學(xué)術(shù)論文,PDF都承載著海量的信息。然而,當(dāng)我們需要從這些PDF文檔中提取文本進(jìn)行數(shù)據(jù)分析、自動(dòng)化處理或信息檢索時(shí),手動(dòng)復(fù)制粘貼無疑是一項(xiàng)繁瑣且效率低下的任務(wù)。

幸運(yùn)的是,Python憑借其強(qiáng)大的生態(tài)系統(tǒng)和豐富的庫(kù),為我們提供了優(yōu)雅的解決方案。本文將深入探討如何利用Spire.PDF for Python庫(kù),高效、準(zhǔn)確地從PDF文檔中提取文本,從而解放您的雙手,提升數(shù)據(jù)處理的自動(dòng)化水平。

為什么選擇Python進(jìn)行PDF文本提???

Python在數(shù)據(jù)處理和自動(dòng)化領(lǐng)域享有盛譽(yù),其優(yōu)勢(shì)在于:

  • 生態(tài)系統(tǒng)豐富: 擁有眾多處理各種數(shù)據(jù)格式的庫(kù),包括強(qiáng)大的PDF處理工具。
  • 易學(xué)易用: 語法簡(jiǎn)潔清晰,上手快,即使是初學(xué)者也能快速編寫腳本。
  • 自動(dòng)化能力強(qiáng): 可以輕松集成到自動(dòng)化工作流中,實(shí)現(xiàn)批量處理。

相比于傳統(tǒng)的手動(dòng)提取,Python腳本能夠以極高的速度和一致性完成任務(wù),尤其是在面對(duì)大量PDF文件時(shí),其效率優(yōu)勢(shì)更為顯著。

認(rèn)識(shí)Spire.PDF for Python庫(kù)

Spire.PDF for Python是一個(gè)功能強(qiáng)大且專業(yè)的Python庫(kù),專為PDF文檔的創(chuàng)建、編輯、轉(zhuǎn)換和解析而設(shè)計(jì)。在文本提取方面,它展現(xiàn)出以下顯著優(yōu)勢(shì):

  • 高精度文本提?。?/strong> 能夠準(zhǔn)確識(shí)別并提取PDF中的文本內(nèi)容,包括復(fù)雜的布局和字體。
  • 支持多種PDF類型: 無論是原生PDF還是包含掃描圖像的PDF(通過內(nèi)置的OCR功能),它都能有效處理。
  • 靈活的API調(diào)用: 提供了直觀且易于使用的API接口,方便開發(fā)者進(jìn)行各種操作。
  • 處理復(fù)雜布局: 針對(duì)多列、表格、圖文混排等復(fù)雜布局的PDF,也能較好地保持文本的邏輯順序。
  • 多語言支持: 能夠處理包含多種語言的文本。

安裝指南

在開始之前,請(qǐng)確保您已經(jīng)安裝了Spire.PDF for Python。如果尚未安裝,可以通過pip命令輕松完成:

pip install Spire.Pdf

基礎(chǔ)文本提?。簭腜DF文檔中獲取文本

提取整個(gè)PDF文檔的文本

最常見的需求是提取PDF文檔中的所有文本。Spire.PDF for Python提供了簡(jiǎn)潔的方法來實(shí)現(xiàn)這一點(diǎn)。

from spire.pdf import *
from spire.pdf.common import *

def extract_full_text(pdf_path, output_txt_path):
    """
    從PDF文檔中提取所有文本并保存到TXT文件。
    """
    # 創(chuàng)建PdfDocument對(duì)象
    doc = PdfDocument()
    
    # 加載PDF文件
    doc.LoadFromFile(pdf_path)
    
    # 用于存儲(chǔ)所有頁(yè)面的文本
    full_text = ""
    
    # 遍歷PDF文檔中的每一頁(yè)
    for i in range(doc.Pages.Count):
        page = doc.Pages.get_Item(i)
        
        # 創(chuàng)建PdfTextExtractor對(duì)象
        text_extractor = PdfTextExtractor(page)
        
        # 提取當(dāng)前頁(yè)面的文本
        # PdfTextExtractOptions可以用于配置提取行為,這里使用默認(rèn)設(shè)置
        page_text = text_extractor.ExtractText(PdfTextExtractOptions())
        full_text += page_text + "\n" # 添加換行符以分隔頁(yè)面內(nèi)容
        
    # 將提取的文本保存到文件
    with open(output_txt_path, "w", encoding="utf-8") as f:
        f.write(full_text)
        
    # 關(guān)閉文檔
    doc.Close()
    print(f"文本已成功從 {pdf_path} 提取并保存到 {output_txt_path}")

# 示例用法
pdf_file = "sample.pdf" # 替換為您的PDF文件路徑
output_file = "sample_full_text.txt"
# 假設(shè)您有一個(gè)名為sample.pdf的文件
# extract_full_text(pdf_file, output_file)

提取結(jié)果示例:

代碼解釋:

  1. PdfDocument():實(shí)例化一個(gè)PDF文檔對(duì)象。
  2. doc.LoadFromFile(pdf_path):加載指定的PDF文件。
  3. doc.Pages.Count:獲取PDF文檔的頁(yè)數(shù)。
  4. doc.Pages.get_Item(i):通過索引獲取特定頁(yè)面。
  5. PdfTextExtractor(page):為當(dāng)前頁(yè)面創(chuàng)建一個(gè)文本提取器。
  6. text_extractor.ExtractText(PdfTextExtractOptions()):執(zhí)行文本提取操作。PdfTextExtractOptions()可以用來控制提取行為,例如是否提取隱藏文本、文本提取方式等。

提取特定頁(yè)面的文本

有時(shí),我們只需要從PDF文檔的特定頁(yè)面中提取信息。Spire.PDF for Python同樣支持這一功能。

from spire.pdf import *
from spire.pdf.common import *

def extract_page_text(pdf_path, page_number, output_txt_path):
    """
    從PDF文檔的指定頁(yè)面提取文本并保存到TXT文件。
    """
    if page_number < 1:
        print("頁(yè)碼必須大于或等于1。")
        return

    doc = PdfDocument()
    doc.LoadFromFile(pdf_path)

    if page_number > doc.Pages.Count:
        print(f"頁(yè)碼 {page_number} 超出文檔總頁(yè)數(shù) {doc.Pages.Count}。")
        doc.Close()
        return

    # PDF頁(yè)碼是基于0的索引,所以需要減1
    page = doc.Pages.get_Item(page_number - 1) 
    
    text_extractor = PdfTextExtractor(page)
    page_text = text_extractor.ExtractText(PdfTextExtractOptions())
    
    with open(output_txt_path, "w", encoding="utf-8") as f:
        f.write(page_text)
        
    doc.Close()
    print(f"第 {page_number} 頁(yè)的文本已成功從 {pdf_path} 提取并保存到 {output_txt_path}")

# 示例用法
extract_page_text(pdf_file, 2, "sample_page_2_text.txt") # 提取第2頁(yè)文本

進(jìn)階應(yīng)用:結(jié)構(gòu)化與區(qū)域文本提取

除了全文和單頁(yè)提取,Spire.PDF for Python還提供了更精細(xì)的控制,例如提取特定區(qū)域的文本,這對(duì)于從復(fù)雜文檔中獲取結(jié)構(gòu)化數(shù)據(jù)尤為有用。

提取PDF特定區(qū)域的文本

在許多場(chǎng)景下,我們可能只關(guān)心頁(yè)面上的某個(gè)特定區(qū)域(例如,發(fā)票上的總金額、報(bào)告中的摘要部分)。Spire.PDF for Python允許我們通過定義一個(gè)矩形區(qū)域來精確提取文本。

from spire.pdf import *
from spire.pdf.common import *


def extract_region_text(pdf_path, page_number, x, y, width, height, output_txt_path):
    """
    從PDF文檔的指定頁(yè)面的特定區(qū)域提取文本。
    坐標(biāo) (x, y) 為區(qū)域左上角,width 和 height 定義區(qū)域大小。
    """
    doc = PdfDocument()
    doc.LoadFromFile(pdf_path)

    if page_number < 1 or page_number > doc.Pages.Count:
        print(f"無效頁(yè)碼 {page_number}。")
        doc.Close()
        return

    page = doc.Pages.get_Item(page_number - 1)

    # 定義提取區(qū)域 (RectangleF)
    # 這里的坐標(biāo)系統(tǒng)通常以點(diǎn)為單位,原點(diǎn)在頁(yè)面左下角或左上角,
    # 具體的原點(diǎn)位置和單位可能需要根據(jù)實(shí)際PDF和庫(kù)的實(shí)現(xiàn)進(jìn)行調(diào)整。
    # Spire.PDF通常使用左上角為原點(diǎn),單位為點(diǎn)。
    extract_area = RectangleF.FromLTRB(x, y, x + width, y + height)

    text_extractor = PdfTextExtractor(page)
    options = PdfTextExtractOptions()
    options.ExtractArea = extract_area  # 設(shè)置提取區(qū)域

    region_text = text_extractor.ExtractText(options)

    with open(output_txt_path, "w", encoding="utf-8") as f:
        f.write(region_text)

    doc.Close()
    print(f"從 {pdf_path} 第 {page_number} 頁(yè)的指定區(qū)域提取文本并保存到 {output_txt_path}")

# 示例用法:假設(shè)我們想從第1頁(yè)的 (100, 100) 位置開始,提取一個(gè) 200x50 的區(qū)域
pdf_file = "sample.pdf"
extract_region_text(pdf_file, 1, 20, 200, 200, 80, "sample_region_text.txt")

提取結(jié)果示例:

提示: 確定精確的x, y, width, height值可能需要一些嘗試,或者使用PDF閱讀器(如Adobe Acrobat)的測(cè)量工具來輔助定位。

處理表格數(shù)據(jù)提取

表格是PDF文檔中常見的結(jié)構(gòu)化數(shù)據(jù)形式。Spire.PDF for Python提供了識(shí)別和提取PDF中表格數(shù)據(jù)的功能,這對(duì)于自動(dòng)化數(shù)據(jù)錄入和分析至關(guān)重要。

from spire.pdf import *
from spire.pdf.common import *
import csv
import os

def extract_tables_from_pdf(pdf_path, output_dir):
    """
    從PDF文檔中提取所有表格數(shù)據(jù),并分別保存為CSV文件。
    每個(gè)表格對(duì)應(yīng)一個(gè)CSV文件。
    """
    doc = PdfDocument()
    doc.LoadFromFile(pdf_path)

    # 如果輸出目錄不存在,則創(chuàng)建
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    table_count = 0

    for i in range(doc.Pages.Count):

        # 創(chuàng)建 PdfTableExtractor 對(duì)象
        table_extractor = PdfTableExtractor(doc)

        # 查找頁(yè)面中的表格(True 表示自動(dòng)檢測(cè))
        tables = table_extractor.ExtractTable(i)

        if tables:
            print(f"在第 {i + 1} 頁(yè)找到 {len(tables)} 個(gè)表格。")

            for table_index, table in enumerate(tables):
                table_count += 1

                # 構(gòu)造 CSV 文件名
                csv_file_name = f"Page_{i + 1}_Table_{table_index + 1}.csv"
                csv_file_path = os.path.join(output_dir, csv_file_name)

                # 寫入 CSV 文件
                with open(csv_file_path, mode="w", newline="", encoding="utf-8-sig") as csv_file:
                    writer = csv.writer(csv_file)

                    for row_index in range(table.GetRowCount()):
                        row_data = []
                        for column_index in range(table.GetColumnCount()):
                            cell_text = table.GetText(row_index, column_index)
                            row_data.append(cell_text)
                        writer.writerow(row_data)

                print(f"表格已保存:{csv_file_path}")

    doc.Close()

    if table_count == 0:
        print(f"未在 {pdf_path} 中找到任何表格。")
    else:
        print(f"共提取并保存了 {table_count} 個(gè)表格。")

# 示例用法
extract_tables_from_pdf("sample.pdf", "output_csv")

提取結(jié)果示例:

代碼解釋:

  1. PdfTableExtractor(doc):創(chuàng)建表格提取器。
  2. table_extractor.ExtractTable(page_index):嘗試自動(dòng)檢測(cè)并提取指定頁(yè)面中的表格。
  3. table.GetRowCount()table.GetColumnCount():獲取表格的行數(shù)和列數(shù)。
  4. table.GetText(row_index, column_index):獲取特定單元格的文本內(nèi)容。
  5. 我們使用pandas庫(kù)將提取到的表格數(shù)據(jù)轉(zhuǎn)換為DataFrame,并保存到Excel文件,這是一種常見的結(jié)構(gòu)化數(shù)據(jù)處理方式。

常見挑戰(zhàn)與Spire.PDF for Python的應(yīng)對(duì)

PDF文本提取并非總是一帆風(fēng)順,尤其是在面對(duì)復(fù)雜或質(zhì)量不佳的PDF文件時(shí)。

  • 掃描件PDF的文本提取 (OCR功能): 傳統(tǒng)的文本提取庫(kù)對(duì)掃描件PDF無能為力,因?yàn)樗鼈儽举|(zhì)上是圖像。Spire.PDF for Python內(nèi)置了OCR(光學(xué)字符識(shí)別)功能,能夠識(shí)別圖像中的文字,從而實(shí)現(xiàn)掃描件PDF的文本提取。在PdfTextExtractOptions中配置OCR相關(guān)參數(shù)即可啟用。
  • 多語言文本處理: Spire.PDF for Python支持多種語言的文本提取,這對(duì)于處理國(guó)際化文檔至關(guān)重要。其內(nèi)部機(jī)制能夠識(shí)別不同的字符編碼和字體。
  • 布局混亂與非標(biāo)準(zhǔn)PDF: 對(duì)于布局異常或不符合PDF規(guī)范的文檔,文本提取可能會(huì)遇到挑戰(zhàn)。Spire.PDF for Python通過其強(qiáng)大的解析引擎,盡可能地還原文本的邏輯結(jié)構(gòu),但在極端情況下,可能需要額外的后處理來完善提取結(jié)果。
  • 異常處理和錯(cuò)誤管理: 在實(shí)際應(yīng)用中,文件損壞、權(quán)限問題等都可能導(dǎo)致提取失敗。建議在代碼中加入try-except塊來捕獲和處理這些異常,提高程序的健壯性。

總結(jié)

Spire.PDF for Python為Python開發(fā)者提供了一套全面而強(qiáng)大的工具集,用于高效、準(zhǔn)確地從PDF文檔中提取文本。無論是簡(jiǎn)單的全文提取,還是復(fù)雜的區(qū)域和表格數(shù)據(jù)抽取,它都能提供可靠的解決方案。通過本文的詳細(xì)指導(dǎo)和代碼示例,您應(yīng)該已經(jīng)掌握了使用該庫(kù)進(jìn)行PDF文本提取的核心技能。

以上就是Python利用Spire.PDF for Python庫(kù)抽取PDF文檔文本的詳細(xì)內(nèi)容,更多關(guān)于Python抽取PDF文檔文本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python基礎(chǔ)教程之序列詳解

    python基礎(chǔ)教程之序列詳解

    這篇文章主要介紹了python基礎(chǔ)教程之序列詳解,本文的序列包含元組(tuple)、列表(list)等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-08-08
  • Django基于ORM操作數(shù)據(jù)庫(kù)的方法詳解

    Django基于ORM操作數(shù)據(jù)庫(kù)的方法詳解

    這篇文章主要介紹了Django基于ORM操作數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式總結(jié)分析了Django使用ORM操作數(shù)據(jù)庫(kù)的相關(guān)配置、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 在Python中使用Neo4j數(shù)據(jù)庫(kù)的教程

    在Python中使用Neo4j數(shù)據(jù)庫(kù)的教程

    這篇文章主要介紹了在Python中使用Neo4j數(shù)據(jù)庫(kù)的教程,Neo4j是一個(gè)具有一定人氣的非關(guān)系型的數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)大模型Function Calling的實(shí)戰(zhàn)指南

    Python實(shí)現(xiàn)大模型Function Calling的實(shí)戰(zhàn)指南

    大模型很聰明,但它有個(gè)致命缺陷:只能說,不能做,Function Calling 徹底打破了這道墻,本文將用 Python 從零實(shí)現(xiàn) Function Calling,讓大模型不僅能思考,還能調(diào)用真實(shí)工具完成任務(wù),需要的朋友可以參考下
    2026-05-05
  • Pandas保存csv數(shù)據(jù)的三種方式詳解

    Pandas保存csv數(shù)據(jù)的三種方式詳解

    CSV文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),是一種通用的、相對(duì)簡(jiǎn)單的文件格式,被用戶、商業(yè)和科學(xué)廣泛應(yīng)用。本文介紹了三種Pandas保存CSV文件數(shù)據(jù)的方法,需要的可以參考一下
    2022-03-03
  • Python Pandas創(chuàng)建Dataframe數(shù)據(jù)框的六種方法匯總

    Python Pandas創(chuàng)建Dataframe數(shù)據(jù)框的六種方法匯總

    這篇文章主要介紹了Python中的Pandas創(chuàng)建Dataframe數(shù)據(jù)框的六種方法,創(chuàng)建Dataframe主要是使用pandas中的DataFrame函數(shù),其核心就是第一個(gè)參數(shù):data,傳入原始數(shù)據(jù),因此我們可以據(jù)此給出六種創(chuàng)建Dataframe的方法,需要的朋友可以參考下
    2023-05-05
  • python?flask框架中多種查詢參數(shù)的獲取方式

    python?flask框架中多種查詢參數(shù)的獲取方式

    這篇文章主要介紹了pythonflask框架的生命周期以及多種查詢參數(shù)的獲取方式,文章通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • 基于Python Watchdog庫(kù)實(shí)現(xiàn)文件系統(tǒng)監(jiān)控

    基于Python Watchdog庫(kù)實(shí)現(xiàn)文件系統(tǒng)監(jiān)控

    Watchdog是一個(gè)優(yōu)秀的Python庫(kù),用于監(jiān)控文件系統(tǒng)事件,本文將介紹Watchdog的基本用法,并通過一個(gè)實(shí)際案例展示如何用它來監(jiān)控下載目錄并自動(dòng)轉(zhuǎn)換ICO文件為PNG格式
    2025-07-07
  • Python?opencv圖像膨脹與腐蝕處理實(shí)例探究

    Python?opencv圖像膨脹與腐蝕處理實(shí)例探究

    這篇文章主要介紹了Python?opencv圖像膨脹與腐蝕處理實(shí)例探究
    2024-01-01
  • Python中的Numpy 矩陣運(yùn)算

    Python中的Numpy 矩陣運(yùn)算

    這篇文章介紹Python中的Numpy 矩陣運(yùn)算,NumPy是Python的一種開源的數(shù)值計(jì)算擴(kuò)展.這種工具可用來存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多,支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù),下面詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11

最新評(píng)論

祁连县| 高雄县| 崇仁县| 新绛县| 米脂县| 遂溪县| 紫金县| 尉犁县| 青州市| 舞阳县| 肃宁县| 红桥区| 麟游县| 清涧县| 淅川县| 牡丹江市| 建宁县| 吉安县| 蓬安县| 榕江县| 甘肃省| 华容县| 兴仁县| 林州市| 固阳县| 鹿邑县| 景德镇市| 加查县| 马鞍山市| 湖南省| 红桥区| 光泽县| 蛟河市| 荃湾区| 高密市| 锡林浩特市| 墨江| 资中县| 环江| 西丰县| 高要市|