跳至页脚内容
使用 IRONOCR

PDF 数据提取 .NET:完整开发者指南

使用 IronPDF,只需几行代码即可在 .NET 中从 PDF 中提取文本、表格、表单和图像——通过 NuGet 安装,加载 PDF,然后调用ExtractAllText (),即可在 5 分钟内开始使用。

PDF 文档在商业领域无处不在:发票、报告、合同和手册。 但通过编程方式从中获取关键信息可能很棘手。 PDF关注的是外观,而不是数据访问方式。 对于使用 C# 进行 OCR开发的开发人员来说,处理扫描文档时会面临独特的挑战。

对于.NET开发人员,IronPDF是一个强大的.NET PDF库,使从PDF文件中提取数据变得容易。 您可以直接从输入的 PDF 文档中提取文本、表格、表单字段、图像和附件。 无论您是自动化发票处理、构建知识库还是生成报告,这个库都能为您节省大量时间。处理扫描的 PDF 文件时,您可能还需要PDF OCR 文本提取功能来处理图像内容。

本指南将引导您完成提取文本内容、表格数据和表单字段值的实际示例,并在每个代码片段后进行解释,以便您可以将其应用到自己的项目中。 如果您还处理其他文档类型,您可能会发现探索读取扫描文档将 TIFF 转换为可搜索的 PDF很有帮助。

我该如何开始使用 IronPDF?

通过NuGet包管理器安装IronPDF只需几秒钟。 打开包管理器控制台并运行:

Install-Package IronPDF
Install-Package IronPDF
$vbLabelText   $csharpLabel

对于更高级的安装方案,请查看NuGet 包文档。 安装后,您可以立即开始处理输入的PDF文档。 这是一个展示IronPDF API简单性的最简.NET示例:

using IronPdf;
// Load any PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text with one line
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
using IronPdf;
// Load any PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text with one line
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
$vbLabelText   $csharpLabel

这段代码加载一个PDF文件并提取其中的每一段文本。 IronPDF自动处理复杂的PDF结构、表单数据和可能导致其他库问题的编码。 从PDF文档中提取的数据可以保存到文本文件,或进一步处理以进行分析。 对于更复杂的提取需求,您可能需要探索专门的文档处理技术。

实用技巧:您可以将提取的文本保存到 .txt 文件中以便稍后处理,或者解析它以填充数据库、Excel 表格或知识库。 这种方法适用于报告、合同或任何需要快速获取原始文本的 PDF 文件。 对于涉及表格的场景,请考虑学习如何读取文档中的表格以提取更结构化的数据。

提取出的文本是什么样的?

分屏显示:左侧是解释"什么是 PDF?"的 PDF 文档,右侧是显示从该 PDF 中提取的文本的 Visual Studio 控制台窗口。

如何从特定页面提取数据?

现实世界中的应用程序通常需要精确的数据提取。 IronPDF提供多种方法来从PDF中特定页面中获取有价值的信息。 这种方法类似于OCR 区域特定提取,但适用于 PDF 文件。 在本例中,我们将使用以下PDF:

PDF 查看器显示的是 2024 年年度报告,其中包含发票汇总表,表格列出了发票编号、日期和金额,以及部门业绩和财务概览部分。

以下代码从该 PDF 中的特定页面提取数据,并将结果返回到我们的控制台。 处理多页文档时,您可能会发现多页 TIFF 处理技术对解决类似问题也很有用。

using IronPdf;
using System;
using System.Text.RegularExpressions;
// Load any PDF document
var pdf = PdfDocument.FromFile("AnnualReport2024.pdf");
// Extract from selected pages
int[] pagesToExtract = { 0, 2, 4 }; // Pages 1, 3, and 5
foreach (var pageIndex in pagesToExtract)
{
    string pageText = pdf.ExtractTextFromPage(pageIndex);
    // Split on 2 or more spaces (tables often flatten into space-separated values)
    var tokens = Regex.Split(pageText, @"\s{2,}");
    foreach (string token in tokens)
    {
        // Match totals, invoice headers, and invoice rows
        if (token.Contains("Invoice") || token.Contains("Total") || token.StartsWith("INV-"))
        {
            Console.WriteLine($"Important: {token.Trim()}");
        }
    }
}
using IronPdf;
using System;
using System.Text.RegularExpressions;
// Load any PDF document
var pdf = PdfDocument.FromFile("AnnualReport2024.pdf");
// Extract from selected pages
int[] pagesToExtract = { 0, 2, 4 }; // Pages 1, 3, and 5
foreach (var pageIndex in pagesToExtract)
{
    string pageText = pdf.ExtractTextFromPage(pageIndex);
    // Split on 2 or more spaces (tables often flatten into space-separated values)
    var tokens = Regex.Split(pageText, @"\s{2,}");
    foreach (string token in tokens)
    {
        // Match totals, invoice headers, and invoice rows
        if (token.Contains("Invoice") || token.Contains("Total") || token.StartsWith("INV-"))
        {
            Console.WriteLine($"Important: {token.Trim()}");
        }
    }
}
$vbLabelText   $csharpLabel

本示例展示了如何从PDF文档中提取文本,搜索关键信息,并准备将其存储到数据文件或知识库中。 ExtractTextFromPage()方法保持文档的阅读顺序,因此非常适合文档分析和内容索引任务。 为了提高准确性,处理低质量 PDF 文件时,可以考虑使用图像优化滤镜

Microsoft Visual Studio 调试控制台显示提取的发票数据,包括发票摘要、日期、金额和最终总计 2,230.00 美元。

在处理财务文件时,您可能会受益于财务语言包,以提高专业术语的准确性。 此外,进度跟踪可以帮助监控大批量文档的提取性能。

如何从PDF文件中提取表格?

PDF 文件中的表格没有原生结构——它们只是排列成表格形状的文本内容。 IronPDF在提取表格数据时保留布局,因此您可以将其处理成Excel或文本文件。 这类似于OCR图形提取,但专门针对表格内容进行了优化。 在这个例子中,我们将使用这个PDF文件:

示例发票,显示结构化数据,包括客户详细信息、产品明细和总金额 180.00 美元。

我们的目标是提取表格本身的数据,以展示 IronPDF 解析表格数据的能力。 对于更高级的表格提取场景,可以探索读取文档中的表格,它使用机器学习来处理复杂的表格结构。

using IronPdf;
using System;
using System.Text;
using System.Text.RegularExpressions;
var pdf = PdfDocument.FromFile("example.pdf");
string rawText = pdf.ExtractAllText();
// Split into lines for processing
string[] lines = rawText.Split('\n');
var csvBuilder = new StringBuilder();
foreach (string line in lines)
{
    if (string.IsNullOrWhiteSpace(line) || line.Contains("Page"))
        continue;
    string[] rawCells = Regex.Split(line.Trim(), @"\s+");
    string[] cells;
    // If the line starts with "Product", combine first two tokens as product name
    if (rawCells[0].StartsWith("Product") && rawCells.Length >= 5)
    {
        cells = new string[rawCells.Length - 1];
        cells[0] = rawCells[0] + " " + rawCells[1]; // Combine Product + letter
        Array.Copy(rawCells, 2, cells, 1, rawCells.Length - 2);
    }
    else
    {
        cells = rawCells;
    }
    // Keep header or table rows
    bool isTableOrHeader = cells.Length >= 2
                           && (cells[0].StartsWith("Item") || cells[0].StartsWith("Product")
                               || Regex.IsMatch(cells[0], @"^INV-\d+"));
    if (isTableOrHeader)
    {
        Console.WriteLine($"Row: {string.Join("|", cells)}");
        string csvRow = string.Join(",", cells).Trim();
        csvBuilder.AppendLine(csvRow);
    }
}
// Save as CSV for Excel import
File.WriteAllText("extracted_table.csv", csvBuilder.ToString());
Console.WriteLine("Table data exported to CSV");
using IronPdf;
using System;
using System.Text;
using System.Text.RegularExpressions;
var pdf = PdfDocument.FromFile("example.pdf");
string rawText = pdf.ExtractAllText();
// Split into lines for processing
string[] lines = rawText.Split('\n');
var csvBuilder = new StringBuilder();
foreach (string line in lines)
{
    if (string.IsNullOrWhiteSpace(line) || line.Contains("Page"))
        continue;
    string[] rawCells = Regex.Split(line.Trim(), @"\s+");
    string[] cells;
    // If the line starts with "Product", combine first two tokens as product name
    if (rawCells[0].StartsWith("Product") && rawCells.Length >= 5)
    {
        cells = new string[rawCells.Length - 1];
        cells[0] = rawCells[0] + " " + rawCells[1]; // Combine Product + letter
        Array.Copy(rawCells, 2, cells, 1, rawCells.Length - 2);
    }
    else
    {
        cells = rawCells;
    }
    // Keep header or table rows
    bool isTableOrHeader = cells.Length >= 2
                           && (cells[0].StartsWith("Item") || cells[0].StartsWith("Product")
                               || Regex.IsMatch(cells[0], @"^INV-\d+"));
    if (isTableOrHeader)
    {
        Console.WriteLine($"Row: {string.Join("|", cells)}");
        string csvRow = string.Join(",", cells).Trim();
        csvBuilder.AppendLine(csvRow);
    }
}
// Save as CSV for Excel import
File.WriteAllText("extracted_table.csv", csvBuilder.ToString());
Console.WriteLine("Table data exported to CSV");
$vbLabelText   $csharpLabel

PDF中的表格通常只是被定位得像网格的文本。 此检查有助于确定一行是否属于表格行或标题。 通过过滤掉页眉、页脚和无关文本,您可以从 PDF 中提取干净的表格数据,以便导入 CSV 或 Excel。 对于布局复杂的收据和发票,请查看AdvancedScan 扩展程序

此工作流程适用于PDF表单、财务文件和报告。 之后您可以将 PDF 中的数据转换为 xlsx 文件,或者将它们合并到一个包含所有有用数据的 zip 文件中。 对于具有合并单元格的复杂表格,您可能需要根据列位置调整解析逻辑。 数据输出文档提供了有关如何处理结构化结果的详细指导。

显示产品库存的 Excel 表格,包含"商品"、"数量"、"价格"和"总计算值"等列。

为了提高表格提取的准确性,可以考虑使用计算机视觉技术在处理之前自动检测表格区域。 这种方法可以显著改善复杂布局的渲染效果。

如何提取表单字段数据?

IronPDF 还具备表单字段数据提取和修改功能,类似于护照读取功能,可用于结构化文档:

using IronPdf;
using System.Drawing;
using System.Linq;
var pdf = PdfDocument.FromFile("form_document.pdf");
// Extract form field data
var form = pdf.Form;
foreach (var field in form) // Removed '.Fields' as 'FormFieldCollection' is enumerable
{
    Console.WriteLine($"{field.Name}: {field.Value}");
    // Update form values if needed
    if (field.Name == "customer_name")
    {
        field.Value = "Updated Value";
    }
}
// Save modified form
pdf.SaveAs("updated_form.pdf");
using IronPdf;
using System.Drawing;
using System.Linq;
var pdf = PdfDocument.FromFile("form_document.pdf");
// Extract form field data
var form = pdf.Form;
foreach (var field in form) // Removed '.Fields' as 'FormFieldCollection' is enumerable
{
    Console.WriteLine($"{field.Name}: {field.Value}");
    // Update form values if needed
    if (field.Name == "customer_name")
    {
        field.Value = "Updated Value";
    }
}
// Save modified form
pdf.SaveAs("updated_form.pdf");
$vbLabelText   $csharpLabel

此代码从 PDF 中提取表单字段值,并允许您以编程方式更新它们,从而可以轻松处理 PDF 表单并提取指定范围的信息以进行分析或生成报告。 这对于自动化工作流程如客户入职、调查处理或数据验证非常有用。 对于身份文件处理,请探索身份文件 OCR最佳实践。

并排比较两个PDF表单,显示数据提取结果——左侧为原始表单,包含"John Doe"数据;右侧为更新后的表单,包含"更新值",显示数据提取和修改成功。

在使用包含复选框和单选按钮的表单时,您可能需要为特殊字段类型实现类似于条形码和二维码读取的自定义逻辑。OcrResult类文档提供了有关处理各种结果类型的详细信息。

接下来我该怎么做?

IronPDF使.NET中的PDF数据提取变得实用高效。 您可以从各种PDF文档中提取图像、文本、表格、表单字段,甚至是提取附件,包括通常需要额外OCR处理的扫描PDF。 对于扫描文档,将 IronPDF 与IronOCR 功能相结合,可提供全面的文档处理能力。

无论您是构建知识库、自动化报告工作流程,还是从财务 PDF 中提取数据,此库都能为您提供完成此操作所需的工具,而无需手动复制或容易出错的解析。 它简单、快速,并且可以直接集成到 Visual Studio 项目中。 在部署方面,IronPDF 支持多种平台,包括WindowsLinuxDocker以及AWSAzure等云平台。

不妨一试——您很可能会节省时间,并避免处理 PDF 文件时通常会遇到的种种麻烦。 对于初创公司和小团队,许可选项包括可随需求增长而扩展的灵活计划。 您还可以探索在生产部署中实施许可证密钥的方法

准备在您的应用程序中实现PDF数据提取了吗? IronPDF听起来是适合您的.NET库吗? 立即开始免费试用,体验全部功能;或者了解我们的商业用途许可选项。 请访问我们的文档,获取全面的指南和 API 参考。 如需快速实现,请查看我们的演示代码示例,即可在几分钟内上手。

常见问题解答

从PDF文档中提取数据的主要挑战是什么?

PDF 文档主要设计用于以特定布局显示内容,由于其侧重于外观而非数据可访问性,因此很难通过编程方式提取数据。

IronOCR 如何帮助 .NET 进行 PDF 数据提取?

IronOCR 提供工具,利用光学字符识别 (OCR) 将文本图像转换为机器可读数据,从而从 PDF(包括扫描文档)中提取文本和数据。

IronOCR 可以处理扫描的 PDF 文档吗?

是的,IronOCR 能够利用先进的 OCR 技术处理扫描的 PDF 文件,识别并提取文档中图像的文本。

IronOCR 使用哪种编程语言进行 PDF 数据提取?

IronOCR 专为与 C# 配合使用而设计,因此对于在 .NET 框架内工作的开发人员来说,它是从 PDF 中提取数据的绝佳选择。

是否有使用 IronOCR 进行 PDF 数据提取的代码示例?

是的,该指南包含完整的 C# 代码示例,演示如何使用 IronOCR 从 PDF 文件中有效地提取数据。

IronOCR 能否解析 PDF 文档中的表格?

IronOCR 包含解析 PDF 文档中表格的功能,使开发人员能够高效地提取结构化数据。

IronOCR可以提取哪些类型的PDF内容?

IronOCR 可以从 PDF 中提取各种类型的内容,包括文本、表格和扫描图像中的数据,使其成为一款用途广泛的数据提取工具。

Kannaopat Udonpant
软件工程师
在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。