对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页面指定区域中的文本并替换和高亮的更多相关文章

  1. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:将页面元素所包含的文本内容替换为背景图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 打印web页面指定区域的三种方法

    本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <s ...

  3. asp.net mvc 设置启动页面在区域中

    在开发过程中,我们有时候需要启动区域中的页面为起始页面,那我们就需要子啊路由中添加一段代码 如何完整案例:         public static void RegisterRoutes(Rout ...

  4. iOS 如何判断一个点在某个指定区域中

    在iOS 开发中会遇到 判断位置的情况 iOS 自己都有函数实现的这些功能. 判断一个点是否在这个rect区域中 bool CGRectContainsPoint(CGRect rect,CGPoin ...

  5. JS打印页面指定区域

    错误的写法: //打印 function printPage(areaId) { if (parent.$("#PrinFrame").length == 0) { parent. ...

  6. js打印页面指定区域,并去掉页眉上的时间和请求路径

    需要通过js打印指定页面的内容 <style media=print type="text/css"> .noprint{visibility:hidden} < ...

  7. java 将页面指定区域截图并上传到服务器

    controller层: /** * 上传获取到的收据图片 * @param request * @param data 获取到的图片 * @return */ @RequestMapping(val ...

  8. WordPress中默认文本编辑器替换成百度UEditor编辑器

    1.下载 下载地址: http://pan.baidu.com/s/1geNk19L 2.解压放到plugins目录下 3.插件启用

  9. 使用itext直接替换PDF中的文本

    直接说问题,itext没有直接提供替换PDF中文本的接口(查看资料得到的结论是PDF不支持这种操作),不过存在解决思路:在需要替换的文本上覆盖新的文本.按照这个思路我们需要解决以下几个问题: itex ...

  10. java itext替换PDF中的文本

    itext没有提供直接替换PDF文本的接口,我们可以通过在原有的文本区域覆盖一个遮挡层,再在上面加上文本来实现. 所需jar包: 1.先在PDF需要替换的位置覆盖一个白色遮挡层(颜色可根据PDF文字背 ...

随机推荐

  1. Java虚拟机(JVM):第五幕:自动内存管理 - HotSpot算法细节以及低延迟垃圾收集器

    一.HotSpot算法细节 1.根节点枚举:所有的收集器在根节点枚举的时候,必须暂停用户线程,同时要保证一致性的快照中得以进行.一致性:整个枚举期间执行子系统看起来就像是冻结在某一个时间点上,不会出现 ...

  2. 基本操作:vscode快捷键

      1.复制,剪切 补选中具体内容的话,光标放在这一行的任何位置,输入Ctrl+C,就表示已经复制这一行了:直接Ctrl+V可以粘贴: 截切也一样:光标放在这一行的任何位置,输入Ctrl+X,就表示已 ...

  3. CSP-2023 初赛游记

    9.16 上午 今天就不早读了. 去前做了个 2019 的题,60 多分,感觉挺危. 去比赛前 30min 发现没带身份证,去宿舍拿的. 前 10min 发现没有笔,借了一些,但是发现还有一个小时才开 ...

  4. 快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab

    Walrus 是一款基于平台工程理念的开源应用管理平台,致力于解决应用交付领域的深切痛点.借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境,并支持任意应用形态统一编排部署,降低使用基础设 ...

  5. 什么是PIO

    PIO,最早是我在raspberry pi pico的介绍中偶然看到的一个新词 转载来在[https://zhuanlan.zhihu.com/p/347948344] 关于PIO的介绍如下: MCU ...

  6. vue element ui 组件使用 -form 表单

    表单验证rules 绑定是规则 也可以自定义规则,:model是表单的数据源 el-form-item 标签里面prop的名字要和数据源的名字一致,才能验证生效 ;提交时调用this.$refs[fo ...

  7. Postgresql——jsonb类型

    Postgresql Json 最近有个功能,需要用到 NoSQL 数据库.但是又不想因为这个小小的功能给系统增加一个 MongoDB 数据库,于是就想到了 Postgresql 支持 JSON 类型 ...

  8. 3种Sentinel自定义异常,你用过几种?

    Spring Cloud Alibaba Sentinel 是目前主流并开源的流量控制和系统保护组件,它提供了强大的限流.熔断.热点限流.授权限流和系统保护及监控等功能.使用它可以轻松的保护我们微服务 ...

  9. 【Javaweb】java中接口(interface)怎么用

    首先我们先了解什么是接口(interface) 实际情况中,又是我们必须从几个类中派生出一个子类,继承他们所有的属性和方法.但是,JAVA中是不支持多重继承的,那么为了满足这一目的,就有了接口,就可以 ...

  10. 如何使用 PreparedStatement 来避免 SQL 注入,并提高性能?

    前言 本篇文章主要如何使用 PreparedStatement 来避免 SQL 注入,并提高性能? 欢迎点赞 收藏 留言评论 私信必回哟 博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 ...