如何在 .NET 中从文档提取文本:完整的 GroupDocs.Annotation 指南

是否曾经在 .NET 应用程序中卡住,尝试从文档中提取文本内容?你并不孤单。在本指南中,我们将展示 如何提取文本,使用 GroupDocs.Annotation for .NET,无论你是在构建搜索索引、合规扫描器还是迁移工具。你将获得可直接运行的解决方案、性能技巧和实际使用模式。

快速答案

  • 哪个库负责文本提取? GroupDocs.Annotation for .NET.
  • 支持的格式? 超过 50 种格式,包括 PDF、DOCX、PPTX、XLSX 和图像。
  • 最低 .NET 版本? .NET Framework 4.6.1、.NET Core 3.1 或任何 .NET Standard 2.0 目标。
  • 许可证要求? 生产环境需要有效的 GroupDocs.Annotation 许可证。
  • 我可以使用 C# 处理 PDF 吗? 是——使用 Annotator 类加载 PDF 并检索其文本。

何时使用文档文本提取

在深入代码之前,让我们明确提取文本至关重要的场景:

  • 构建搜索和索引系统 – 使每个文档都可以通过内容进行搜索。
  • 创建文档分析工具 – 统计词数、检测模式或运行自然语言处理。
  • 开发合规软件 – 提取受监管的数据(例如合同条款)用于审计报告。
  • 内容迁移项目 – 将文本从旧版格式迁移到现代系统。
  • 文档审查工作流 – 在人工注释前自动进行初步筛选。

GroupDocs.Annotation 的优势在于它抽象了格式差异,并在所有受支持的文件类型上提供一致的结果。

前提条件和设置

开发环境

  • Visual Studio 2019 或更高版本(Community 版也可以)
  • .NET Framework 4.6.1+ 或 .NET Core 3.1+
  • 至少 2 GB RAM 用于处理较大的文档

知识要求

  • 基本的 C# 编程
  • 了解 using 语句用于确定性释放
  • 熟悉 NuGet 包管理

安装 GroupDocs.Annotation

通过 NuGet 包管理器控制台:

Install-Package GroupDocs.Annotation -Version 25.4.0

通过 .NET CLI:

dotnet add package GroupDocs.Annotation --version 25.4.0

专业提示: 始终固定版本(例如 Install-Package GroupDocs.Annotation -Version 23.10),以避免包自动更新时出现意外的破坏性更改。

许可证配置

GroupDocs.Annotation 在生产环境中需要许可证。可选项包括:

  • 免费试用 – 适合评估和小型概念验证。
  • 临时许可证 – 适用于开发和自动化测试流水线。
  • 完整许可证 – 任何商业部署都需要。

访问 GroupDocs 购买页面 并查看完整的 文档。

如何使用 GroupDocs.Annotation 提取文本?

加载文档,调用 Annotator 进行解析,并获取纯文本表示——全部只需两步简洁操作。Annotator 类负责格式检测、流管理和文本聚合,让你专注于业务逻辑。此直接答案为你提供可直接复制粘贴到任何 .NET 项目的可运行模式。

Annotator 是 GroupDocs.Annotation 中的核心类,用于加载和解析文档以进行注释和文本提取。

// Load the file
using (var annotator = new Annotator("sample.pdf"))
{
    // Retrieve all pages' text as a single string
    string fullText = annotator.GetDocumentText();
}

步骤式实现指南

步骤 1:基本设置和初始化

using 语句保证在代码块结束时释放所有非托管资源,从而在处理大量或大型文件时防止内存泄漏。

using GroupDocs.Annotation;

// Set the path to your document
const string DOCUMENT_PATH = "YOUR_DOCUMENT_DIRECTORY";

// Initialize Annotator with the document path
using (Annotator annotator = new Annotator(DOCUMENT_PATH + "/ANNOTATED_DOCX"))
{
    // Further operations will go here
}

步骤 2:核心文本提取实现

GetDocumentText() 返回加载文档中所有页面的连接纯文本。

using GroupDocs.Annotation;
using GroupDocs.Annotation.Models;

// Ensure you have set DOCUMENT_PATH correctly
using (Annotator annotator = new Annotator(DOCUMENT_PATH + "/ANNOTATED_DOCX"))
{
    // Subsequent operations will be performed within this context
}

步骤 3:检索文档信息

GetDocumentInfo() 提供加载文档的元数据,如页数、文件大小和格式。

// Retrieve document information using GroupDocs.Annotation API
IDocumentInfo documentInfo = annotator.Document.GetDocumentInfo();

步骤 4:处理页面信息

GetPagesInfo() 返回 PageInfo 对象的集合,每个对象代表单页的详细信息,包括其文本、尺寸和旋转。

foreach (PageInfo page in documentInfo.PagesInfo)
{
    // Display page number, width, and height
    Console.WriteLine($"Page number {page.PageNumber}, width: {page.Width} and height: {page.Height}");
}

如何使用 C# 和 GroupDocs.Annotation 从 PDF 提取文本?

使用 Annotator 加载 PDF,调用 GetDocumentText(),即可一次性获取完整的文本内容。该方法适用于任何 PDF,无论是否包含嵌入字体或矢量图形,并且保留 Unicode 字符。

using (var annotator = new Annotator("contract.pdf"))
{
    string pdfText = annotator.GetDocumentText();
}

此方法在 PDF 已包含可选文本时消除了对第三方 OCR 库的需求。对于扫描的 PDF,需要将 GroupDocs.Annotation 与 OCR 插件结合使用(本指南范围之外)。

GroupDocs.Annotation 支持哪些格式的文本提取?

GroupDocs.Annotation 支持 50+ 输入和输出格式,包括 PDF、DOCX、PPTX、XLSX、TXT、HTML 以及常见图像类型(PNG、JPEG、BMP)。库对每种格式均提供原生处理,意味着在提取文本前无需转换文件。

常见挑战与解决方案

文件路径问题

问题: “File not found” 错误即使文件实际存在。
解决方案: 始终使用绝对路径或在调用 API 前验证工作目录。

IsSupported() 检查给定文件格式是否由 GroupDocs.Annotation 处理。

string documentPath = Path.GetFullPath(DOCUMENT_PATH + "/your-document.docx");
if (!File.Exists(documentPath))
{
    throw new FileNotFoundException($"Document not found: {documentPath}");
}

大文档的内存管理

问题: 处理数百页文件时出现内存不足异常。
解决方案: 将文档分块处理,及时释放每个 Annotator 实例,并在服务器资源受限时考虑启用 MemoryLimit 属性。

损坏文档处理

问题: 损坏文件会抛出异常。
解决方案: 将调用包装在 try‑catch 块中,记录异常,并可选地在解析前执行检查文件完整性的验证例程。

格式兼容性问题

问题: 不受支持的格式导致崩溃。
解决方案: 在初始化前调用 Annotator.IsSupported(filePath),如果格式不受支持则通知用户。

性能最佳实践

内存优化

  • 对每个 Annotator 实例使用 using 语句。
  • 逐页处理大文件,而不是一次性加载整个文档到内存。
  • 在可能的情况下,将频繁访问的文档缓存到只读内存存储。

性能监控

  • 记录不同文件大小下 GetDocumentText() 的耗时。
  • 使用性能计数器或分析工具跟踪内存消耗。
  • 为 UI 响应式应用启用异步处理 (Task.Run)。

错误处理策略

  • 为所有注释操作集中处理异常。
  • 返回用户友好的信息(例如 “所选文件已损坏或不受支持”)。
  • 对瞬时 I/O 错误实现重试逻辑,特别是从网络共享读取时。

实际实现场景

文档管理系统集成

通过提取文本为每个上传的文档建立索引,然后将文本存入可搜索的索引(如 Elasticsearch)。这使得在 PDF、Word 文件和演示文稿之间实现全文搜索,无需第三方转换器。

法律文档处理

自动提取合同中的条款标题、日期和当事人名称。将提取的文本与正则表达式或 NLP 库结合,以标记高风险语言。

在线学习平台增强

使讲义幻灯片和课程 PDF 可搜索,为移动端生成摘要,并将文本输入推荐引擎,以建议相关内容。

合规与审计系统

从监管表单中提取必需字段(如税号、合规代码),然后将其输送到生成审计轨迹的报告流水线。

高级配置选项

性能调优

  • 根据服务器 RAM 调整 Annotator.Options.MemoryLimit。
  • 设置 Annotator.Options.MaxConcurrentProcesses 以控制并行度。
  • 如果仅需文本,可使用 Annotator.Options.SkipImages,以减少处理时间。

Options 属性允许为 Annotator 实例配置与性能相关的设置,如内存限制和并发性。

安全注意事项

  • 将许可证存放在安全金库中,切勿硬编码。
  • 对静止的文档进行加密,仅在内存中解密进行处理。
  • 审计每一次注释和提取请求,以满足合规要求。

故障排查指南

  • “Invalid license” 错误: 验证许可证文件路径并确保许可证版本与库版本匹配。
  • 处理速度慢: 检查文档大小,启用流式处理 (Annotator.Options.UseStream = true),并考虑异步执行。
  • 格式特定的怪异行为: 某些旧版 Office 文件可能需要 OfficeInterop 插件;请查阅官方格式矩阵。
  • 网络相关问题: 从云存储读取时使用具备超时和指数退避的弹性文件传输逻辑。

常见问题

Q: 最低 .NET 版本要求是什么?
A: 支持 .NET Framework 4.6.1+、.NET Standard 2.0 和 .NET Core 3.1+,为传统和现代项目提供灵活性。

Q: 能否处理存储在 AWS S3 或 Azure Blob 等云存储中的文档?
A: 可以,先将文件下载到临时流,然后将该流传递给 Annotator 构造函数。

Q: 如何处理超大文档而不出现内存问题?
A: 启用流式处理,逐页处理,并始终及时释放 Annotator 实例。

Q: 文档大小或注释数量有上限吗?
A: 没有硬性上限,但性能随文件大小和注释密度而变化;请使用典型工作负载进行基准测试。

Q: 完全支持哪些文档格式?
A: 超过 50 种格式——包括 PDF、DOCX、PPTX、XLSX、TXT、HTML 以及常见图像类型——均支持文本提取。

Q: 能否从受密码保护的文档中提取文本?
A: 可以——在构造 Annotator 时提供密码(例如 new Annotator(path, password))。

Q: 扫描文档的文本提取准确度如何?
A: 扫描图像需要 OCR;GroupDocs.Annotation 可与 OCR 插件集成,将基于图像的页面转换为可搜索文本。

Q: 能在多线程应用中使用吗?
A: 完全可以,但每个线程应实例化独立的 Annotator,以避免共享状态冲突。

结论

你现在拥有一套完整的、可投入生产的 如何提取文本 配方,使用 GroupDocs.Annotation for .NET 几乎可以处理任何文档格式。遵循步骤、应用性能技巧并结合实际场景,你即可构建可扩展的搜索、合规和迁移解决方案。

下一步:

  1. 实现上文展示的基础提取模式。
  2. 使用 PageInfo 探索分页以用于 UI 渲染。
  3. 如有需要,为扫描的 PDF 添加 OCR 支持。
  4. 将提取的文本集成到你的索引或分析流水线中。

记住,最佳的文档处理方案会随你的应用成长——从简单起步,然后逐步加入自定义注释、批处理和安全加固等高级功能。

附加资源


最后更新: 2026-07-01
测试环境: GroupDocs.Annotation 23.10 for .NET
作者: GroupDocs

相关教程