使用Python獲取PDF文本和圖片的精確位置的操作方法
引言
在處理和分析PDF文檔時,獲取文本和圖片在頁面上的精確位置是一個重要的操作。通過確定這些元素的具體坐標(biāo),我們可以實(shí)現(xiàn)對PDF內(nèi)容的更精細(xì)控制和理解,這對于自動化文檔處理、信息提取以及內(nèi)容重組等工作流程尤為關(guān)鍵。通過Python編程語言,我們可以輕松獲取PDF頁面上文本及圖像的精確坐標(biāo),使我們能夠在不影響其原有排版的情況下對內(nèi)容進(jìn)行操作。本文將介紹如何使用Python獲取PDF文本和圖片在頁面上的位置坐標(biāo)。
本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install spire.pdf。
Spire.PDF for Python通過一個起點(diǎn)位于頁面左上角的坐標(biāo)系來處理PDF頁面元素的位置,x軸向右延伸,y軸向下延伸。當(dāng)我們在PDF頁面放置文本、圖像等內(nèi)容時,我們可以直接使用x和y兩個數(shù)值來確定位置。同時,我們也可以使用庫中的屬性獲取指定元素在其頁面上的位置。
頁面坐標(biāo)如圖所示:

用Python在PDF中查找文本并獲取其頁面坐標(biāo)位置
PdfTextFinder類可以幫助我們以指定的查找選項在指定PDF頁面中查找文本。查找到指定文本后,我們可以使用PdfTextFragment.Positions[0].X和PdfTextFragment.Positions[0].Y屬性訪問文本的起始坐標(biāo),從而確定其精確位置。
同時,PdfTextFragment類還提供Text、TextStates[].FontSize以及TextStates[].FontName屬性來獲取文本的更多信息,從而方便開發(fā)者對文本進(jìn)行完全復(fù)制等操作。
以下是使用Python獲取PDF文本的頁面坐標(biāo)位置的操作步驟示例:
- 導(dǎo)入所需模塊:
PdfDocument、PdfTextFinder、PdfTextFindOptions和TextFindParameter。 - 創(chuàng)建
PdfDocument實(shí)例,使用PdfDocument.LoadFromFile()方法載入用于操作的PDF文檔。 - 使用
PdfDocument.Pages.get_Item()獲取指定頁面頁面,或循環(huán)文檔所有頁面循環(huán)頁面。 - 使用頁面創(chuàng)建
PdfTextFinder實(shí)例。 - 創(chuàng)建
PdfTextFindOptions實(shí)例,通過PdfTextFindOptions.Parameter屬性,使用TextFindParameter指定查找選項。 - 通過
PdfTextFinder.Options應(yīng)用查找選項。 - 使用
PdfTextFinder.Find(str: text)方法在頁面上查找指定文本。 - 判斷是否有查找結(jié)果。如果有,則遍歷查找結(jié)果,使用
PdfTextFragment.Positions[0].X和PdfTextFragment.Positions[0].Y屬性獲取文本的坐標(biāo)。 - 輸出結(jié)果,或?qū)ξ谋具M(jìn)行其他操作。
代碼示例
from spire.pdf import PdfDocument, PdfTextFinder, PdfTextFindOptions, TextFindParameter
# 創(chuàng)建一個 PdfDocument 實(shí)例
pdf = PdfDocument()
# 加載一個 PDF 文檔
pdf.LoadFromFile("Sample.pdf")
textFound = False # 標(biāo)志,用于檢查是否找到文本
# 遍歷所有頁
for i in range(pdf.Pages.Count):
# 獲取一頁
page = pdf.Pages.get_Item(i)
# 創(chuàng)建一個 PdfTextFinder 實(shí)例
finder = PdfTextFinder(page)
# 設(shè)置搜索選項
options = PdfTextFindOptions()
options.Parameter = TextFindParameter.WholeWord # 搜索完整單詞
finder.Options = options
# 查找文本
results = finder.Find("History and Cultural Significance")
# 檢查是否找到文本
if len(results) > 0:
textFound = True # 標(biāo)記為已找到
# 遍歷所有結(jié)果
for text in results:
# 獲取起始坐標(biāo)
x = text.Positions[0].X
y = text.Positions[0].Y
# 獲取結(jié)束坐標(biāo)
x2 = text.Positions[-1].X
print("在第 " + str(i+1) + " 頁找到文本,坐標(biāo):\n" + "X: " + str(x) + "\nY: " + str(y) + "\n")
# 如果沒有找到文本,打印未找到的消息
if not textFound:
print("未找到文本。")
pdf.Close()
結(jié)果

用Python獲取PDF頁面指定圖像的坐標(biāo)位置
我們可以使用PdfPageBase.ImagesInfo屬性獲取指定PDF頁面的圖片信息列表,然后遍歷列表獲取,使用PdfImageInfo.Bounds.X和PdfImageInfo.Bounds.Y屬性獲取圖片的起始坐標(biāo)。此外,我們還可以使用PdfImageInfo.Image屬性直接獲取圖片為Stream,從而進(jìn)行保存、復(fù)制等操作。
以下是獲取PDF圖片的頁面坐標(biāo)位置的操作步驟示例:
- 導(dǎo)入所需模塊:
PdfDocument。 - 創(chuàng)建
PdfDocument實(shí)例,使用PdfDocument.LoadFromFile()方法載入用于操作的PDF文檔。 - 使用
PdfDocument.Pages.get_Item()獲取指定頁面頁面,或循環(huán)文檔所有頁面循環(huán)頁面。 - 使用
PdfPageBase.ImagesInfo屬性獲取頁面的圖片信息列表。 - 判斷頁面是否包含圖片。如果包含,則遍歷圖片信息列表,使用
PdfImageInfo.Bounds.X和PdfImageInfo.Bounds.Y屬性獲取圖片的起始坐標(biāo)。 - 輸出結(jié)果,或?qū)D像進(jìn)行其他操作。
代碼示例
from spire.pdf import PdfDocument
# 創(chuàng)建一個 PdfDocument 實(shí)例
pdf = PdfDocument()
# 加載一個 PDF 文檔
pdf.LoadFromFile("G:/Documents/Sample.pdf")
imageFound = False # 標(biāo)志,用于指示是否找到圖片
# 遍歷所有頁
for i in range(pdf.Pages.Count):
# 獲取一頁
page = pdf.Pages.get_Item(i)
# 獲取頁面中的圖片信息
imagesInfo = page.ImagesInfo
# 檢查頁面是否包含圖片
if len(imagesInfo) > 0:
imageFound = True # 標(biāo)記為已找到圖片
# 遍歷所有圖片
for j in range(len(imagesInfo)):
# 獲取圖片信息
imageInfo = page.ImagesInfo[j]
# 獲取圖片的坐標(biāo)
x = imageInfo.Bounds.X
y = imageInfo.Bounds.Y
# 打印坐標(biāo)信息
print(f"第 {i + 1} 頁的第 {j + 1} 張圖片。坐標(biāo):\nX={x}, Y={y}")
# 如果沒有找到任何圖片,打印未找到圖片的消息
if not imageFound:
print("文檔中沒有圖片。")
pdf.Close()
結(jié)果

本文介紹如何使用Python或PDF文檔中文本和圖片在頁面上的坐標(biāo),從而確定其精確位置。
到此這篇關(guān)于使用Python獲取PDF文本和圖片的精確位置的操作方法的文章就介紹到這了,更多相關(guān)Python獲取PDF文本和圖片位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python opencv旋轉(zhuǎn)圖像(保持圖像不被裁減)
這篇文章主要為大家詳細(xì)介紹了python opencv旋轉(zhuǎn)圖像,保持圖像不被裁減,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
淺談python 四種數(shù)值類型(int,long,float,complex)
下面小編就為大家?guī)硪黄獪\談python 四種數(shù)值類型(int,long,float,complex)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
基于Python+PyQt5開發(fā)一個AI智能截圖解答工具
這篇文章主要介紹了基于Python+PyQt5開發(fā)一個AI智能截圖解答工具,它可以隨時在屏幕上框選任意區(qū)域,自動識別截圖里的內(nèi)容,然后直接給出 AI 解答或解釋,需要的朋友可以參考下2025-11-11
Python實(shí)現(xiàn)一鍵改變raw格式照片風(fēng)格
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一鍵改變raw格式照片風(fēng)格效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,需要的可以一起學(xué)習(xí)一下2023-05-05
Python API 自動化實(shí)戰(zhàn)詳解(純代碼)
今天小編就為大家分享一篇Python API 自動化實(shí)戰(zhàn)詳解(純代碼),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python通過Geopandas實(shí)現(xiàn)地理空間數(shù)據(jù)可視化
Geopandas是一個功能強(qiáng)大的Python庫,它擴(kuò)展了Pandas的功能,專門用于地理空間數(shù)據(jù)的處理和分析,下面我們來看看如何使用Geopandas進(jìn)行地理空間數(shù)據(jù)可視化吧2025-03-03
opencv實(shí)現(xiàn)靜態(tài)手勢識別 opencv實(shí)現(xiàn)剪刀石頭布游戲
這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)靜態(tài)手勢識別,opencv實(shí)現(xiàn)剪刀石頭布游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01

