使用Python获取PDF文本和图片的精确位置的操作方法
作者:Eiceblue
引言
在处理和分析PDF文档时,获取文本和图片在页面上的精确位置是一个重要的操作。通过确定这些元素的具体坐标,我们可以实现对PDF内容的更精细控制和理解,这对于自动化文档处理、信息提取以及内容重组等工作流程尤为关键。通过Python编程语言,我们可以轻松获取PDF页面上文本及图像的精确坐标,使我们能够在不影响其原有排版的情况下对内容进行操作。本文将介绍如何使用Python获取PDF文本和图片在页面上的位置坐标。
本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install spire.pdf。
Spire.PDF for Python通过一个起点位于页面左上角的坐标系来处理PDF页面元素的位置,x轴向右延伸,y轴向下延伸。当我们在PDF页面放置文本、图像等内容时,我们可以直接使用x和y两个数值来确定位置。同时,我们也可以使用库中的属性获取指定元素在其页面上的位置。
页面坐标如图所示:
用Python在PDF中查找文本并获取其页面坐标位置
PdfTextFinder
类可以帮助我们以指定的查找选项在指定PDF页面中查找文本。查找到指定文本后,我们可以使用PdfTextFragment.Positions[0].X
和PdfTextFragment.Positions[0].Y
属性访问文本的起始坐标,从而确定其精确位置。
同时,PdfTextFragment
类还提供Text
、TextStates[].FontSize
以及TextStates[].FontName
属性来获取文本的更多信息,从而方便开发者对文本进行完全复制等操作。
以下是使用Python获取PDF文本的页面坐标位置的操作步骤示例:
- 导入所需模块:
PdfDocument
、PdfTextFinder
、PdfTextFindOptions
和TextFindParameter
。 - 创建
PdfDocument
实例,使用PdfDocument.LoadFromFile()
方法载入用于操作的PDF文档。 - 使用
PdfDocument.Pages.get_Item()
获取指定页面页面,或循环文档所有页面循环页面。 - 使用页面创建
PdfTextFinder
实例。 - 创建
PdfTextFindOptions
实例,通过PdfTextFindOptions.Parameter
属性,使用TextFindParameter
指定查找选项。 - 通过
PdfTextFinder.Options
应用查找选项。 - 使用
PdfTextFinder.Find(str: text)
方法在页面上查找指定文本。 - 判断是否有查找结果。如果有,则遍历查找结果,使用
PdfTextFragment.Positions[0].X
和PdfTextFragment.Positions[0].Y
属性获取文本的坐标。 - 输出结果,或对文本进行其他操作。
代码示例
from spire.pdf import PdfDocument, PdfTextFinder, PdfTextFindOptions, TextFindParameter # 创建一个 PdfDocument 实例 pdf = PdfDocument() # 加载一个 PDF 文档 pdf.LoadFromFile("Sample.pdf") textFound = False # 标志,用于检查是否找到文本 # 遍历所有页 for i in range(pdf.Pages.Count): # 获取一页 page = pdf.Pages.get_Item(i) # 创建一个 PdfTextFinder 实例 finder = PdfTextFinder(page) # 设置搜索选项 options = PdfTextFindOptions() options.Parameter = TextFindParameter.WholeWord # 搜索完整单词 finder.Options = options # 查找文本 results = finder.Find("History and Cultural Significance") # 检查是否找到文本 if len(results) > 0: textFound = True # 标记为已找到 # 遍历所有结果 for text in results: # 获取起始坐标 x = text.Positions[0].X y = text.Positions[0].Y # 获取结束坐标 x2 = text.Positions[-1].X print("在第 " + str(i+1) + " 页找到文本,坐标:\n" + "X: " + str(x) + "\nY: " + str(y) + "\n") # 如果没有找到文本,打印未找到的消息 if not textFound: print("未找到文本。") pdf.Close()
结果
用Python获取PDF页面指定图像的坐标位置
我们可以使用PdfPageBase.ImagesInfo
属性获取指定PDF页面的图片信息列表,然后遍历列表获取,使用PdfImageInfo.Bounds.X
和PdfImageInfo.Bounds.Y
属性获取图片的起始坐标。此外,我们还可以使用PdfImageInfo.Image
属性直接获取图片为Stream
,从而进行保存、复制等操作。
以下是获取PDF图片的页面坐标位置的操作步骤示例:
- 导入所需模块:
PdfDocument
。 - 创建
PdfDocument
实例,使用PdfDocument.LoadFromFile()
方法载入用于操作的PDF文档。 - 使用
PdfDocument.Pages.get_Item()
获取指定页面页面,或循环文档所有页面循环页面。 - 使用
PdfPageBase.ImagesInfo
属性获取页面的图片信息列表。 - 判断页面是否包含图片。如果包含,则遍历图片信息列表,使用
PdfImageInfo.Bounds.X
和PdfImageInfo.Bounds.Y
属性获取图片的起始坐标。 - 输出结果,或对图像进行其他操作。
代码示例
from spire.pdf import PdfDocument # 创建一个 PdfDocument 实例 pdf = PdfDocument() # 加载一个 PDF 文档 pdf.LoadFromFile("G:/Documents/Sample.pdf") imageFound = False # 标志,用于指示是否找到图片 # 遍历所有页 for i in range(pdf.Pages.Count): # 获取一页 page = pdf.Pages.get_Item(i) # 获取页面中的图片信息 imagesInfo = page.ImagesInfo # 检查页面是否包含图片 if len(imagesInfo) > 0: imageFound = True # 标记为已找到图片 # 遍历所有图片 for j in range(len(imagesInfo)): # 获取图片信息 imageInfo = page.ImagesInfo[j] # 获取图片的坐标 x = imageInfo.Bounds.X y = imageInfo.Bounds.Y # 打印坐标信息 print(f"第 {i + 1} 页的第 {j + 1} 张图片。坐标:\nX={x}, Y={y}") # 如果没有找到任何图片,打印未找到图片的消息 if not imageFound: print("文档中没有图片。") pdf.Close()
结果
本文介绍如何使用Python或PDF文档中文本和图片在页面上的坐标,从而确定其精确位置。
到此这篇关于使用Python获取PDF文本和图片的精确位置的操作方法的文章就介绍到这了,更多相关Python获取PDF文本和图片位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!