C# 提取PDF中指定文本、图片的坐标

获取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文档

相关推荐
SteveDraw2 小时前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
Kookoos2 小时前
性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
后端·c#·.net·abp vnext·miniprofiler
zhanshuo3 小时前
5分钟手把手实战:用HTML5基础结构打造你的个人简介页面
.net
界面开发小八哥3 小时前
界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现数据库依赖?
ui·.net·界面控件·devexpress·ui开发·xaf
zhanshuo3 小时前
5分钟搞定!ASP.NET正则表达式验证控件实战:轻松拦截99%的无效邮箱!
.net
阿翰5 小时前
自动 GitHub Readme 20 种语言翻译平台 - OpenAiTx 开源免费
c#·.net
枫叶kx8 小时前
1Panel运行的.net程序无法读取系统字体(因为使用了docker)
c#
军训猫猫头14 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
不爱写代码的玉子15 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
开开心心就好18 小时前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法