获取PDF文件中文字或图片的坐标可以实现精确定位,这对于快速提取指定区域的元素,以及在PDF中添加注释、标记或自动盖章等操作非常有用。本文将详解如何使用国产PDF库通过C# 提取PDF中指定文本或图片的坐标位置(X, Y轴)。

✍ 用于操作PDF文件的第三方库为Spire.PDF for .NET。可以下载产品包后手动安装或者直接通用Nuget安装。

开始前我们首先了解该库关于PDF中坐标系的一些信息:

Spire.PDF for .NET使用 PdfPageBase 类表示PDF页面,由内容区域和四周的页边距组成。页面上坐标系的原点位于内容区域的左上角,x 轴从原点开始水平向右延伸,y 轴从原点开始垂直向下延伸 (如下图所示)。

通过指定坐标XY轴,我们可以在PDF页面指定位置处绘制文本图片表格等元素。当然Spire.PDF for .NET也提供了相应的接口来帮助大家获取已有PDF文件中指定文本或图片的坐标信息。具体操作如下。

C# 获取 PDF 中指定文本的坐标

要指定文本的坐标,主要分为两步实现:

  1. 首先需要使用 PdfTextFinder.Find() 方法查找PDF文件中所有指定文本;
  2. 查找到文本后,再通过 PdfTextFragment.Positions 属性进一步获取其 (X, Y) 坐标信息。

代码:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Drawing; namespace GetCoordinatesOfText
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument(); //加载PDF文件
pdf.LoadFromFile("大数据.pdf"); //遍历所有页面
foreach (PdfPageBase page in pdf.Pages)
{
//创建PdfTextFinder对象
PdfTextFinder finder = new PdfTextFinder(page); //设置查找选项
PdfTextFindOptions options = new PdfTextFindOptions();
options.Parameter = TextFindParameter.IgnoreCase;
finder.Options = options; //查找页面中所有指定文本
List<PdfTextFragment> fragments = finder.Find("海量"); //遍历所有查找的文本
foreach (PdfTextFragment fragment in fragments)
{
//获取文本的坐标信息
PointF found = fragment.Positions[0];
Console.WriteLine(found);
}
}
}
}
}

C# 获取 PDF 中指定图片的坐标

与获取文字坐标类似,获取图片坐标主要也分为两步:

  1. 首先使用 PdfImageHelper.GetImagesInfo() 方法获取某个PDF页面中所有图片信息;
  2. 获取图片后,再通过 PdfImageInfo.Bounds 属性获取其 (X, Y) 坐标信息。

代码:

using Spire.Pdf;
using Spire.Pdf.Utilities;
using System; namespace GetCoordinatesOfImage
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument(); //加载PDF文件
pdf.LoadFromFile("大数据.pdf"); //获取指定页面
PdfPageBase page = pdf.Pages[0]; //创建PdfImageHelper对象
PdfImageHelper helper = new PdfImageHelper(); //获取页面中的图片信息
PdfImageInfo[] images = helper.GetImagesInfo(page); //获取第一张图片的 X、Y 坐标
float xPos = images[0].Bounds.X;
float yPos = images[0].Bounds.Y;
Console.WriteLine("图片坐标为({0},{1})", xPos, yPos);
}
}
}

加载的示例文档:

获取PDF中文字坐标的返回结果:

获取PDF中图片坐标的返回结果:

相关推荐阅读:

C# 提取 PDF 文档中的文本

C# 提取PDF中的图片

C# 查找并高亮PDF中的指定文本

Spire.PDF for .NET库的API文档

C# 提取PDF中指定文本、图片的坐标的更多相关文章

  1. Java 在PDF中添加水印——文本/图片水印

    水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下Java示例,将分别使用insertTextWatermark(PdfPageBas ...

  2. Java 添加、提取PDF中的图片

    Spire.Cloud.SDK for Java提供了PdfImagesApi接口可用于添加图片到PDF文档addImage().提取PDF中的图片extractImages(),具体操作步骤和Jav ...

  3. 在线提取PDF中图片和文字

    无需下载软件,你就可以在线提取PDF中图片和文字,http://www.extractpdf.com/不仅可以获取本地PDF文档的图片和文字,还能获取远程PDF文档的图片和文字.如下图所示:结果本人测 ...

  4. Java 提取Word中的文本和图片

    本文将介绍通过Java来提取或读取Word文档中文本和图片的方法.这里提取文本和图片包括同时提取文档正文当中以及页眉.页脚中的的文本和图片. 使用工具:Free Spire.Doc for Java ...

  5. 使用openxml提取word中的文本和图片并转为Html

    使用openxml提取word中的文本和图片 使用 openXml 提取 word 中的 Text 和 Drawing 使用 openXml 将 word 中的文本和图片转为Html 使用 openX ...

  6. C# 提取PDF中的表格

    本文介绍在C#程序中(附VB.NET代码)提取PDF中的表格的方法,调用Spire.PDF for .NET提供的提取表格的类以及方法等来获取表格单元格中的文本内容:代码内容中涉及到的主要类及方法归纳 ...

  7. C#提取PPT文本——提取SmartArt中的文本、批注中的文本

    提取文本的情况在工作和学习中常会遇到,在前面的文章中,已经讲述了如何提取PPT中文本框里的文本,在本篇文章中,将介绍如何使用C#代码语言提取PPT文档中SmartArt和批注中的文本.同样的,程序里面 ...

  8. java itext替换PDF中的文本

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

  9. C# 设置或验证 PDF中的文本域格式

    概述 PDF中的文本域可以通过设置不同格式,用于显示数字.货币.日期.时间.邮政编码.电话号码和社保号等等.Adobe Acrobat提供了许多固定的JavaScripts用来设置和验证文本域的格式, ...

  10. Java 读取PDF中的文本和图片

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取.   使用工具:Free Spire.PDF for Ja ...

随机推荐

  1. 快手Java一面11问(附参考答案)

    现在已经到了面试招聘比较火热的时候,后续会分享一些面试真题供大家复习参考.准备面试的过程中,一定要多看面经,多自测! 今天分享的是一位贵州大学的同学分享的快手一面面经. 快手一面主要会问一些基础问题, ...

  2. 如何修改min.js或者压缩后的js,以便提高代码的可读性。

    前端的js上线的时候一般会使用打包工具处理(webpack,gulp,ugly.js 等).这样做有几点作用. 可以压缩空间,提高页面响应速度 一定程度上可以保护自己的代码安全,防止别人清晰看懂逻辑或 ...

  3. 《CTFshow-Web入门》08. Web 71~80

    @ 目录 web71 题解 原理 web72 题解 原理 web73 题解 web74 题解 web75 题解 原理 web76 题解 web77 题解 原理 web78 题解 原理 web79 题解 ...

  4. MIPS寄存器堆

    实验目的 熟悉并掌握 MIPS 计算机中寄存器堆的原理和设计方法 理解源操作数/目的操作数的概念 实验环境 Vivado 集成开发环境 MIPS寄存器 寄存器R0的值恒为0. 模块接口设计 1个写端口 ...

  5. JavaAgent寄生在目标进程中引起的ClassNotFoundException

    今天有解决方案部的小伙伴反映,我公司XWind产品在分析客户应用程序的潜在性能问题时,总是显现诊断任务异常,为了定位问题的根因,我们马上要求解决方案部的小伙伴提供XWind相关的日志,从日志中找到了如 ...

  6. Teamcenter RAC 开发之《PlaceHolder》

    背景 做个swing表单,有时候想实现一些网页input标签的placeHolder提示,可能本人写vue or html写多,对某些细节有强迫症,所以找小下资料 实现方法(Swingx) 看源码

  7. Docker V24 及 Docker Compose V2 的安装及使用

    前言 Docker 是一款流行的开源容器化平台,使用 Docker 可以有效地隔离应用程序和系统环境,使得应用程序在不同的环境中具有相同的行为 Docker Compose 是一个用于定义和管理多个 ...

  8. TOP GP 把已经编译的per反编回对应版本的4fd(画面档)

    由于GP5.1,5.2,5.3的genero对应版本画面档开发互不兼容,下面提供各版本之间互转的操作方法: xshell切换到要反编译的per档目录,执行以下命令,就会在同目录下生成对应4fd档资料 ...

  9. ERP 财务管理的应付帐款流程

    导读:应付帐款流程与应收帐款流程是财务管理的开端,也是财务工作的主要流程.若能够这两大流程控制好了,ERP系统的财务模块也就成功了一大半了.我先讲一下财务管理的应付帐款流程. 企业的应付帐款有很多种类 ...

  10. Java虚拟机(JVM):第二幕:自动内存管理 - Java内存区域与内存溢出异常

    前言:Java与C++之间有一堵高墙,主要是有内存动态分配和垃圾收集技术组成的.墙外的人想要进来,墙内的人想要出去. 一.运行时数据区域 JVM在执行Java程序时,会将其管理的内存划分为若干个不同的 ...