如何通过 C# 实现 PDF 文本提取?
<p>在日常办公和开发中,从 PDF 文件中提取文本是一项高频需求。手动复制粘贴不仅耗时,而且面对大量文档时效率极低。传统的自动化方案往往依赖 Adobe Reader 等外部组件,不仅部署麻烦,遇到加密或扫描件更是难以处理。</p><p>本文将介绍如何使用免费库 <strong>Free Spire.PDF for .NET</strong> ,无需安装任何 PDF 阅读器,轻松实现高精度、高可靠性的 PDF 文本提取。我们将从方案对比开始,逐步讲解环境搭建、核心代码实现以及高级应用技巧,并提供可直接运行的示例。</p>
<h2 id="pdf-文本提取方案对比">PDF 文本提取方案对比</h2>
<table>
<thead>
<tr>
<th>对比维度</th>
<th>传统方案痛点</th>
<th>Spire.PDF 解决方案</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>依赖环境</strong></td>
<td>需安装 Adobe Reader 等第三方软件</td>
<td>完全独立的内核,无需任何外部依赖</td>
</tr>
<tr>
<td><strong>加密文件支持</strong></td>
<td>无法处理有密码保护的 PDF</td>
<td>支持加载加密 PDF,只需提供密码即可</td>
</tr>
<tr>
<td><strong>开发复杂度</strong></td>
<td>需理解 COM 组件调用,代码繁琐 ★★★★☆</td>
<td>纯 .NET 接口,简洁直观 ★★☆</td>
</tr>
<tr>
<td><strong>文档与社区</strong></td>
<td>官方文档零散,中文支持差</td>
<td>提供完整的 API 文档及中文技术社区</td>
</tr>
</tbody>
</table>
<h2 id="c-实战教程三步完成-pdf-文本提取">C# 实战教程:三步完成 PDF 文本提取</h2>
<h3 id="1-环境准备">1. 环境准备</h3>
<p>首先创建一个 .NET 控制台应用程序(支持 .NET Framework 4.6.1+ 或 .NET Core 3.1+)。然后通过 NuGet 安装 Spire.PDF 库。</p>
<p>在 Visual Studio 中打开“程序包管理器控制台”,输入以下命令:</p>
<pre><code class="language-bash">Install-Package FreeSpire.PDF
</code></pre>
<blockquote>
<p><strong>注意</strong>:免费版对处理的 PDF 页数有限制(如最多10页),适用于个人或小型项目。</p>
</blockquote>
<h3 id="2-提取单页文本的核心代码">2. 提取单页文本的核心代码</h3>
<p>下面演示如何加载一个 PDF 文件,提取其中某一页的所有文本,并保存到 TXT 文件中。</p>
<pre><code class="language-csharp">using System.IO;
using Spire.Pdf;
using Spire.Pdf.Texts;
namespace ExtractTextFromPage
{
class Program
{
static void Main(string[] args)
{
// 1. 加载 PDF 文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
// 2. 获取指定页面(Pages 集合从 0 开始,此处获取第 2 页)
PdfPageBase page = doc.Pages;
// 3. 创建 PdfTextExtractor 对象,用于提取该页文本
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
// 4. 设置提取选项:提取页面上所有文本
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
extractOptions.IsExtractAllText = true; // 提取全部文本
// 5. 执行提取
string text = textExtractor.ExtractText(extractOptions);
// 6. 将提取的文本写入文件
File.WriteAllText("提取指定页面文本.txt", text);
// 7. 释放资源
doc.Close();
}
}
}
</code></pre>
<p><strong>关键参数说明</strong>:</p>
<ul>
<li><code>PdfTextExtractor</code>:文本提取器,绑定到指定页面。</li>
<li><code>PdfTextExtractOptions</code>:提取选项,可设置提取范围(全页或矩形区域)。</li>
<li><code>ExtractText()</code>:执行提取,返回该页所有文本的字符串。</li>
</ul>
<h3 id="3-高级应用技巧">3. 高级应用技巧</h3>
<h4 id="处理加密-pdf-文件">处理加密 PDF 文件</h4>
<p>若 PDF 受密码保护,只需在加载时传入密码(所有者密码或用户密码均可,取决于文件权限):</p>
<pre><code class="language-csharp">doc.LoadFromFile("加密.pdf", "password");
</code></pre>
<h4 id="提取所有页面文本">提取所有页面文本</h4>
<p>通过遍历文档的每一页,将提取的文本合并:</p>
<pre><code class="language-csharp">StringBuilder allText = new StringBuilder();
foreach (PdfPageBase page in doc.Pages)
{
PdfTextExtractor extractor = new PdfTextExtractor(page);
PdfTextExtractOptions options = new PdfTextExtractOptions();
options.IsExtractAllText = true;
string pageText = extractor.ExtractText(options);
allText.AppendLine(pageText);
}
File.WriteAllText("全部页面文本.txt", allText.ToString());
</code></pre>
<h4 id="提取指定区域的文本">提取指定区域的文本</h4>
<p>有时我们只需要页面中某个矩形区域内的文本,可以通过 <code>ExtractArea</code> 属性指定区域(单位:点,1 点 = 1/72 英寸):</p>
<pre><code class="language-csharp">PdfTextExtractOptions options = new PdfTextExtractOptions();
options.ExtractArea = new System.Drawing.RectangleF(50, 100, 400, 300);// 左、上、宽、高
string areaText = textExtractor.ExtractText(options);
</code></pre>
<h2 id="技术组合建议">技术组合建议</h2>
<p>在实际项目中,PDF 文本提取往往不是终点,还需要结合其他功能实现完整的数据处理流程:</p>
<ul>
<li><strong>文本+格式提取</strong>:使用 <code>PdfTextFinder</code> 可以按样式(字体、颜色、大小)定位特定文本,便于提取标题、关键词等。</li>
<li><strong>表格数据提取</strong>:若 PDF 中包含表格,使用 <code>PdfTableExtractor</code> 可以直接提取结构化表格数据,返回 DataTable 或二维数组。</li>
<li><strong>扫描件 OCR 集成</strong>:对于扫描版 PDF(图片格式),可搭配 <strong>Spire.OCR</strong> 库进行光学字符识别,提取其中的文字信息。</li>
</ul>
<h2 id="总结">总结</h2>
<p>通过 Free Spire.PDF for .NET,开发者可以轻松绕过传统方案的诸多限制,在 .NET 环境中实现稳定、高效的 PDF 文本提取。其简洁的 API 设计大大降低了编码难度,同时丰富的扩展功能(如加密处理、区域提取、表格识别)可以满足不同业务场景的需求。</p><br><br>
来源:https://www.cnblogs.com/jazz-z/p/19659783
頁:
[1]