Python PDF文本处理技巧 - 查找和高亮文字

news2024/9/27 7:17:10

目录

使用工具

Python在PDF中查找和高亮文字并统计出现次数和页码

Python在PDF的特定页面区域中查找和高亮文字

Python使用正则表达式在PDF中查找和高亮文字

Python在PDF中查找文字并获取它的坐标位置

其他查找条件设置


在日常工作和学习中,我们常常需要处理各种PDF文件。其中对文字内容进行查找和高亮是非常常见的需求。以工作场景为例,我们可能需要快速检索一份长篇报告中的关键信息。利用PDF的查找功能,我们能够迅速定位到相关内容,大幅提高工作效率。同时,通过高亮标注重要信息,我们能够方便地进行日后复习和回顾。这篇博客将探讨如何使用Python实现在PDF中查找和高亮文字,主要涵盖以下内容:

  • Python在PDF中查找和高亮文字并统计出现次数和页码
  • Python在PDF的特定页面区域中查找和高亮文字
  • Python使用正则表达式在PDF中查找和高亮文字
  • Python在PDF中查找文字并获取它的坐标位置
  • 其他查找条件设置

使用工具

要在Python应用程序中查找和高亮PDF中的文字,可以使用Spire.PDF for Python库。它支持在Python应用程序中创建、读取、操作和转换PDF文档。

你可以通过在终端运行以下命令来从PyPI安装Spire.PDF for Python:

pip install Spire.PDF

Python在PDF中查找和高亮文字并统计出现次数和页码

Spire.PDF for Python提供了PdfTextFinder类,用于查找PDF页面上的文字。使用该类的Find() 方法,你可以搜索特定的文字或句子。找到后,你可以为其设置高亮颜色,同时还能获取该文字在PDF文档中出现的次数以及所在的页码信息。

下面是在PDF中查找和高亮文字的具体步骤:

  • 创建PdfDocument类的实例并使用PdfDocument.LoadFromFile()加载PDF文档。
  • 初始化一个计数器来跟踪文本出现的次数以及一个列表来存储文本出现的页码。
  • 遍历PDF中的页面。
  • 为每个页面创建一个PdfTextFinder实例并将当前页面对象作为参数传入该类的构造函数。
  • 使用PdfTextFinder.Find()方法查找特定文本。该方法将返回一个PdfTextFragment对象列表,其中每个对象代表该文本在文档中的一个实例。
  • 遍历列表中的PdfTextFragment对象,使用PdfTextFragment.Highlight()方法高亮每个实例,同时递增文本出现的次数并将当前页码添加到列表。
  • 使用PdfDocument.SaveToFile()方法保存结果文档。
  • 打印文本在PDF中出现的次数和页码。

下面是在PDF中查找和高亮文字的Python代码:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 类的对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("什么是python.pdf")

# 初始化一个计数器来跟踪文本出现的次数
occurrence_count = 0
# 初始化一个列表来存储页码
page_numbers = []

# 遍历文档中的页面
for i in range(doc.Pages.Count):
    page = doc.Pages[i]
    # 创建 PdfTextFinder 实例
    finder = PdfTextFinder(page)
    # 查找特定文本
    results = finder.Find("Python")
    # 遍历找到的所有实例
    for text in results:
        # 设置高亮颜色
        text.HighLight(Color.get_Yellow())
        # 递增文本出现次数
        occurrence_count += 1
        # 将页码添加到列表中
        page_numbers.append(i+1)

# 保存结果文档
doc.SaveToFile("查找和高亮文本.pdf")
doc.Close()

# 打印出现次数和页码
print(f"文本 'Python' 在 PDF 中出现了 {occurrence_count} 次。")
print(f"该文本出现在以下页码: {', '.join(map(str, page_numbers))}")

Python在PDF中查找和高亮文本并统计出现次数和页码

Python在PDF的特定页面区域中查找和高亮文字

除了在PDF文档的所有页面或特定页面中查找和高亮文字(见以上例子)以外,你还可以在特定的页面区域中查找和高亮文字。使用PdfTextFinder.Options.Area属性,你可以指定查找的页面区域。

下面是在PDF的特定页面区域中查找和高亮文字的具体步骤:

  • 创建PdfDocument类的实例并使用PdfDocument.LoadFromFile()加载PDF文档。
  • 遍历PDF中的页面。
  • 为每个页面创建一个PdfTextFinder实例并将当前页面对象作为参数传入该类的构造函数。
  • 通过PdfTextFinder.Options.Area属性指定查找的页面区域。
  • 使用PdfTextFinder.Find()方法查找特定文本。
  • 使用PdfTextFragment.Highlight()方法高亮每个找到的实例。
  • 使用PdfDocument.SaveToFile()方法保存结果文档。

下面是在PDF的特定页面区域中查找和高亮文字的Python代码:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 类的对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("什么是python.pdf")

# 遍历文档中的页面
for i in range(doc.Pages.Count):
    page = doc.Pages[i]
    # 创建 PdfTextFinder 实例
    finder = PdfTextFinder(page)
    # 指定查找的页面区域
    finder.Options.Area = RectangleF(0.0, 0.0, 300.0, 300.0)
    # 查找特定文本
    results = finder.Find("Python")
    # 遍历找到的所有实例
    for text in results:
        # 设置高亮颜色
        text.HighLight(Color.get_Yellow())

# 保存结果文档
doc.SaveToFile("在页面区域中查找和高亮文本.pdf")
doc.Close()

Python使用正则表达式在PDF中查找和高亮文字

要在PDF中使用正则表达式查找和高亮文字,你首先需要将PdfTextFinder.Options.Parameter属性设置为TextFindParameter.Regex,以启用正则表达式查找。然后,你需要将正则表达式作为参数传递给Find()方法来实现基于正则表达式查找文字。

下面是使用正则表达式在PDF中查找和高亮文字的具体步骤:

  • 创建PdfDocument类的实例并使用PdfDocument.LoadFromFile()加载PDF文档。
  • 遍历PDF中的页面。
  • 为每个页面创建一个PdfTextFinder实例并将当前页面对象作为参数传入该类的构造函数。
  • PdfTextFinder.Options.Parameter属性设置为TextFindParameter.Regex以启用正则表达式文本查找模式。
  • 将正则表达式传递给PdfTextFinder.Find()方法来实现基于正则表达式查找特定文本。
  • 使用PdfTextFragment.Highlight()方法高亮每个匹配到的实例。
  • 使用PdfDocument.SaveToFile()方法保存结果文档。

下面是使用正则表达式在PDF中查找和高亮文字的Python代码:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 类的对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("示例.pdf")

# 遍历文档中的页面
for i in range(doc.Pages.Count):
    page = doc.Pages[i]
    # 创建 PdfTextFinder 实例
    finder = PdfTextFinder(page)
    # 设置文本查找条件为使用正则表达式查找
    finder.Options.Parameter = TextFindParameter.Regex

    # 查找以符号 “#” 开头的文本
    results = finder.Find("""\\#\\w+\\b""")
    # 遍历找到的所有实例
    for text in results:
        # 设置高亮颜色
        text.HighLight(Color.get_Yellow())

# 保存结果文档
doc.SaveToFile("使用正则表达式查找和高亮文本.pdf")
doc.Close()

Python在PDF中使用正则表达式查找和高亮文本

Python在PDF中查找文字并获取它的坐标位置

在找到特定的文字后,你还可以获取它的相关信息,例如它的坐标位置。下面是在PDF中查找文字并获取它的坐标信息的具体步骤:

  • 创建PdfDocument类的实例并使用PdfDocument.LoadFromFile()加载PDF文档。
  • 遍历PDF中的页面。
  • 为每个页面创建一个PdfTextFinder实例并将当前页面对象作为参数传入该类的构造函数。
  • 使用PdfTextFinder.Find()方法查找特定文本。
  • 使用PdfTextFragment.Positions[0].XPdfTextFragment.Positions[0].Y属性获取每个找到的实例的X和Y坐标

下面是在PDF中查找文字并获取它的坐标位置的Python代码:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 类的对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("什么是python.pdf")

# 遍历文档中的页面
for i in range(doc.Pages.Count):
    page = doc.Pages[i]
    # 创建 PdfTextFinder 实例
    finder = PdfTextFinder(page)

    # 查找特定文本
    results = finder.Find("Python")
    # 遍历找到的所有实例
    for text in results:
        # 打印当前实例的坐标信息
        print(f"文本坐标: ({text.Positions[0].X}, {text.Positions[0].Y})")        
        
doc.Close()

Python获取PDF中文字的坐标位置

其他查找条件设置

Spire.PDF for Python还支持设置其他查找条件,如不区分大小写全词匹配。具体代码如下:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 类的对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("什么是python.pdf")

# 遍历文档中的页面
for i in range(doc.Pages.Count):
    page = doc.Pages[i]
    # 创建 PdfTextFinder 实例
    finder = PdfTextFinder(page)
    # 设置文本查找条件为不区分大小写和全词匹配
    finder.Options.Parameter = TextFindParameter.IgnoreCase
    finder.Options.Parameter = TextFindParameter.WholeWord
    # 查找特定文本
    results = finder.Find("Python")
    # 遍历找到的所有实例
    for text in results:
        # 设置高亮颜色
        text.HighLight(Color.get_Yellow())

# 保存结果文档
doc.SaveToFile("其他查找条件.pdf")
doc.Close()

这篇文章介绍了使用Python在PDF中查找和高亮文字的多种不同的场景,你需要根据自己的实际情况对代码中的文档路径、待查找的文字、页面区域、或正则表达式等内容进行相应的修改。

本文完结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

命令-响应框架在 ESP RainMaker 中的应用

【如果您之前有关注乐鑫的博客和新闻,那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注,建议先查看相关信息,知晓本文背景。】 在 ESP RainMaker 中,管理员用户可以查看一些基本的节点数据,包括类型、型…

【Liunx】线程与进程的经典面试题总结

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 线程与进程的面试题总结 1 简述什么是LWP2 简述LWP与pthread_create创建的线程之间的关系3 简述轻量级进程ID与进程ID之间的区别4 请简述什么是线程互斥,为什么需要互斥5 简述你了解的进程间通信方式…

【免费测试】人脸身份证比对接口如何用Java对接?(二)

一、什么是人脸身份证比对? 人脸身份证比对又称人证比对,实人比对,人像比对,输入姓名、身份证号码和头像照片,与公安库身份证头像进行权威比对,返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

安科瑞智慧能源管理平台在电动汽车虚拟电厂优化调度起到什么作用?

摘要:大量电动汽车用户的无序充电可能造成电网负荷剧烈波动,危及电网的安全稳定。随着电动汽车入网技术的应用,将电动汽车充电站及其周边的分布式新能源发电聚合为虚拟电厂后进行优化调度,有助于改善电动汽车用户充放电的经济性及…

深入LVS内核世界:揭秘其高效背后的技术细节与实现机制

LVS简介 Linux virtual server,即Linux虚拟服务器,是一种基于Linux平台的高性能、高可用的服务器负载均衡技术。它主要工作在网络层、传输层(OSI参考模型的第三层、第四层),主要通过IP地址和端口号来转发网络流量。LV…

【Dash】Web 应用程序中的可复用组件

一、Reuable Comopnents By writing our makup in Python, we can create complex reusable components like tables without switching contexts or languages. from dash import Dash, html import pandas as pddf pd.read_csv(https://raw.githubusercontent.com/GarciaS…

程序包javax.annotation不存在

1、问题 程序包javax.annotation不存在2、原因 JDK1.8升级到17后,由于Java EE已经变更为Jakarta EE,包名以 javax 开头的需要改为 jakarta 3、解决 import javax.annotation.Resource; 替换成 import jakarta.annotation.Resource; 问题解决。 …

基于STM32开发的智能灌溉系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 农业灌溉园艺灌溉常见问题及解决方案 常见问题解决方案结论 1. 引言 智能灌溉系统通过监测土壤湿度和环境条件,自动控制水泵和阀门,实现…

Linux系统驱动(十)设备树

文章目录 一、简介二、设备树语法(一)设备树的组成1. 节点的组成(1)节点的别名(2)节点可以被引用(3)同名节点的合并 2. 属性的组成(1)值的字符串表示形式&…

基于STM32开发的停车场管理系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 商业停车场管理住宅区停车场管理常见问题及解决方案 常见问题解决方案结论 1. 引言 停车场管理系统通过监测车辆进出情况、空余车位数量以及收费情况&#xff0…

7.2 算法设计与分析-分治法和回溯法

分治法 相对简单,考的概率比较低 分治法:对于一个规模为的问题,若该问题可以容易地解决则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解决这些子问题&…

Proxmox Install 8

Proxmox 前言 Proxmox Virtual Environment(简称PVE)是一个开源的服务器虚拟化解决方案,它基于QEMU/KVM和LXC技术。Proxmox VE提供了一个易于使用的Web界面和命令行工具,允许用户轻松地创建和管理虚拟机(VMs)和容器。 Proxmox download Proxmox 官网下载Proxmox 百度网…

Midjourney入门-提示词基础撰写与公式

​ 前言 在前几篇教程里我们已经可以初步使用Midjourney进行出图了。 包括也了解了Midjourney的指令与参数。 但如果你想用Midjourney去生成各种各样高质量的图片, 并且生成的图片是你想要的画面内容,也就是更好控制生成图片的画面内容与风格&#xf…

电脑小白需要知道这些

电脑小白需要知道这些 解决问题 对于刚买到电脑,不懂电脑的新手需要学什么和知道什么,有什么是误区 需要知道 1.Wiodws 10\Windows11不在需要安装杀毒软件 甚至于电脑自带防火墙都可以关闭(有时候打开了防火墙反而导致一些奇奇怪怪的问题…

【书生大模型实战营】基础岛-浦语提示词工程实践

【书生大模型实战营】基础岛-浦语提示词工程实践 活动地址:地址 任务 背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为…

生成式AI,在中国工业找到新“活法”

生成式AI,正在经历一场关于落地前景的论战。 在德国中北部城市希尔德斯海姆,世界工业巨头博世已经把生成式AI技术用在了生产线上。他们以AI仿真绘制的方式合成出超过15000张关于产品缺陷的图片,然后将其应用于电机定子生产线的质检。借助生成…

指针基础知识(笔记)

文章目录 1. 概念理解2. 空指针和野指针3. 计算4. 小结5. size_t6. 案例一: 指针查找并返回指定元素索引7. 指针访问多维数组(涉及 int (*ptr)[3]解析)8. 指针数组9. 函数的值传递与地址引用传递① 函数的值传递(pass by value)② 地址传递(pass by reference) 10. 案例二&…

初学Vue

1.v-text 2.v-html 可以解析标签 3.v-pre 4.class绑定 1.字符串绑定 效果 2.对象绑定 效果 3.数组 还可以用data数据带class加上去 4.三元表达式 5.style绑定 1.字符串 2.对象绑定 3.数组绑定 6.计算属性 调用函数 函数如下 面试:计算属性特点 只要值 没有改变…

【Week-G7】Semi-Supervised GAN 实践,使用MNIST数据集

文章目录 一、基础知识二、代码实现2.1 导入所需模块 & 设置网络初始参数2.2 初始化权重2.3 定义算法模型2.4 配置模型2.5 训练模型2.6 训练结果 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导…

使用 Claude3.5 只需 2 分钟快速构建仪表盘

这是用 claude 生成的图表,只花了 2 分钟 目录 Claude何时使用Artifacts?我如何使用Artifacts?我的例子让claude导出本地部署结尾 关键还可以分享 这是分享之后的链接: https://claude.site/artifacts/1cf37377-1d00-4ab2-b8dd-a…