使用Python獲取PDF文本和圖片的精確位置的操作方法
引言
在處理和分析PDF文檔時,獲取文本和圖片在頁面上的精確位置是一個重要的操作。通過確定這些元素的具體坐標(biāo),我們可以實現(xiàn)對PDF內(nèi)容的更精細控制和理解,這對于自動化文檔處理、信息提取以及內(nèi)容重組等工作流程尤為關(guān)鍵。通過Python編程語言,我們可以輕松獲取PDF頁面上文本及圖像的精確坐標(biāo),使我們能夠在不影響其原有排版的情況下對內(nèi)容進行操作。本文將介紹如何使用Python獲取PDF文本和圖片在頁面上的位置坐標(biāo)。
本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install spire.pdf。
Spire.PDF for Python通過一個起點位于頁面左上角的坐標(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ā)者對文本進行完全復(fù)制等操作。
以下是使用Python獲取PDF文本的頁面坐標(biāo)位置的操作步驟示例:
- 導(dǎo)入所需模塊:
PdfDocument
、PdfTextFinder
、PdfTextFindOptions
和TextFindParameter
。 - 創(chuàng)建
PdfDocument
實例,使用PdfDocument.LoadFromFile()
方法載入用于操作的PDF文檔。 - 使用
PdfDocument.Pages.get_Item()
獲取指定頁面頁面,或循環(huán)文檔所有頁面循環(huán)頁面。 - 使用頁面創(chuàng)建
PdfTextFinder
實例。 - 創(chuàng)建
PdfTextFindOptions
實例,通過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行其他操作。
代碼示例
from spire.pdf import PdfDocument, PdfTextFinder, PdfTextFindOptions, TextFindParameter # 創(chuàng)建一個 PdfDocument 實例 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 實例 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
,從而進行保存、復(fù)制等操作。
以下是獲取PDF圖片的頁面坐標(biāo)位置的操作步驟示例:
- 導(dǎo)入所需模塊:
PdfDocument
。 - 創(chuàng)建
PdfDocument
實例,使用PdfDocument.LoadFromFile()
方法載入用于操作的PDF文檔。 - 使用
PdfDocument.Pages.get_Item()
獲取指定頁面頁面,或循環(huán)文檔所有頁面循環(huán)頁面。 - 使用
PdfPageBase.ImagesInfo
屬性獲取頁面的圖片信息列表。 - 判斷頁面是否包含圖片。如果包含,則遍歷圖片信息列表,使用
PdfImageInfo.Bounds.X
和PdfImageInfo.Bounds.Y
屬性獲取圖片的起始坐標(biāo)。 - 輸出結(jié)果,或?qū)D像進行其他操作。
代碼示例
from spire.pdf import PdfDocument # 創(chuàng)建一個 PdfDocument 實例 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)文章
python3+django2開發(fā)一個簡單的人員管理系統(tǒng)過程詳解
這篇文章主要介紹了python3+django2開發(fā)一個簡單的人員管理系統(tǒng)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07Python實現(xiàn)將DNA序列存儲為tfr文件并讀取流程介紹
為什么要在實驗過程中存儲文件,因為有些算法的內(nèi)容存在一些重復(fù)計算的步驟,這些步驟往往消耗很大一部分時間,在有大量參數(shù)的情況時,需要在多次不同參數(shù)的情況下重復(fù)試驗,因此可以考慮將一些不涉及參數(shù)運算的部分結(jié)果存入文件中2022-09-09關(guān)于pip install uwsgi安裝失敗問題的解決方案
這篇文章主要介紹了關(guān)于pip install uwsgi安裝失敗問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06如何實現(xiàn)python爬蟲爬取視頻時實現(xiàn)實時進度條顯示
這篇文章主要介紹了如何實現(xiàn)python爬蟲爬取視頻時實現(xiàn)實時進度條顯示,在爬取并下載網(wǎng)頁上的視頻的時候,我們需要實時進度條,這可以幫助我們更直觀的看到視頻的下載進度。文章圍繞主題展開更多內(nèi)容,需要的小伙伴可以參考一下2022-06-06Python Numpy運行報錯IndexError與形狀不匹配的問題解決辦法
在使用Numpy進行數(shù)據(jù)處理和科學(xué)計算時,IndexError和形狀不匹配(Shape Mismatch)是常見的錯誤類型,這些錯誤通常發(fā)生在數(shù)組索引操作、數(shù)組運算或數(shù)組重塑時,本文將通過一個具體的例子來詳細分析這些錯誤的原因和解決辦法,需要的朋友可以參考下2024-07-07Scrapy項目實戰(zhàn)之爬取某社區(qū)用戶詳情
這篇文章主要介紹了Scrapy項目實戰(zhàn)之爬取某社區(qū)用戶詳情,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python進程,多進程,獲取進程id,給子進程傳遞參數(shù)操作示例
這篇文章主要介紹了Python進程,多進程,獲取進程id,給子進程傳遞參數(shù)操作,結(jié)合實例形式分析了Python多進程、父子進程以及進程參數(shù)傳遞相關(guān)操作技巧,需要的朋友可以參考下2019-10-10使用Python實現(xiàn)XLS和XLSX之間的相互轉(zhuǎn)換
在日常工作中,我們經(jīng)常需要處理和轉(zhuǎn)換不同格式的Excel文件,以適應(yīng)不同的需求和軟件兼容性,Excel文件的兩種常見格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文將詳細介紹如何使用Python在XLS和XLSX格式之間進行轉(zhuǎn)換,需要的朋友可以參考下2024-09-09