当前位置: 首页 > 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

相关文章:

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

在处理和分析PDF文档时,获取文本和图片在页面上的精确位置是一个重要的操作。通过确定这些元素的具体坐标,我们可以实现对PDF内容的更精细控制和理解,这对于自动化文档处理、信息提取以及内容重组等工作流程尤为关键。通过Python编程语言&…...

【AI日记】24.12.25 kaggle 比赛 2-13

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset时间:8 小时 读书 书名:我们能做什么 : 胡适与中国青年最真诚的分享时间:1.5 小时 律己 工作…...

【网络安全】用 Frida 修改软件为你所用

用 Frida 修改软件为你所用 Frida是一个强大的设备操作工具,它允许我们分析、修改和与运行中的应用程序交互。Frida通过在目标进程中创建一个线程,并通过这个线程执行一些启动代码来实现交互功能。这种交互被称为“代理”,它允许我们添加Jav…...

《信管通低代码信息管理系统开发平台》Windows环境安装说明

1 简介 《信管通低代码信息管理系统应用平台》提供多环境软件产品开发服务,包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发,满足其独特需求。无论是简单的应用还是复杂的系统&…...

使用强化学习与遗传算法优化3D低空物流路径_版本2

在快速发展的物流与自主系统领域,优化无人机在三维空间中的飞行路径至关重要。无论是在城市环境中导航还是在复杂地形中穿行,确保高效、安全且节能的航线规划能够显著提升运营效率。本文将深入探讨一种创新方法,结合强化学习(Rein…...

【MinIO系列】MinIO Client (mc) 完全指南

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【微信小程序】2|轮播图 | 我的咖啡店-综合实训

轮播图 引言 在微信小程序中,轮播图是一种常见的用户界面元素,用于展示广告、产品图片等。本文将通过“我的咖啡店”小程序的轮播图实现,详细介绍如何在微信小程序中创建和管理轮播图。 轮播图数据准备 首先,在home.js文件中&a…...

React与Vue的区别(相同点和不同点)

前言 JavaScript是世界上最流行的语言之一,React和Vue是JS最流行的两个框架。但各有优缺点,本文将详细对比两大框架 一、框架背景 React React是由Facebook开发的用于构建用户界面的JavaScript库,Facebook对市场上JavaScript MVC框架都不太…...

Python语言的文件操作

Python语言的文件操作 在现代编程中,文件操作是每个程序员都需要掌握的基本技能之一。无论是数据的持久化存储、日志的记录,还是配置信息的读取,文件操作都是不可或缺的一部分。Python作为一种高级编程语言,其简单易用的文件操作…...

前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现

工具介绍: pako.js 前端压缩解压的库(包含 zlib 和gzip 两种实现,这里只介绍 zlib) pako 2.0.4 API documentation Java8 原生支持 zlib 和 gzip 业务场景 因为数据太大,网络环境不可控。故前端需要将数据 A 先压缩…...

unity 打包出来的所有执行文件内容打包成一个exe程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、使用Enigma Virtual Box1.下载安装包(根据需要32位还是64位。一般是64位)2.改个语言,方便使用(改了后重启才…...

华为管理变革之道:组织文化与活力

目录 企业文化是什么? 为什么活下去是华为的文化? 活下来,是华为公司的最低纲领,也是华为公司的最高纲领! 资源终会枯竭,唯有文化才能生生不息 企业文化之一:以客户为中心 企业文化之二&a…...

仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码

市场前景 闲置物品交易软件的市场前景广阔,主要基于以下几个方面的因素: 环保意识提升:随着人们环保意识的增强,越来越多的人开始关注资源的循环利用,闲置物品交易因此受到了广泛的关注。消费升级与时尚节奏加快&…...

PostgreSQL CRUD 操作指南

PostgreSQL CRUD 操作指南 连接数据库 -- 连接到特定数据库 psql -U postgres -d xianxia-- 列出所有数据库 \l-- 切换数据库 \c xianxia-- 列出所有表 \dt-- 查看表结构 \d table_name基本 CRUD 操作 CREATE(创建) -- 创建新表 CREATE TABLE users …...

4X4规模S盒分量布尔函数计算工具(附各大常见分组加密算法S盒查找表和其对应分量布尔函数截图)

文章结尾有S盒分量布尔函数计算工具下载地址 Serpent {0x3,0x8,0xF,0x1,0xA,0x6,0x5,0xB,0xE,0xD,0x4,0x2,0x7,0x0,0x9,0xC} LBlock {0xE,0x9,0xF,0x0,0xD,0x4,0xA,0xB,0x1,0x2,0x8,0x3,0x7,0x6,0xC,0x5} GOST {0x4,0xA,0x9,0x2,0xD,0x8,0x0,0xE,0x6,0xB,0x1,0xC,0x7,0xF,0x5,0…...

模拟——郑益慧_笔记1_绪论

B站视频链接 模电是数电的基础;参考书: 模拟电子技术基础(第四版)华成英、童诗白主编,高等教育出版社;电子技术基础 模拟部分 康华光主编,高等教育出版社; 电子技术的发展史 电子…...

金融租赁系统的发展与全球化战略实施探讨

内容概要 金融租赁系统的演变并非一帆风顺,像一场跌宕起伏的电影。首先,咱们得看看它的起源及现状。随着经济的快速发展,金融租赁逐渐作为一种灵活的融资手段崭露头角。在中国市场中,企业对设备和技术更新换代的需求日益迫切&…...

vue3入门教程:计算属性

计算属性的基本用法 计算属性是通过computed函数创建的&#xff0c;它接受一个getter函数作为参数&#xff0c;并返回一个只读的响应式ref对象。该ref对象通过.value属性暴露getter函数的返回值。 <template><div><p>原始数据: {{ count }}</p><p…...

Docker怎么关闭容器开机自启,批量好几个容器一起操作?

环境&#xff1a; WSL2 docker v25 问题描述&#xff1a; Docker怎么关闭容器开机自启&#xff0c;批量好几个容器一起操作&#xff1f; 解决方案&#xff1a; 在 Docker 中&#xff0c;您可以使用多种方法来关闭容器并配置它们是否在系统启动时自动启动。以下是具体步骤和…...

shell脚本(全)

shell脚本概述 第一个shell脚本 shell注释 shell变量 shell位置参数 shell字符串 shell内置命令 shell命令替换 输出 流程控制IF export命令 退出脚本 运行Shell脚本 实例导航 shell脚本概述 在说什么是shell脚本之前&#xff0c;先说说什么是shell。 从程序员的…...

开发时如何通过Service暴露应用?ClusterIP、NodePort和LoadBalancer类型的使用场景分别是什么?

一、Service核心概念 Service通过标签选择器&#xff08;Label Selector&#xff09;关联Pod&#xff0c;为动态变化的Pod集合提供稳定的虚拟IP和DNS名称&#xff0c;主要解决&#xff1a; 服务发现负载均衡流量路由 二、Service类型详解 1. ClusterIP&#xff08;默认类型…...

RabbitMQ 应用 - SpringBoot

以下介绍的是基于 SpringBoot 的 RabbitMQ 开发介绍 Spring Spring AMQP RabbitMQ RabbitMQ tutorial - "Hello World!" | RabbitMQ 工程搭建步骤: 1.引入依赖 2.编写 yml 配置,配置基本信息 3.编写生产者代码 4.编写消费者代码 定义监听类,使用 RabbitListener…...

apache的commons-pool2原理与使用详解

Apache Commons Pool2 是一个高效的对象池化框架&#xff0c;通过复用昂贵资源&#xff08;如数据库连接、线程、网络连接&#xff09;优化系统性能。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击…...

HTML应用指南:利用GET请求获取全国捞王锅物料理门店位置信息

随着新零售业态的快速发展&#xff0c;门店位置信息的获取变得越来越重要。作为知名中式餐饮品牌之一&#xff0c;捞王锅物料理自2009年创立以来&#xff0c;始终致力于为消费者提供高品质的锅物料理与贴心的服务体验。经过多年的发展&#xff0c;捞王在全国范围内不断拓展门店…...

HTTP 与 HTTPS 深度解析:原理、实践与大型项目应用

1. HTTP 与 HTTPS 基础概念 1.1 HTTP&#xff08;超文本传输协议&#xff09; 定义&#xff1a;应用层协议&#xff0c;基于 TCP/IP 通信&#xff0c;默认端口 80 特点&#xff1a; 无状态协议&#xff08;需 Cookie/Session 维护状态&#xff09; 明文传输&#xff08;易被…...

BPE、WordPiece 与 Unigram:三种主流子词分词算法对比

BPE、WordPiece 与 Unigram&#xff1a;三种主流子词分词算法对比 在构建现代自然语言处理模型时&#xff0c;Tokenizer 是连接文本与模型之间的桥梁。而在 tokenizer 的设计中&#xff0c;BPE&#xff08;Byte Pair Encoding&#xff09;、WordPiece 和 Unigram 三种子词&…...

redis五种数据结构详解(java实现对应的案例)

一、简述 Redis是一款高性能的键值对存储数据库&#xff0c;它支持五种基本数据类型&#xff0c;分别是字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)。 二、五种基本数据类型 2.1 字符串(String) String是Redis最基本的类型&#xff0c;一个key对…...

Dockerfile 编写经验:优化大小与效率

文章目录 Dockerfile 通用的技巧总结1. 使用多阶段构建2. 最小化层数3. 彻底清理4. 选择合适的基镜像5. 仅安装必要的依赖6. 利用构建缓存 常见陷阱总结 Dockerfile 通用的技巧总结 1. 使用多阶段构建 利用多阶段构建分离构建和运行时环境&#xff0c;仅将必要的产物&#xff…...

git reset --hard HEAD~1与git reset --hard origin/xxx

git reset --hard HEAD~1与git reset --hard origin/xxx git reset --hard origin/xxx有时候会太长&#xff0c;手工输入略微繁琐&#xff0c;可以考虑&#xff1a; git reset --hard HEAD~1 替代。 或者使用这种方式 git reset撤销当前分支所有修改&#xff0c;恢复到最近一…...

Python开发AI智能体(九)———构建RAG对话应用

前言 上篇文章我们介绍了如何在Langchain中构建代理 这篇文章我们将带领大家构建一个RAG对话应用 一、什么是RAG对话应用&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;技术通过从外部知识库检索相关信息&#xff0c;并将…...