.NET程序中通过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类能对提取选项进行设置,如设置是否保留布局和设置提取的页面区域。以下是一般操作步骤。

  1. 创建PdfDocument对象。
  2. 使用PdfDocument.LoadFromFile()方法载入PDF文档。
  3. 使用PdfDocument.Pages[]属性获取指定页面,也可以遍历所有页面。
  4. 使用页面创建PdfTextExtractor对象。
  5. 创建PdfTextExtractOptions对象并设置提取选项。
  6. 使用PdfTextExtractor.ExtractText(PdfTextExtractOptions)方法提取页面文本。
  7. 将提取的文本写入文件或用于其他用途。
  8. 释放资源。

提取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();
        }
    }
}

结果
.NET C#提取PDF文本效果

保留文本布局提取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();
        }
    }
}

结果
.NET C#提取PDF文本及布局效果

提取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();
        }
    }
}

结果
.NET C#提取PDF页面区域文本效果

本文演示了如何使用C#代码在.NET程序中提取PDF文档的文本内容。

### 华为OD机考 Python 编程题目及备考资源 #### 备考指南与策略 针对华为OD机试,考生应重点掌握算法设计、数据结构应用以及编程语言特性。对于Python开发者而言,除了熟悉基本语法外,还需深入理解常用的数据处理技巧和标准库函数[^1]。 #### 推荐练习平台 为了更好地适应考试环境并提高实战能力,在线OJ是一个理想的训练场所。通过该平台可以接触到大量模拟真实场景的习题,帮助学员积累经验的同时也能够检验自己的水平。具体到Python方向,有专门整理过的历年真题集可供参考,覆盖了不同难度级别的挑战项目[^3]。 #### 关键知识点复习 - **基础概念**:变量定义、控制流语句(if/else,for循环)、异常处理机制try-except-finally。 - **高级特性**:列表推导式、字典解析表达式、生成器函数yield关键字的应用;装饰器模式@decorator实现原理及其应用场景分析。 - **模块化开发**:如何创建自定义包package?怎样导入第三方扩展库module? ```python import math def is_prime(n): """判断整数n是否为素数""" if n <= 1: return False sqrt_n = int(math.sqrt(n)) + 1 for i in range(2, sqrt_n): if n % i == 0: return False return True print([num for num in range(100) if is_prime(num)]) ``` 此段代码展示了利用列表推导式的简洁写法来找出小于100的所有质数,并且引入了一个辅助性的`is_prime()`函数用于检测单个数值是不是质数。这种组合方式不仅提高了程序可读性还增强了功能复用率[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值