C# 查找PDF页面指定区域中的文本并替换和高亮
对PDF文档中的内容进行查找时,可针对文档全篇内容获取查找结果,也可在PDF指定页面中的特定范围内(矩形框区域)进行查找,对获取的查找结果可执行文本高亮或替换等操作,本文将对此作相关介绍(附VB.NET代码,有需要可参考)。
关于工具使用
工具:需下载Spire.PDF for .NET Pack hotfix 6.12.20版本(注:hotfixt版本无需安装,若下载的是Pack版本则需要安装至本地路径,可在安装后,查看演示程序及API)。
引用:下载并解压到本地路径,将Bin文件夹下的Spire.Pdf.dll文件添加引用至VS程序,具体引用方法可参考如下步骤:
在VS程序中打开“解决方案资源管理器”-鼠标右键点击“引用”-“添加引用”-然后执行如下操作:

添加引用结果如图:

C# 代码
using Spire.Pdf;
using Spire.Pdf.General.Find;
using Spire.Pdf.Graphics;
using System.Drawing; namespace FindAndHighlightText2
{
class Program
{
static void Main(string[] args)
{
//加载PDF测试文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("咖啡豆.pdf", FileFormat.PDF); //指定需要查找的页面区域范围
RectangleF pagerec = new RectangleF(0, 0, 500, 700); //在第一页的指定区域查找指定文本
PdfTextFindCollection findCollection1 = pdf.Pages[0].FindText(pagerec, "咖啡豆", TextFindParameter.WholeWord);
PdfTextFindCollection findCollection2 = pdf.Pages[0].FindText(pagerec, "洪都拉斯", TextFindParameter.WholeWord); //替换查找结果
PdfBrush brush = new PdfSolidBrush(Color.Red);
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 12f, FontStyle.Regular)); RectangleF textrec;
foreach (PdfTextFind find1 in findCollection1.Finds)
{
textrec = find1.Bounds;
pdf.Pages[0].Canvas.DrawRectangle(PdfBrushes.White, textrec);
pdf.Pages[0].Canvas.DrawString("NewText", font, brush, textrec); } //高亮查找结果
foreach (PdfTextFind find2 in findCollection2.Finds)
{
find2.ApplyHighLight(Color.Yellow);
} //保存文档
pdf.SaveToFile("result.pdf", FileFormat.PDF);
System.Diagnostics.Process.Start("result.pdf");
}
}
}
查找替换及高亮结果如图效果:

Vb.net代码
Imports Spire.Pdf
Imports Spire.Pdf.General.Find
Imports Spire.Pdf.Graphics
Imports System.Drawing Namespace FindAndHighlightText2
Class Program
Private Shared Sub Main(args As String())
'加载PDF测试文档
Dim pdf As New PdfDocument()
pdf.LoadFromFile("咖啡豆.pdf", FileFormat.PDF) '指定需要查找的页面区域范围
Dim pagerec As New RectangleF(0, 0, 500, 700) '在第一页的指定区域查找指定文本
Dim findCollection1 As PdfTextFindCollection = pdf.Pages(0).FindText(pagerec, "咖啡豆", TextFindParameter.WholeWord)
Dim findCollection2 As PdfTextFindCollection = pdf.Pages(0).FindText(pagerec, "洪都拉斯", TextFindParameter.WholeWord) '替换查找结果
Dim brush As PdfBrush = New PdfSolidBrush(Color.Red)
Dim font As New PdfTrueTypeFont(New Font("Arial", 12F, FontStyle.Regular)) Dim textrec As RectangleF
For Each find1 As PdfTextFind In findCollection1.Finds
textrec = find1.Bounds
pdf.Pages(0).Canvas.DrawRectangle(PdfBrushes.White, textrec) pdf.Pages(0).Canvas.DrawString("NewText", font, brush, textrec)
Next '高亮查找结果
For Each find2 As PdfTextFind In findCollection2.Finds
find2.ApplyHighLight(Color.Yellow)
Next '保存文档
pdf.SaveToFile("result.pdf", FileFormat.PDF)
System.Diagnostics.Process.Start("result.pdf")
End Sub
End Class
End Namespace
C# 查找PDF页面指定区域中的文本并替换和高亮的更多相关文章
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:将页面元素所包含的文本内容替换为背景图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 打印web页面指定区域的三种方法
本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <s ...
- asp.net mvc 设置启动页面在区域中
在开发过程中,我们有时候需要启动区域中的页面为起始页面,那我们就需要子啊路由中添加一段代码 如何完整案例: public static void RegisterRoutes(Rout ...
- iOS 如何判断一个点在某个指定区域中
在iOS 开发中会遇到 判断位置的情况 iOS 自己都有函数实现的这些功能. 判断一个点是否在这个rect区域中 bool CGRectContainsPoint(CGRect rect,CGPoin ...
- JS打印页面指定区域
错误的写法: //打印 function printPage(areaId) { if (parent.$("#PrinFrame").length == 0) { parent. ...
- js打印页面指定区域,并去掉页眉上的时间和请求路径
需要通过js打印指定页面的内容 <style media=print type="text/css"> .noprint{visibility:hidden} < ...
- java 将页面指定区域截图并上传到服务器
controller层: /** * 上传获取到的收据图片 * @param request * @param data 获取到的图片 * @return */ @RequestMapping(val ...
- WordPress中默认文本编辑器替换成百度UEditor编辑器
1.下载 下载地址: http://pan.baidu.com/s/1geNk19L 2.解压放到plugins目录下 3.插件启用
- 使用itext直接替换PDF中的文本
直接说问题,itext没有直接提供替换PDF中文本的接口(查看资料得到的结论是PDF不支持这种操作),不过存在解决思路:在需要替换的文本上覆盖新的文本.按照这个思路我们需要解决以下几个问题: itex ...
- java itext替换PDF中的文本
itext没有提供直接替换PDF文本的接口,我们可以通过在原有的文本区域覆盖一个遮挡层,再在上面加上文本来实现. 所需jar包: 1.先在PDF需要替换的位置覆盖一个白色遮挡层(颜色可根据PDF文字背 ...
随机推荐
- C、C++函数和类库详解(VC++版)(2016-06-26更新)
C.C++函数和类库详解(VC++版)(未完成) 整理者:赤勇玄心行天道 QQ:280604597 Email:280604597@qq.com 大家有什么不明白的地方,或者想要详细了解的地方可以联系 ...
- docker入门加实战—项目部署之DockrCompose
docker入门加实战-项目部署之DockrCompose 我们部署一个简单的java项目,可能就包含3个容器: MySQL Nginx Java项目 而稍微复杂的项目,其中还会有各种各样的其它中间件 ...
- SpringBoot如何缓存方法返回值?
目录 Why? HowDo annotation MethodCache MethodCacheAspect controller SpringCache EnableCaching Cacheabl ...
- xxl-job默认accessToken命令执行漏洞复现
起因: 昨天看见微步发布XXL-JOB默认accessToken身份绕过漏洞,之前hw期间遇到过几次,都没弱口令和未授权,对其有点印象,遂复现一下. 漏洞影响:2.3.1和2.4 环境准备: 1.下载 ...
- nginx参数调优能提升多少性能
前言 nginx安装后一般都会进行参数优化,网上找找也有很多相关文章,但是这些参数优化对Nginx性能会有多大影响?为此我做个简单的实验测试下这些参数能提升多少性能. 声明一下,测试流程比较简单,后端 ...
- 使用 Vue 3 插件(Plugin)实现 OIDC 登录和修改密码(OIDC 系统以 Keycloak 为例)
背景 目前单位系统常用 Keycloak 作为认证系统后端,而前端之前写的也比较随意,这次用 Vue 3 插件以及 Ref 响应式来编写这个模块.另外,这个可能是全网唯一使用 keycloak 的 O ...
- ST 表
ST 表 定义 ST 表是用于解决 可重复贡献问题 的数据结构,通俗来说,一般可以解决区间查询问题. 区间最值和 \(gcd\) 我们以最大值为例,然后可以再推广到最小值和区间 \(gcd\) 首先你 ...
- 集合-Nim游戏
与普通\(NIM\)游戏不同的地方是限制了每次拿东西的个数,这个个数会给定在集合\(S\)中,也就是说每次拿的数量只能在集合\(S\)中. 现在就可以把每一堆石子看成是一个有向图了,最主要就是用记忆化 ...
- LabVIEW基于机器视觉的实验室设备管理系统(2)
目录 功能计划 普通用户 欢迎登录 信息查询 返回退出程序 效果演示 在前期的准备完成之后呢,就要开始实现我们的程序啦,不过在编程之前,我们一定要计划好这个系统需要什么功能. 功能计划 既然我们做的是 ...
- java笔记——面向对象
1.概述:面向对象是基于面向过程的编程思想 举例:把大象装进冰箱 2.开发:不断的创建对象,使用对象,指挥对象做事情 3.面向对象特征:封装 , 继承 , 多态 4.类和对象的关系: 类是一组相关的属 ...