C#提取PDF中指定文本与图片坐标的示例代码

 更新时间:2023年12月17日 09:29:01   作者:E-iceblue  
这篇文章主要为大家详细介绍了如何使用国产PDF库通过C# 提取PDF中指定文本或图片的坐标位置(X, Y轴),感兴趣的小伙伴可以跟随小编一起学习一下

获取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 中指定文本的坐标

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

  • 首先需要使用 PdfTextFinder.Find() 方法查找PDF文件中所有指定文本;
  • 查找到文本后,再通过 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 中指定图片的坐标

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

  • 首先使用 PdfImageHelper.GetImagesInfo() 方法获取某个PDF页面中所有图片信息;
  • 获取图片后,再通过 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#实现简单的井字游戏实例

    C#实现简单的井字游戏实例

    这篇文章主要介绍了C#实现简单的井字游戏,以一个完整实例分析了C#实现井字游戏的方法,需要的朋友可以参考下
    2015-06-06
  • C#实现压缩图片为可控制的JPEG格式

    C#实现压缩图片为可控制的JPEG格式

    这篇文章主要为大家详细介绍了使用C#实现将图片压缩为质量可自己控制的JPEG的几种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2024-01-01
  • C#中的Task使用方式

    C#中的Task使用方式

    本文介绍了C#中的Task,这是一种异步编程模型,允许你在不阻塞主线程的情况下执行耗时的操作,文章详细介绍了如何创建、等待、处理异常、延续以及并行执行Task
    2024-12-12
  • 基于WPF实现绘制地铁路线图

    基于WPF实现绘制地铁路线图

    经常坐地铁,却不知道地铁多少条线路?哪个站下车?本文就来带大家利用WPF绘制深圳地铁路线图,从而带大家掌握WPF在图形绘制方面的一些知识,希望对大家有所帮助
    2023-06-06
  • c#使用linq把多列的List转化为只有指定列的List

    c#使用linq把多列的List转化为只有指定列的List

    这篇文章主要介绍了c#使用linq把多列的List转化为只有指定列的List,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • C#实现TCP连接信息统计的方法

    C#实现TCP连接信息统计的方法

    这篇文章主要介绍了C#实现TCP连接信息统计的方法,可实现有效获取TCP连接信息及连接状态的功能,需要的朋友可以参考下
    2015-07-07
  • 基于C#实现简单的二维码和条形码的生成工具

    基于C#实现简单的二维码和条形码的生成工具

    这篇文章主要为大家详细介绍了如何基于C#实现简单的二维码和条形码工具,用于二维码条形码的生成与识别,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C#实现将程序运行信息写入日志的方法

    C#实现将程序运行信息写入日志的方法

    这篇文章主要介绍了C#实现将程序运行信息写入日志的方法,可实现将程序运行信息写入日志并存储在Debug目录下的"/Log/PRG"下的功能,涉及C#针对日志的相关写入技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#中实现线程安全单例模式的多种方法

    C#中实现线程安全单例模式的多种方法

    在C#中实现线程安全的单例模式通常涉及确保类的实例在多线程环境中只被创建一次,并且这个实例在应用程序的生命周期内是唯一的,以下是几种常见的方法来实现线程安全的单例模式,需要的朋友可以参考下
    2025-01-01
  • C#使用Oracle.ManagedDataAccess.dll组件连接Oracle数据库

    C#使用Oracle.ManagedDataAccess.dll组件连接Oracle数据库

    这篇文章介绍了C#使用Oracle.ManagedDataAccess.dll组件连接Oracle数据库的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论