当前位置: 首页 > news >正文

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

在处理和分析PDF文档时,获取文本和图片在页面上的精确位置是一个重要的操作。通过确定这些元素的具体坐标,我们可以实现对PDF内容的更精细控制和理解,这对于自动化文档处理、信息提取以及内容重组等工作流程尤为关键。通过Python编程语言,我们可以轻松获取PDF页面上文本及图像的精确坐标,使我们能够在不影响其原有排版的情况下对内容进行操作。本文将介绍如何使用Python获取PDF文本和图片在页面上的位置坐标

文章目录

    • 用Python在PDF中查找文本并获取其页面坐标位置
    • 用Python获取PDF页面指定图像的坐标位置

本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install spire.pdf

Spire.PDF for Python通过一个起点位于页面左上角的坐标系来处理PDF页面元素的位置,x轴向右延伸,y轴向下延伸。当我们在PDF页面放置文本、图像等内容时,我们可以直接使用x和y两个数值来确定位置。同时,我们也可以使用库中的属性获取指定元素在其页面上的位置。
页面坐标如图所示:
Spire.PDF for Python PDF页面坐标示意

用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].Xy = text.Positions[0].Y# 获取结束坐标x2 = text.Positions[-1].Xprint("在第 " + str(i+1) + " 页找到文本,坐标:\n" + "X: " + str(x) + "\nY: " + str(y) + "\n")
# 如果没有找到文本,打印未找到的消息
if not textFound:print("未找到文本。")pdf.Close()

结果
Python获取PDF文本位置

用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.Xy = imageInfo.Bounds.Y# 打印坐标信息print(f"第 {i + 1} 页的第 {j + 1} 张图片。坐标:\nX={x}, Y={y}")
# 如果没有找到任何图片,打印未找到图片的消息
if not imageFound:print("文档中没有图片。")
pdf.Close()

结果
Python获取PDF图片位置

本文介绍如何使用Python或PDF文档中文本和图片在页面上的坐标,从而确定其精确位置。

申请免费License

http://www.lryc.cn/news/509588.html

相关文章:

  • 【AI日记】24.12.25 kaggle 比赛 2-13
  • 【网络安全】用 Frida 修改软件为你所用
  • 《信管通低代码信息管理系统开发平台》Windows环境安装说明
  • 使用强化学习与遗传算法优化3D低空物流路径_版本2
  • 【MinIO系列】MinIO Client (mc) 完全指南
  • 【微信小程序】2|轮播图 | 我的咖啡店-综合实训
  • React与Vue的区别(相同点和不同点)
  • Python语言的文件操作
  • 前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
  • unity 打包出来的所有执行文件内容打包成一个exe程序
  • 华为管理变革之道:组织文化与活力
  • 仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码
  • PostgreSQL CRUD 操作指南
  • 4X4规模S盒分量布尔函数计算工具(附各大常见分组加密算法S盒查找表和其对应分量布尔函数截图)
  • 模拟——郑益慧_笔记1_绪论
  • 金融租赁系统的发展与全球化战略实施探讨
  • vue3入门教程:计算属性
  • Docker怎么关闭容器开机自启,批量好几个容器一起操作?
  • shell脚本(全)
  • 华为手机建议使用adb卸载的app
  • 论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式
  • Java基础(Json和Java对象)
  • Linux 中检查 Apache Web Server (httpd) 正常运行时间的 4 种方法
  • Linux驱动开发--字符设备驱动开发
  • MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式)
  • 一文彻底拿捏DevEco Studio的使用小技巧
  • R9000P键盘失灵解决办法
  • 【Linux之Shell脚本实战】编写简单计算器shell脚本
  • 【0x001D】HCI_Read_Remote_Version_Information命令详解
  • 秒鲨后端之MyBatis【2】默认的类型别名、MyBatis的增删改查、idea中设置文件的配置模板、MyBatis获取参数值的两种方式、特殊SQL的执行