Python實(shí)現(xiàn)自動(dòng)化批量提取PDF中的圖片
在現(xiàn)代企業(yè)的數(shù)據(jù)工作流中,PDF 文檔不僅是文字的載體,往往還沉淀了大量關(guān)鍵的視覺(jué)數(shù)據(jù)——從技術(shù)手冊(cè)中的零件圖解,到財(cái)務(wù)報(bào)告中的趨勢(shì)圖表。手動(dòng)截取這些圖片不僅低效,且無(wú)法保證原始分辨率。
對(duì)于開(kāi)發(fā)者而言,通過(guò)編程方式自動(dòng)化提取這些資源是提升生產(chǎn)力的核心。本文將探討如何利用 Python 深度解析 PDF 頁(yè)面樹(shù),并利用 Spire.PDF for Python 構(gòu)建一個(gè) PDF 圖像提取腳本。
1. 為什么提取 PDF 圖片比想象中復(fù)雜
在開(kāi)始編寫代碼之前,我們需要理解 PDF 的底層存儲(chǔ)邏輯。與 HTML 或 Word 不同,PDF 并不總是將圖片存儲(chǔ)為獨(dú)立的文件引用。
- 資源字典 (Resource Dictionary):PDF 頁(yè)面通過(guò)
XObject(外部對(duì)象)來(lái)定義圖像。這意味著一張公司 Logo 可能在 100 頁(yè)的文檔中被引用了 100 次,但在內(nèi)存中只存儲(chǔ)一份。 - 壓縮與色彩:圖片在 PDF 內(nèi)部可能經(jīng)過(guò)了 DCTDecode(JPEG)或 FlateDecode(PNG)等多種壓縮處理。
- PdfImageHelper 的作用:相比于直接從頁(yè)面導(dǎo)出,使用
PdfImageHelper可以更精準(zhǔn)地定位頁(yè)面上的圖像信息流,確保提取出的資源保持原始的采樣率。
2. 環(huán)境配置
在 Python 環(huán)境中,我們可以通過(guò) pip 輕松安裝所需的庫(kù)。該庫(kù)的優(yōu)勢(shì)在于它對(duì) PDF 結(jié)構(gòu)的解析非常透徹,能夠處理各種復(fù)雜的嵌套對(duì)象。
pip install Spire.PDF
3. 核心實(shí)現(xiàn):使用 PdfImageHelper 提取圖像
在 Spire.PDF 的最新版本中,推薦使用 PdfImageHelper 類來(lái)處理圖像提取任務(wù)。這種方式比傳統(tǒng)的頁(yè)面導(dǎo)出更具魯棒性。
以下是完整的代碼實(shí)現(xiàn):
from spire.pdf.common import *
from spire.pdf import *
import os
def extract_pdf_images(input_file, output_folder):
# 確保輸出目錄存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 1. 初始化 PdfDocument 實(shí)例
pdf = PdfDocument()
# 2. 加載 PDF 文件
pdf.LoadFromFile(input_file)
# 3. 創(chuàng)建 PdfImageHelper 實(shí)例,這是提取的核心類
image_helper = PdfImageHelper()
# 4. 遍歷文檔中的每一個(gè)頁(yè)面
for i in range(pdf.Pages.Count):
# 獲取當(dāng)前頁(yè)面對(duì)象
page = pdf.Pages.get_Item(i)
# 獲取該頁(yè)面上所有的圖像信息
# GetImagesInfo 會(huì)返回一個(gè)包含圖像元數(shù)據(jù)的列表
image_info_list = image_helper.GetImagesInfo(page)
# 5. 遍歷當(dāng)前頁(yè)面的圖像信息項(xiàng)
for j in range(len(image_info_list)):
# 構(gòu)造保存路徑,建議包含頁(yè)碼和圖像索引
output_path = os.path.join(output_folder, f"Image_Page{i+1}_{j}.png")
# 直接調(diào)用圖像對(duì)象的 Save 方法保存到本地
image_info_list[j].Image.Save(output_path)
print(f"已保存: {output_path}")
# 6. 釋放資源,關(guān)閉文檔
pdf.Close()
print("提取任務(wù)已全部完成。")
# 執(zhí)行調(diào)用
extract_pdf_images("technical_manual.pdf", "Extracted_Images")
下面是提取結(jié)果示例:

4. 深度進(jìn)階:處理復(fù)雜場(chǎng)景
在實(shí)際生產(chǎn)環(huán)境中,簡(jiǎn)單的遍歷往往不夠。我們需要考慮以下幾個(gè)專業(yè)維度:
過(guò)濾微小元素
有些 PDF 包含大量的裝飾性圖標(biāo)(如頁(yè)腳的小橫線或占位符)。我們可以通過(guò) image_info_list[j].Width 和 Height 屬性來(lái)設(shè)置閾值,過(guò)濾掉不具分析價(jià)值的碎片圖。
獲取圖像位置坐標(biāo)
PdfImageHelper 的強(qiáng)大之處在于它返回的 image_info 對(duì)象包含 Bounds 屬性。這在構(gòu)建 RAG(檢索增強(qiáng)生成)系統(tǒng)時(shí)非常有用,因?yàn)槟憧梢灾缊D片位于文本的哪個(gè)段落附近,從而建立準(zhǔn)確的上下文關(guān)聯(lián)。
內(nèi)存與性能
對(duì)于超長(zhǎng)文檔(如 500 頁(yè)以上的年報(bào)),建議在處理大型 PDF 時(shí)采用分段加載的方式。由于 pdf.Close() 會(huì)釋放底層句柄,確保在腳本結(jié)束時(shí)調(diào)用它,避免內(nèi)存泄漏。
5. 應(yīng)用場(chǎng)景
這種自動(dòng)化提取技術(shù)在以下領(lǐng)域具有極高的商業(yè)價(jià)值:
- 自動(dòng)化內(nèi)容遷移:將舊版的 PDF 資料庫(kù)遷移到 Web 平臺(tái),自動(dòng)填充配圖。
- AI 訓(xùn)練集構(gòu)建:從海量的醫(yī)學(xué) PDF 論文中自動(dòng)抓取放射學(xué)影像或病理切片圖。
- 文檔審計(jì):快速掃描文檔中是否存在違規(guī) Logo 或過(guò)時(shí)的視覺(jué)元素。
結(jié)語(yǔ)
使用 Python 提取 PDF 圖片不應(yīng)僅僅是“截圖”的替代方案,它更應(yīng)該是文檔結(jié)構(gòu)化數(shù)據(jù)提取的重要一環(huán)。通過(guò) PdfImageHelper 提供的 API,開(kāi)發(fā)者可以用極少的代碼量處理復(fù)雜的 PDF 資源調(diào)度。
到此這篇關(guān)于Python實(shí)現(xiàn)自動(dòng)化批量提取PDF中的圖片的文章就介紹到這了,更多相關(guān)Python提取PDF圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python實(shí)現(xiàn)PDF文檔提取,分割與合并操作
- Python實(shí)現(xiàn)PDF信息的精準(zhǔn)提取與結(jié)構(gòu)化輸出
- python實(shí)現(xiàn)簡(jiǎn)單提取PDF文檔內(nèi)文字
- Python實(shí)現(xiàn)高效提取PDF中的表格數(shù)據(jù)并導(dǎo)出為 TXT或Excel
- Python快速實(shí)現(xiàn)從PDF中提取文本與圖像坐標(biāo)的終極指南
- Python實(shí)現(xiàn)快速?gòu)闹付?yè)面PDF中提取文本
- Python結(jié)合OCR實(shí)現(xiàn)從掃描件PDF中提取文本
相關(guān)文章
Python發(fā)送請(qǐng)求SSL驗(yàn)證設(shè)置的幾種方案
這篇文章主要介紹了Python請(qǐng)求SSL/TLS握手失敗的常見(jiàn)原因及五種解決方案,包括禁用驗(yàn)證、指定TLS版本、添加重試、更新證書(shū)庫(kù)與系統(tǒng)時(shí)間、排查防火墻,建議優(yōu)先檢查網(wǎng)絡(luò)和證書(shū)問(wèn)題,生產(chǎn)環(huán)境慎用禁用驗(yàn)證,需要的朋友可以參考下2025-09-09
python實(shí)現(xiàn)zip分卷壓縮的詳細(xì)方法
WinHex 開(kāi)始16進(jìn)制一個(gè)一個(gè)文件對(duì)比 WinRar 創(chuàng)建的分卷壓縮和單個(gè) zip 文件的差異,這篇文章主要介紹了python實(shí)現(xiàn)zip分卷壓縮的詳細(xì)方法,需要的朋友可以參考下2024-02-02
python單向循環(huán)鏈表原理與實(shí)現(xiàn)方法示例
這篇文章主要介紹了python單向循環(huán)鏈表原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Python單向循環(huán)鏈表概念、原理、定義及使用方法,需要的朋友可以參考下2019-12-12
詳解用Python處理HTML轉(zhuǎn)義字符的5種方式
本文介紹了詳解用Python處理HTML轉(zhuǎn)義字符的5種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
使用Python實(shí)現(xiàn)不同需求的排行榜功能
這篇文章主要為大家介紹了Python實(shí)現(xiàn)不同需求的排行榜功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python人工智能深度學(xué)習(xí)RNN模型結(jié)構(gòu)流程
這篇文章主要為大家介紹了Python人工智能深度學(xué)習(xí)RNN的模型流程結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
pytorch實(shí)現(xiàn)mnist數(shù)據(jù)集的圖像可視化及保存
今天小編就為大家分享一篇pytorch實(shí)現(xiàn)mnist數(shù)據(jù)集的圖像可視化及保存,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
uwsgi+anaconda+django啟動(dòng)問(wèn)題的坑及解決
作者記錄了自己在使用uWSGI啟動(dòng)Django項(xiàng)目時(shí)遇到的問(wèn)題,并最終找到了解決方案,問(wèn)題出在Anaconda環(huán)境下安裝uWSGI時(shí),解決方法是使用conda安裝uWSGI2026-02-02
Python實(shí)現(xiàn)RGB與HSI顏色空間的互換方式
今天小編就為大家分享一篇Python實(shí)現(xiàn)RGB與HSI顏色空間的互換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python還能這么玩之用Python做個(gè)小游戲的外掛
玩過(guò)電腦游戲的同學(xué)對(duì)于外掛肯定不陌生,但是你在用外掛的時(shí)候有沒(méi)有想過(guò)外掛怎么制作出來(lái)的呢?現(xiàn)在來(lái)看一下怎么制作一個(gè)外掛,首先說(shuō)下,這里的游戲外掛的概念,和那些大型網(wǎng)游里的外掛可不同,不能自動(dòng)打怪,主要為了提高一下編程技術(shù),需要的朋友可以參考下2021-06-06

