使用Python获取PDF文本和图片的精确位置的操作方法

 更新时间:2024年12月25日 17:22:36   作者:Eiceblue  
在处理和分析PDF文档时,获取文本和图片在页面上的精确位置是一个重要的操作,通过确定这些元素的具体坐标,我们可以实现对PDF内容的更精细控制和理解,本文将介绍如何使用Python获取PDF文本和图片在页面上的位置坐标,需要的朋友可以参考下

引言

在处理和分析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].XPdfTextFragment.Positions[0].Y属性访问文本的起始坐标,从而确定其精确位置。
同时,PdfTextFragment类还提供TextTextStates[].FontSize以及TextStates[].FontName属性来获取文本的更多信息,从而方便开发者对文本进行完全复制等操作。
以下是使用Python获取PDF文本的页面坐标位置的操作步骤示例:

  1. 导入所需模块:PdfDocumentPdfTextFinderPdfTextFindOptionsTextFindParameter
  2. 创建PdfDocument实例,使用PdfDocument.LoadFromFile()方法载入用于操作的PDF文档。
  3. 使用PdfDocument.Pages.get_Item()获取指定页面页面,或循环文档所有页面循环页面。
  4. 使用页面创建PdfTextFinder实例。
  5. 创建PdfTextFindOptions实例,通过PdfTextFindOptions.Parameter属性,使用TextFindParameter指定查找选项。
  6. 通过PdfTextFinder.Options应用查找选项。
  7. 使用PdfTextFinder.Find(str: text)方法在页面上查找指定文本。
  8. 判断是否有查找结果。如果有,则遍历查找结果,使用PdfTextFragment.Positions[0].XPdfTextFragment.Positions[0].Y属性获取文本的坐标。
  9. 输出结果,或对文本进行其他操作。

代码示例

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.XPdfImageInfo.Bounds.Y属性获取图片的起始坐标。此外,我们还可以使用PdfImageInfo.Image属性直接获取图片为Stream,从而进行保存、复制等操作。
以下是获取PDF图片的页面坐标位置的操作步骤示例:

  1. 导入所需模块:PdfDocument
  2. 创建PdfDocument实例,使用PdfDocument.LoadFromFile()方法载入用于操作的PDF文档。
  3. 使用PdfDocument.Pages.get_Item()获取指定页面页面,或循环文档所有页面循环页面。
  4. 使用PdfPageBase.ImagesInfo属性获取页面的图片信息列表。
  5. 判断页面是否包含图片。如果包含,则遍历图片信息列表,使用PdfImageInfo.Bounds.XPdfImageInfo.Bounds.Y属性获取图片的起始坐标。
  6. 输出结果,或对图像进行其他操作。

代码示例

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文本和图片位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3+django2开发一个简单的人员管理系统过程详解

    python3+django2开发一个简单的人员管理系统过程详解

    这篇文章主要介绍了python3+django2开发一个简单的人员管理系统过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python实现将DNA序列存储为tfr文件并读取流程介绍

    Python实现将DNA序列存储为tfr文件并读取流程介绍

    为什么要在实验过程中存储文件,因为有些算法的内容存在一些重复计算的步骤,这些步骤往往消耗很大一部分时间,在有大量参数的情况时,需要在多次不同参数的情况下重复试验,因此可以考虑将一些不涉及参数运算的部分结果存入文件中
    2022-09-09
  • 关于pip install uwsgi安装失败问题的解决方案

    关于pip install uwsgi安装失败问题的解决方案

    这篇文章主要介绍了关于pip install uwsgi安装失败问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 快速了解python leveldb

    快速了解python leveldb

    这篇文章主要介绍了快速了解python leveldb,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 如何实现python爬虫爬取视频时实现实时进度条显示

    如何实现python爬虫爬取视频时实现实时进度条显示

    这篇文章主要介绍了如何实现python爬虫爬取视频时实现实时进度条显示,在爬取并下载网页上的视频的时候,我们需要实时进度条,这可以帮助我们更直观的看到视频的下载进度。文章围绕主题展开更多内容,需要的小伙伴可以参考一下
    2022-06-06
  • Python Numpy运行报错IndexError与形状不匹配的问题解决办法

    Python Numpy运行报错IndexError与形状不匹配的问题解决办法

    在使用Numpy进行数据处理和科学计算时,IndexError和形状不匹配(Shape Mismatch)是常见的错误类型,这些错误通常发生在数组索引操作、数组运算或数组重塑时,本文将通过一个具体的例子来详细分析这些错误的原因和解决办法,需要的朋友可以参考下
    2024-07-07
  • Scrapy项目实战之爬取某社区用户详情

    Scrapy项目实战之爬取某社区用户详情

    这篇文章主要介绍了Scrapy项目实战之爬取某社区用户详情,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Python进程,多进程,获取进程id,给子进程传递参数操作示例

    Python进程,多进程,获取进程id,给子进程传递参数操作示例

    这篇文章主要介绍了Python进程,多进程,获取进程id,给子进程传递参数操作,结合实例形式分析了Python多进程、父子进程以及进程参数传递相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • 使用Python实现XLS和XLSX之间的相互转换

    使用Python实现XLS和XLSX之间的相互转换

    在日常工作中,我们经常需要处理和转换不同格式的Excel文件,以适应不同的需求和软件兼容性,Excel文件的两种常见格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文将详细介绍如何使用Python在XLS和XLSX格式之间进行转换,需要的朋友可以参考下
    2024-09-09
  • python 如何比较两集合的大小关系

    python 如何比较两集合的大小关系

    这篇文章主要介绍了python 比较两集合的大小关系操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论