通过C#代码轻松提取PDF文本

 更新时间:2024年11月21日 08:36:59   作者:Eiceblue  
提取PDF中的文本可以帮助我们对PDF文档进行内容再利用,从而制作新的PDF文档或将内容插入到其他格式的文档中,下面我们就来看看如何使用C#代码提取PDF文本吧

PDF格式因其跨平台兼容性强、安全性高等特点而被广泛使用。但PDF文档不易编辑,因此提取PDF文档的文本从而进行操作是一个常见的需求。提取PDF中的文本可以帮助我们对PDF文档进行内容再利用,从而制作新的PDF文档或将内容插入到其他格式的文档中。在.NET平台,我们可以使用简单的C#代码轻松实现PDF文档文本的提取。

本文所使用的方法需要用到Free Spire.PDF for .NET,NuGet:PM> Install-Package FreeSpire.PDF

用C#提取PDF文本的操作步骤

库中提供了PdfTextExtractor类来处理PDF文档的文本提取。我们可以使用页面创建PdfTextExtractor对象,然后使用PdfTextExtractor.ExtractText()方法来提取页面文本。同时,PdfTextExtractOptions类能对提取选项进行设置,如设置是否保留布局和设置提取的页面区域。以下是一般操作步骤。

创建PdfDocument对象。

使用PdfDocument.LoadFromFile()方法载入PDF文档。

使用PdfDocument.Pages[]属性获取指定页面,也可以遍历所有页面。

使用页面创建PdfTextExtractor对象。

创建PdfTextExtractOptions对象并设置提取选项。

使用PdfTextExtractor.ExtractText(PdfTextExtractOptions)方法提取页面文本。

将提取的文本写入文件或用于其他用途。

释放资源。

提取PDF文本不保留文本布局

如果需要不保留文本布局直接提取文本内容,可以将PdfTextExtractOptions.IsSimpleExtraction属性设置为true来实现。以下是代码示例:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;

namespace ExtractPDFText
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建PdfDocument对象
            PdfDocument pdf = new PdfDocument();

            // 载入PDF文档
            pdf.LoadFromFile("Sample.pdf");

            // 创建PdfTextExtractOptions对象,并设置不保留布局
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
            extractOptions.IsSimpleExtraction = true;

            // 创建StringBuilder对象以储存提取的文本
            StringBuilder extractedText = new StringBuilder();

            // 遍历文档页面
            foreach (PdfPageBase page in pdf.Pages)
            {
                // 使用页面创建PdfTextExtractor对象
                PdfTextExtractor extractor = new PdfTextExtractor(page);
                // 提取当前页面的文本
                string text = extractor.ExtractText(extractOptions);
                // 将提取到的文本添加到StringBuilder对象
                extractedText.Append(text);
            }

            // 将提取结果写入文本文件
            using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
            {
                writer.Write(extractedText.ToString());
            }

            // 释放资源
            pdf.Close();
        }
    }
}

结果

保留文本布局提取PDF文本

如果在提取PDF文本时需要保留PDF文本的布局(使用空格填补),则可以直接使用默认的提取选项提取PDF文本。以下是代码示例:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;

namespace ExtractPDFTextAndLayout
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建PdfDocument对象
            PdfDocument pdf = new PdfDocument();

            // 载入PDF文档
            pdf.LoadFromFile("Sample.pdf");

            // 创建文本提取选项
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();

            // 创建StringBuilder对象以储存提取的文本
            StringBuilder extractedText = new StringBuilder();

            // 遍历文档页面
            foreach (PdfPageBase page in pdf.Pages)
            {
                // 使用页面创建PdfTextExtractor对象
                PdfTextExtractor extractor = new PdfTextExtractor(page);
                // 提取当前页面的文本
                string text = extractor.ExtractText(extractOptions);
                // 将提取到的文本添加到StringBuilder对象
                extractedText.Append(text);
            }

            // 将提取结果写入文本文件
            using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
            {
                writer.Write(extractedText.ToString());
            }

            // 释放资源
            pdf.Close();
        }
    }
}

结果

提取PDF页面指定区域内的文本

我们还可以通过PdfTextExtractOptions.ExtractArea属性设置提取区域,从而实现提取页面上指定区域内的文本。以下是代码示例:

using Spire.Pdf.Texts;
using Spire.Pdf;

using System.Drawing;
using System.Text;

namespace ExtractPDFTextArea
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建PdfDocument对象
            PdfDocument pdf = new PdfDocument();

            // 载入PDF文档
            pdf.LoadFromFile("Sample.pdf");

            // 获取指定页面
            PdfPageBase page = pdf.Pages[0];

            // 创建PdfTextExtractor对象
            PdfTextExtractor extractor = new PdfTextExtractor(page);

            // 创建PdfTextExtractOptions对象
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
            // 设置要提取文本的矩形区域
            extractOptions.ExtractArea = new RectangleF(80, 100, 250, 150);

            // 提取页面上指定位置的文本
            string extractedText = extractor.ExtractText(extractOptions);

            // 将提取的文本写入文本文件
            File.WriteAllText("output/ExtractPDFPageAreaText.txt", extractedText, Encoding.UTF8);

            // 释放资源
            pdf.Close();
        }
    }
}

结果

以上就是通过C#代码轻松提取PDF文本的详细内容,更多关于C#提取PDF文本的资料请关注脚本之家其它相关文章!

相关文章

  • C# 获取进程退出代码的实现示例

    C# 获取进程退出代码的实现示例

    这篇文章主要介绍了C# 获取进程退出代码的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 初学C#所需明白的那些点

    初学C#所需明白的那些点

    这篇文章主要介绍了初学C#所需明白的那些点,以及一些零碎知识点笔记,以供大家学习参考
    2023-03-03
  • C#实现获取mp3 Tag信息的方法

    C#实现获取mp3 Tag信息的方法

    这篇文章主要介绍了C#实现获取mp3 Tag信息的方法,涉及C#针对MP3文件属性的相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • C#获取文件名和文件路径的两种实现方式

    C#获取文件名和文件路径的两种实现方式

    这篇文章主要介绍了C#获取文件名和文件路径的两种实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 在C#中捕获内存不足异常

    在C#中捕获内存不足异常

    这篇文章主要介绍了在C#中捕获内存不足异常,下面文章内容围绕如何在C#中捕获内存不足异常的相关资料展开详细内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12
  • C#调用百度地图API根据地名获取经纬度geocoding

    C#调用百度地图API根据地名获取经纬度geocoding

    本文主要介绍了C#调用百度地图API根据地名获取经纬度geocoding,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • C#的循环语句集锦及案例详解

    C#的循环语句集锦及案例详解

    这篇文章主要介绍了C#中的基本循环:while循环、for循环和foreach循环,大家都知道循环结构可以简化程序编码,更好地实现理想的效果,并结合案例给大家讲解,需要的朋友可以参考下
    2015-07-07
  • 对指定的网页进行截图的效果 C#版

    对指定的网页进行截图的效果 C#版

    对指定的网页进行截图的效果 C#版...
    2007-08-08
  • C#的四个基本技巧

    C#的四个基本技巧

    C#的四个基本技巧...
    2007-03-03
  • C#如何实现调取钉钉考勤接口的功能

    C#如何实现调取钉钉考勤接口的功能

    这篇文章主要介绍了C#如何实现调取钉钉考勤接口的功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论