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

Python實現(xiàn)一鍵提取PDF文件中的文本、表格和圖片

 更新時間:2026年04月21日 11:48:02   作者:用戶033212666367  
PDF 文檔作為一種廣泛使用的文件格式,常常包含豐富的內容元素,本文將介紹如何使用 Python 和 Spire.PDF 庫來提取 PDF 文件中的文本、表格和圖片,幫助您將靜態(tài)的 PDF 文檔轉換為可編輯、可分析的數(shù)據(jù)資源

PDF 文檔作為一種廣泛使用的文件格式,常常包含豐富的內容元素——從簡單的文字段落,到復雜的數(shù)據(jù)表格,再到精美的圖片和圖表。當我們需要對這些內容進行二次利用或數(shù)據(jù)分析時,如何高效地從 PDF 中提取這些不同類型的元素就成為了一個關鍵問題。

本文將介紹如何使用 Python 和 Spire.PDF 庫來提取 PDF 文件中的文本、表格和圖片,幫助您將靜態(tài)的 PDF 文檔轉換為可編輯、可分析的數(shù)據(jù)資源。

為什么需要提取 PDF 內容?

從 PDF 中提取內容在實際工作中有著廣泛的應用場景:

  • 數(shù)據(jù)再利用:從報告或文檔中提取文本內容,用于其他文檔或系統(tǒng)
  • 數(shù)據(jù)分析:提取表格數(shù)據(jù)進行統(tǒng)計分析或導入數(shù)據(jù)庫
  • 素材收集:提取圖片用于演示文稿、網(wǎng)站或其他設計項目
  • 內容歸檔:將 PDF 內容轉換為結構化格式便于檢索和管理
  • 自動化處理:批量提取多個文檔的內容,提高工作效率

通過 Python 自動化這些提取操作,可以顯著減少手動復制粘貼的工作量,并提高數(shù)據(jù)處理的準確性。

環(huán)境準備

首先,需要安裝 Spire.PDF for Python 庫??梢酝ㄟ^ pip 命令輕松完成安裝:

pip install Spire.PDF

安裝完成后,即可在 Python 腳本中導入該庫并使用其提供的內容提取功能。

提取 PDF 中的文本

提取整頁文本

最基礎的提取操作是從 PDF 頁面中提取所有文本內容。Spire.PDF 提供了 PdfTextExtractor 類來實現(xiàn)這一功能,它能夠智能識別頁面中的文本布局并保持原有的閱讀順序。

以下代碼展示了如何從 PDF 的第一頁提取文本并保存到文件:

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

def WriteAllText(fname: str, text: List[str]):
    """輔助函數(shù):將文本列表寫入文件"""
    fp = open(fname, "w", encoding="utf-8")
    for s in text:
        fp.write(s)
    fp.close()

# 定義輸入和輸出文件路徑
inputFile = "./Demos/Data/PDFTemplate-Az.pdf"
outputFile = "ExtractTextFromParticularPage.txt"

# 創(chuàng)建 PDF 文檔對象
doc = PdfDocument()
# 加載 PDF 文件
doc.LoadFromFile(inputFile)

# 獲取第一頁
page = doc.Pages[0]

# 創(chuàng)建文本提取器并保持空白格式
textExtractor = PdfTextExtractor(page)
option = PdfTextExtractOptions()
text = textExtractor.ExtractText(option)

# 將提取的文本寫入文件
WriteAllText(outputFile, text)
doc.Close()

這個示例展示了文本提取的基本流程:

  1. 加載 PDF 文檔并獲取目標頁面
  2. 創(chuàng)建 PdfTextExtractor 對象用于文本提取
  3. 配置 PdfTextExtractOptions 選項(可選)
  4. 調用 ExtractText 方法提取文本內容
  5. 將結果保存到文本文件

PdfTextExtractOptions 允許您自定義提取行為,例如是否保留空白字符、如何處理換行符等,這為不同場景下的文本提取提供了靈活性。

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

有時候我們只對 PDF 頁面中的某個特定區(qū)域感興趣,比如表單字段、標題部分或某個數(shù)據(jù)塊。Spire.PDF 支持通過定義矩形區(qū)域來精確提取指定范圍內的文本。

以下示例演示了如何從頁面的特定矩形區(qū)域提取文本:

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

def WriteAllText(fname: str, text: List[str]):
    """輔助函數(shù):將文本寫入文件"""
    fp = open(fname, "w", encoding="utf-8")
    for s in text:
        fp.write(s)
    fp.close()

# 定義輸入和輸出文件路徑
inputFile = "/輸入文檔.pdf"
outputFile = "ExtractTextFromSpecificArea.txt"

# 加載 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile(inputFile)

# 獲取第一頁
page = pdf.Pages[0]

# 從頁面的特定矩形區(qū)域提取文本
# RectangleF 參數(shù):x坐標, y坐標, 寬度, 高度
pdfTextExtractor = PdfTextExtractor(page)
pdfTextExtractOptions = PdfTextExtractOptions()
pdfTextExtractOptions.ExtractArea = RectangleF(80.0, 180.0, 500.0, 200.0)
text = pdfTextExtractor.ExtractText(pdfTextExtractOptions)

# 保存文本到文件
sb = []
sb.append(text)
WriteAllText(outputFile, sb)
pdf.Close()

這段代碼的關鍵在于 RectangleF 參數(shù)的設置:

  • x坐標和y坐標:定義矩形區(qū)域左上角的位置(單位為點,1點=1/72英寸)
  • 寬度和高度:定義提取區(qū)域的大小

通過精確控制這些參數(shù),您可以只提取感興趣的區(qū)域,避免獲取無關內容。這種方法特別適合處理結構化的 PDF 表單、發(fā)票或報表。

提取 PDF 中的圖片

PDF 文檔中的圖片可能是產品照片、圖表、Logo 或其他視覺元素。Spire.PDF 提供了高效的方法來提取這些圖片,最常用的方式是借助 PdfImageHelper 工具類。

使用 PdfImageHelper 提取圖片

以下代碼展示了如何遍歷 PDF 頁面中的所有圖片并將其保存為單獨的 PNG 文件:

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

# 創(chuàng)建 PdfDocument 對象
doc = PdfDocument()
# 加載 PDF 文檔
doc.LoadFromFile("輸入文檔.pdf")

# 創(chuàng)建 PdfImageHelper 對象
image_helper = PdfImageHelper()

image_count = 1
# 遍歷文檔中的頁面
for i in range(doc.Pages.Count):
    # 獲取當前頁面中的圖片信息集合
    images_info = image_helper.GetImagesInfo(doc.Pages[i])

    # 遍歷圖片信息并保存圖片
    for j in range(len(images_info)):
        image_info = images_info[j]
        # 設置輸出文件名
        output_file = f"圖片-{image_count}.png"
        # 直接通過 Image 對象保存文件
        image_info.Image.Save(output_file)
        image_count += 1

doc.Close()

核心步驟說明:

  1. 實例化 PdfImageHelper:這是提取圖片的核心輔助類。
  2. 獲取圖片信息:通過 image_helper.GetImagesInfo(page) 獲取包含圖片數(shù)據(jù)及其元數(shù)據(jù)的集合。
  3. 直接保存:利用 image_info.Image.Save() 方法直接將圖片對象導出。Spire.PDF 會自動處理圖像解碼,確保提取出的圖片保持高質量。

同時提取文本和圖片

如果需要一次性獲取頁面中的所有內容,可以將 PdfTextExtractorPdfImageHelper 結合使用。這種方法非常適合需要對文檔進行內容索引或歸檔的自動化任務。

from spire.pdf import *
import os

inputFile = "./Demos/Data/Extraction.pdf"

# 創(chuàng)建 PDF 文檔
doc = PdfDocument()
doc.LoadFromFile(inputFile)

# 創(chuàng)建緩沖區(qū)存儲提取的文本
sbuffer = []
# 定義圖片對象數(shù)組用于緩存
images = []
# 實例化 PdfImageHelper
imageHelper = PdfImageHelper()

# 遍歷文檔中的每一頁
for i in range(doc.Pages.Count):
    page = doc.Pages.get_Item(i)

    # 創(chuàng)建 PdfTextExtractor 對象并提取文本
    pdfTextExtractor = PdfTextExtractor(page)
    pdfTextExtractOptions = PdfTextExtractOptions()
    sbuffer.append(pdfTextExtractor.ExtractText(pdfTextExtractOptions))
    
    # 獲取頁面中的所有圖片并存入緩存
    imageInfo = imageHelper.GetImagesInfo(page)
    for info in imageInfo:
        images.append(info.Image)

# 保存提取的文本到文件
fileName = "Extraction.txt"
with open(fileName, "w", encoding="utf-8") as fp:
    for s in sbuffer:
        fp.write(s + "\n")

# 保存頁面中的所有圖片
for index, img in enumerate(images):
    img_path = os.path.join("./Demos/Data", f"Image-{index}.png")
    img.Save(img_path)

# 關閉文檔
doc.Close()

這種方法的優(yōu)勢在于可以統(tǒng)一處理文檔的各種媒體元素,并能夠通過循環(huán)結構輕松實現(xiàn)批量提取,是處理復雜 PDF 文檔的標準做法。

提取 PDF 中的表格

表格是 PDF 文檔中常見的數(shù)據(jù)結構,但也是最難準確提取的元素之一。Spire.PDF 提供了將 PDF 轉換為 Excel 的功能,通過這種方式可以間接提取表格數(shù)據(jù)。

提取 PDF 表格并保存為數(shù)據(jù)文件

通過 PdfTableExtractor 類,可以精確識別并提取 PDF 中的表格結構。這種方法允許開發(fā)者遍歷每一行和每一列,將數(shù)據(jù)按原樣填入 Excel 工作表或保存為 CSV 格式,便于后續(xù)的數(shù)據(jù)處理。

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


# 創(chuàng)建 PdfDocument 對象
doc = PdfDocument()

# 加載 PDF 文檔
doc.LoadFromFile("/input/項目進度.pdf")

# 創(chuàng)建 Workbook 對象
workbook = Workbook()
# 清除默認工作表
workbook.Worksheets.Clear()

# 創(chuàng)建 PdfTableExtractor 對象
extractor = PdfTableExtractor(doc)

sheetNumber = 1

# 遍歷 PDF 文件中的頁面
for pageIndex in range(doc.Pages.Count):
    # 從當前頁面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 遍歷表格
    if tableList is not None and len(tableList) > 0:
        for table in tableList:
            # 為當前表格添加一個工作表
            sheet = workbook.Worksheets.Add(f"Sheet{sheetNumber}")

            # 獲取表格的行數(shù)和列數(shù)
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 遍歷表格的行和列
            for i in range(row):
                for j in range(column):
                    # 獲取當前單元格中的文本
                    text = table.GetText(i, j)

                    # 將文本寫入工作表的指定單元格
                    sheet.Range[i + 1, j + 1].Value = text

            sheetNumber += 1

# 將工作簿保存為 CSV 文件
workbook.SaveToFile("/output/提取表格.csv", FileFormat.CSV)
workbook.Dispose()
doc.Close()

核心步驟說明:

  • 初始化提取器:使用 PdfTableExtractor(doc) 實例化表格提取對象。
  • 按頁提取:通過 extractor.ExtractTable(pageIndex) 獲取特定頁面的所有表格。
  • 行列遍歷:利用 table.GetRowCount()table.GetColumnCount() 確定表格維度,并通過 table.GetText(i, j) 抓取每一個單元格的文本內容。
  • 數(shù)據(jù)導出:將提取的數(shù)據(jù)填入 Workbook 單元格,并根據(jù)需要保存為 CSV 或其他 Excel 支持的格式。

這種逐單元格處理的方式提供了極高的靈活性,例如你可以在寫入數(shù)據(jù)前對特定文本進行過濾、清洗或重新格式化。

實際應用

PDF 內容提取功能在實際工作中有廣泛的應用場景:

批量提取文檔內容

當需要處理大量 PDF 文件時,可以編寫批處理函數(shù)來自動化提取過程。以下是一個實用的批量提取示例:

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

def ExtractContentFromPdfFolder(input_folder: str, output_folder: str):
    """從文件夾中的所有 PDF 文件提取文本和圖片"""
    
    # 如果輸出文件夾不存在則創(chuàng)建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 遍歷輸入文件夾中的所有文件
    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            # 構建完整的文件路徑
            input_path = os.path.join(input_folder, filename)
            base_name = os.path.splitext(filename)[0]
            
            # 創(chuàng)建子文件夾存放提取的內容
            content_folder = os.path.join(output_folder, base_name)
            if not os.path.exists(content_folder):
                os.makedirs(content_folder)
            
            # 加載 PDF 文檔
            doc = PdfDocument()
            doc.LoadFromFile(input_path)
            
            # 提取文本和圖片
            all_text = []
            image_count = 0
            
            for i in range(doc.Pages.Count):
                page = doc.Pages.get_Item(i)
                
                # 提取文本
                textExtractor = PdfTextExtractor(page)
                options = PdfTextExtractOptions()
                text = textExtractor.ExtractText(options)
                all_text.append(f"--- 第 {i+1} 頁 ---\n{text}")
                
                # 提取圖片
                imageHelper = PdfImageHelper()
                imageInfo = imageHelper.GetImagesInfo(page)
                for info in imageInfo:
                    image_count += 1
                    img_path = os.path.join(content_folder, f"Image-{image_count}.png")
                    info.Image.Save(img_path)
            
            # 保存文本
            text_file = os.path.join(content_folder, "extracted_text.txt")
            with open(text_file, "w", encoding="utf-8") as fp:
                for t in all_text:
                    fp.write(t + "\n\n")
            
            doc.Close()
            print(f"已處理: {filename} (提取了 {image_count} 張圖片)")

# 使用示例
input_folder = "./PDF文檔"
output_folder = "./提取內容"
ExtractContentFromPdfFolder(input_folder, output_folder)

數(shù)據(jù)錄入自動化

從 PDF 表單或報告中提取特定區(qū)域的文本,自動填充到數(shù)據(jù)庫或電子表格中,減少人工錄入的工作量和錯誤率。

素材庫建設

設計師可以從大量的 PDF 宣傳材料中提取圖片資源,建立可重用的素材庫,提高設計效率。

文檔數(shù)字化

將紙質文檔掃描成的 PDF 進行內容提取,轉換為可搜索、可編輯的數(shù)字格式,便于長期保存和檢索。

實用技巧

在進行 PDF 內容提取時,以下技巧可以幫助獲得更好的結果:

  • 坐標定位:提取特定區(qū)域文本時,可以使用 PDF 閱讀器查看頁面屬性來確定準確的坐標值
  • 編碼處理:保存提取的文本時務必使用 UTF-8 編碼,以正確處理中文等特殊字符
  • 圖片格式:根據(jù)實際需求選擇合適的圖片輸出格式(PNG 適合圖形,JPG 適合照片)
  • 分頁處理:對于多頁文檔,建議在提取的文本中加入頁碼標記,便于后續(xù)定位
  • 異常處理:某些 PDF 可能包含加密或損壞的內容,應添加適當?shù)腻e誤處理機制

總結

通過本文的介紹,我們學習了使用 Python 和 Spire.PDF 庫提取 PDF 內容的多種方法:

  • 使用 PdfTextExtractor 提取整頁或特定區(qū)域的文本
  • 通過 ImagesInfoPdfImageHelper 提取頁面中的圖片
  • 利用 PDF 到 Excel 的轉換功能間接提取表格數(shù)據(jù)
  • 實現(xiàn)批量提取功能處理多個文檔

這些技術為 PDF 文檔的內容再利用提供了強大的工具。掌握這些技能后,您將能夠高效地從 PDF 文件中提取所需的信息,將靜態(tài)文檔轉換為有價值的數(shù)據(jù)資源,顯著提升工作效率和數(shù)據(jù)處理的靈活性。

以上就是Python實現(xiàn)一鍵提取PDF文件中的文本、表格和圖片的詳細內容,更多關于Python提取PDF的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Python 中的短路評估

    詳解Python 中的短路評估

    短路是指當表達式的真值已經確定時終止布爾運算,Python 解釋器以從左到右的方式計算表達式,這篇文章主要介紹了Python 中的短路評估,需要的朋友可以參考下
    2023-06-06
  • python re.match函數(shù)的具體使用

    python re.match函數(shù)的具體使用

    本文主要介紹了python re.match函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • pandas數(shù)據(jù)類型之Series的具體使用

    pandas數(shù)據(jù)類型之Series的具體使用

    本文主要介紹了pandas數(shù)據(jù)類型之Series的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python+OpenCV六種實時圖像處理詳細講解

    Python+OpenCV六種實時圖像處理詳細講解

    OpenCV常用的圖像處理為閾值二值化、邊緣檢測、輪廓檢測、高斯濾波、色彩轉換、調節(jié)對比度。本文主要介紹了利用Python和OpenCV對實時圖像進行上述六種操作的詳細講解,感興趣的可以了解一下。
    2021-11-11
  • 關于python pycharm中輸出的內容不全的解決辦法

    關于python pycharm中輸出的內容不全的解決辦法

    這篇文章主要介紹了關于python pycharm中輸出的內容不全的解決辦法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 關于PyTorch中nn.Module類的簡介

    關于PyTorch中nn.Module類的簡介

    這篇文章主要介紹了關于PyTorch中nn.Module類的簡介,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python實現(xiàn)數(shù)據(jù)庫表的監(jiān)控警告的項目實踐

    Python實現(xiàn)數(shù)據(jù)庫表的監(jiān)控警告的項目實踐

    本文主要介紹了使用Python 實現(xiàn)對數(shù)據(jù)庫表的監(jiān)控告警功能, 并將告警信息通過釘釘機器人發(fā)送到釘釘群,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • 使用 Python 實現(xiàn)文件遞歸遍歷的三種方式

    使用 Python 實現(xiàn)文件遞歸遍歷的三種方式

    這篇文章主要介紹了使用 Python 實現(xiàn)文件遞歸遍歷的三種方式,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-07-07
  • Keras 如何修改圖片通道的順序

    Keras 如何修改圖片通道的順序

    這篇文章主要介紹了Keras 修改圖片通道順序的操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 使用python去除PDF簡單水印的示例

    使用python去除PDF簡單水印的示例

    最近在下載PDF書籍的時候,發(fā)現(xiàn)有些PDF有水印,于是就尋思著能不能用Python去除這些討厭的水印,PDF主要有兩種類型,一種是文字版,另外一種就是掃描版(圖片),這個去除水印主要就是針對掃描版的PDF,所以本文介紹了如何使用python去除PDF簡單水印,需要的朋友可以參考下
    2024-03-03

最新評論

阿城市| 陇西县| 东乡| 集安市| 金门县| 德清县| 佳木斯市| 武冈市| 翁源县| 溧阳市| 万源市| 资源县| 南宫市| 庆元县| 绿春县| 汤原县| 沈丘县| 南华县| 澎湖县| 南丰县| 珠海市| 长葛市| 龙口市| 浏阳市| 宁化县| 通山县| 连平县| 册亨县| 灵石县| 商洛市| 伊宁市| 万州区| 喀什市| 红桥区| 文山县| 黔西县| 云阳县| 北安市| 宜兰市| 甘孜| 永丰县|