跳至页脚内容
使用IRONPDF

如何在.NET中从PDF中提取数据

如何在 .NET 中从 PDF 中提取数据

IronPDF 使从 .NET 中的 PDF 文档中提取文本、表格、表单字段和附件变得简单,只需几行代码即可完成,非常适合自动化发票处理、构建知识库或生成报告,而无需复杂的解析。

PDF文档在商业中无处不在; 现代例子包括发票、报告、合同和手册。 但是以编程方式从中提取重要信息可能很棘手。 PDF关注的是外观,而不是数据访问方式。

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

本指南将通过实际示例向您介绍如何提取文本内容、表格数据和表单字段值,并在每个代码片段之后进行说明,以便您可以将其适应到自己的项目中。

如何开始使用 IronPDF?

为什么安装如此快速?

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

Install-Package IronPdf

对于 Windows 开发者而言,安装过程非常简单。 如果您部署在 LinuxmacOS 系统上,IronPDF 同样支持这些平台。 您甚至可以在 Docker 容器中运行 IronPDF,或将其部署到 AzureAWS

提取文本的最简单方法是什么?

安装完成后,您可以立即开始处理 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);
Imports IronPdf

' Load any PDF document
Dim pdf = PdfDocument.FromFile("document.pdf")
' Extract all text with one line
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine(allText)
$vbLabelText   $csharpLabel

这段代码加载 PDF 文件并提取其中的所有文本。 IronPDF自动处理复杂的PDF结构、表单数据和可能导致其他库问题的编码。 从 PDF 文档中提取的数据可以保存到文本文件中,或进行进一步处理以供分析。

实用提示:您可以将提取的文本保存为.txt文件以便后续处理,或者解析它以填充数据库、Excel表格或知识库。 此方法适用于报告、合同或任何您只需要快速获取原始文本的PDF。 如需处理更复杂的提取场景,请查阅全面的解析指南

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

为何要针对特定页面而非提取所有内容?

现实世界中的应用程序通常需要精确的数据提取。 IronPDF 提供了多种方法,用于从特定页面中提取有价值的信息。 在本例中,我们将使用以下PDF:

using IronPdf;
// Load PDF from a memory stream if needed
byte[] pdfBytes = File.ReadAllBytes("report.pdf");
var pdfFromStream = PdfDocument.FromBytes(pdfBytes);
// Or load from a URL
var pdfFromUrl = PdfDocument.FromUrl("___PROTECTED_URL_32___");
using IronPdf;
// Load PDF from a memory stream if needed
byte[] pdfBytes = File.ReadAllBytes("report.pdf");
var pdfFromStream = PdfDocument.FromBytes(pdfBytes);
// Or load from a URL
var pdfFromUrl = PdfDocument.FromUrl("___PROTECTED_URL_32___");
Imports IronPdf
' Load PDF from a memory stream if needed
Dim pdfBytes As Byte() = File.ReadAllBytes("report.pdf")
Dim pdfFromStream As PdfDocument = PdfDocument.FromBytes(pdfBytes)
' Or load from a URL
Dim pdfFromUrl As PdfDocument = PdfDocument.FromUrl("___PROTECTED_URL_32___")
$vbLabelText   $csharpLabel

如何在提取的文本中搜索关键信息?

以下代码从特定页面提取数据,并将结果输出到控制台。 此方法在处理多页 PDF 或需要拆分 PDF 进行处理时尤为有用:

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()}");
        }
    }
}
Imports IronPdf
Imports System
Imports System.Text.RegularExpressions

' Load any PDF document
Dim pdf = PdfDocument.FromFile("AnnualReport2024.pdf")
' Extract from selected pages
Dim pagesToExtract As Integer() = {0, 2, 4} ' Pages 1, 3, and 5
For Each pageIndex In pagesToExtract
    Dim pageText As String = pdf.ExtractTextFromPage(pageIndex)
    ' Split on 2 or more spaces (tables often flatten into space-separated values)
    Dim tokens = Regex.Split(pageText, "\s{2,}")
    For Each token As String In tokens
        ' Match totals, invoice headers, and invoice rows
        If token.Contains("Invoice") OrElse token.Contains("Total") OrElse token.StartsWith("INV-") Then
            Console.WriteLine($"Important: {token.Trim()}")
        End If
    Next
Next
$vbLabelText   $csharpLabel

本示例演示了如何从 PDF 文档中提取文本、搜索关键信息并将其准备好以供存储。 ExtractTextFromPage() 方法保持文档的阅读顺序,使其非常适合文档分析和内容索引任务。 对于高级文本处理,您甚至可以在 PDF 文件中进行文本搜索和替换。

如何从 PDF 文档中提取表格数据?

为何表格提取与普通文本不同?

PDF文件中的表格没有原生结构; 它们只是被定位得像表格的文本内容。 IronPDF在提取表格数据时保留布局,因此您可以将其处理成Excel或文本文件。 对于涉及 PDF 中图片的更复杂场景,您可能需要单独提取图片

如何将提取的表格转换为 CSV 格式?

using IronPdf;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

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.Text;
using System.Text.RegularExpressions;
using System.IO;

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");
Imports IronPdf
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.IO

Dim pdf = PdfDocument.FromFile("example.pdf")
Dim rawText As String = pdf.ExtractAllText()
' Split into lines for processing
Dim lines() As String = rawText.Split(ControlChars.Lf)
Dim csvBuilder As New StringBuilder()
For Each line As String In lines
    If String.IsNullOrWhiteSpace(line) OrElse line.Contains("Page") Then
        Continue For
    End If
    Dim rawCells() As String = Regex.Split(line.Trim(), "\s+")
    Dim cells() As String
    ' If the line starts with "Product", combine first two tokens as product name
    If rawCells(0).StartsWith("Product") AndAlso rawCells.Length >= 5 Then
        cells = New String(rawCells.Length - 2) {}
        cells(0) = rawCells(0) & " " & rawCells(1) ' Combine Product + letter
        Array.Copy(rawCells, 2, cells, 1, rawCells.Length - 2)
    Else
        cells = rawCells
    End If
    ' Keep header or table rows
    Dim isTableOrHeader As Boolean = cells.Length >= 2 AndAlso (cells(0).StartsWith("Item") OrElse cells(0).StartsWith("Product") OrElse Regex.IsMatch(cells(0), "^INV-\d+"))
    If isTableOrHeader Then
        Console.WriteLine($"Row: {String.Join("|", cells)}")
        Dim csvRow As String = String.Join(",", cells).Trim()
        csvBuilder.AppendLine(csvRow)
    End If
Next
' 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。

此工作流适用于 PDF 表单、财务文档和报告。 您稍后可以将提取的数据转换为 xlsx 文件,或将其合并到一个 ZIP 文件中。对于包含合并单元格的复杂表格,您可能需要根据列的位置调整解析逻辑。 处理扫描版 PDF 时,建议先使用 IronOCR 进行文本识别。

Excel 电子表格,展示已提取的产品数据,包含产品 A、B 和 C 的项目、数量、价格及总计列。 成功从 PDF 中提取了包含产品信息、数量、价格及计算总和的表格数据。

如何从 PDF 中提取表单字段数据?

为何要通过编程方式提取和修改表单字段?

IronPDF 还支持表单字段数据的提取和修改。 这在处理需要自动化处理的可填写 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");
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");
Imports IronPdf
Imports System.Drawing
Imports System.Linq

Dim pdf = PdfDocument.FromFile("form_document.pdf")
' Extract form field data
Dim form = pdf.Form
For Each 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" Then
        field.Value = "Updated Value"
    End If
Next
' Save modified form
pdf.SaveAs("updated_form.pdf")
$vbLabelText   $csharpLabel

若需进行更高级的表单处理,您还可以处理特定的字段类型:

// Work with different form field types
foreach (var field in pdf.Form)
{
    switch (field)
    {
        case TextFormField textField:
            Console.WriteLine($"Text field '{field.Name}': {textField.Value}");
            break;
        case CheckBoxFormField checkBox:
            Console.WriteLine($"Checkbox '{field.Name}': {checkBox.Value}");
            checkBox.Value = true; // Check the box
            break;
        case ComboBoxFormField comboBox:
            Console.WriteLine($"ComboBox '{field.Name}': {comboBox.Value}");
            // Set to first available option
            if (comboBox.Choices.Any())
                comboBox.Value = comboBox.Choices.First();
            break;
    }
}
// Work with different form field types
foreach (var field in pdf.Form)
{
    switch (field)
    {
        case TextFormField textField:
            Console.WriteLine($"Text field '{field.Name}': {textField.Value}");
            break;
        case CheckBoxFormField checkBox:
            Console.WriteLine($"Checkbox '{field.Name}': {checkBox.Value}");
            checkBox.Value = true; // Check the box
            break;
        case ComboBoxFormField comboBox:
            Console.WriteLine($"ComboBox '{field.Name}': {comboBox.Value}");
            // Set to first available option
            if (comboBox.Choices.Any())
                comboBox.Value = comboBox.Choices.First();
            break;
    }
}
' Work with different form field types
For Each field In pdf.Form
    Select Case field
        Case textField As TextFormField
            Console.WriteLine($"Text field '{field.Name}': {textField.Value}")
        Case checkBox As CheckBoxFormField
            Console.WriteLine($"Checkbox '{field.Name}': {checkBox.Value}")
            checkBox.Value = True ' Check the box
        Case comboBox As ComboBoxFormField
            Console.WriteLine($"ComboBox '{field.Name}': {comboBox.Value}")
            ' Set to first available option
            If comboBox.Choices.Any() Then
                comboBox.Value = comboBox.Choices.First()
            End If
    End Select
Next
$vbLabelText   $csharpLabel

何时应使用表单字段提取?

此代码片段从PDF中提取表单字段值,并允许您以编程方式更新它们。 这使得处理 PDF 表单并提取特定信息以供分析或生成报告变得轻而易举。 这对于自动化工作流程如客户入职、调查处理或数据验证非常有用。

常见的用例包括:

  • 自动化数字签名
  • 处理受密码保护的 PDF 文件
  • 提取数据以符合 PDF/A 标准
  • 构建自定义工作流

两份 PDF 表单的并排对比——左侧为包含示例数据(John Doe)的原始表单,右侧为包含新数据(Updated Value)的更新后表单,展示了 .NET 中的数据提取与修改功能。 展示使用 .NET 成功提取并修改 PDF 表单数据的对比图,底部可见的 Visual Studio 调试控制台显示了提取的客户信息。

我的下一个步骤是什么?

IronPDF使.NET中的PDF数据提取变得实用高效。 您可以从各种 PDF 文档中提取文本、表格、表单字段、图像和附件,包括通常需要额外 OCR 处理的扫描版 PDF。

无论您的目标是构建知识库、自动化报告工作流程,还是从财务PDF中提取数据,该库都为您提供了无需手动复制或易出错解析来完成任务的工具。 它简单、快捷,并可直接集成到 Visual Studio 项目中。 试一试; 这将为您节省大量时间,并避免处理 PDF 文件时常见的麻烦。

如需处理更复杂的场景,请参阅:

立即开始使用 IronPDF。
green arrow pointer

准备在您的应用程序中实现PDF数据提取了吗? IronPDF听起来是适合您的.NET库吗? 开始您的免费试用以用于商业用途。 请访问我们的文档,获取全面的指南和 API 参考

常见问题解答

使用 .NET 从 PDF 文档中提取文本的最佳方法是什么?

使用 IronPDF,您可以轻松地在 .NET 应用程序中从 PDF 文档中提取文本。它提供的方法可以有效检索文本数据,确保您能访问所需的内容。

IronPDF 能否处理扫描的 PDFs 以进行数据提取?

是的,IronPDF 支持 OCR(光学字符识别)来处理和提取扫描的 PDFs 中的数据,使在图像为主的文档中访问文本成为可能。

如何使用 C# 从 PDF 中提取表格?

IronPDF 提供了在 C# 中解析和提取 PDF 文档中表格的功能。您可以使用特定的方法精准识别并获取表格数据。

使用 IronPDF 进行 PDF 数据提取有哪些好处?

IronPDF 提供了全面的 PDF 数据提取解决方案,包括文本检索、表格解析和扫描文档的 OCR。它无缝集成于 .NET 应用程序中,提供了可靠且高效的方式来处理 PDF 数据。

可以使用 IronPDF 从 PDF 中提取图片吗?

可以,IronPDF 允许您从 PDF 中提取图片。此功能在您需要访问和操作嵌入在 PDF 文档中的图片时非常有用。

IronPDF 如何在数据提取过程中处理复杂的 PDF 布局?

IronPDF 设计用来管理复杂的 PDF 布局,通过提供强大的工具来导航和提取数据,确保您能处理具有复杂格式和结构的文档。

我可以在 .NET 应用程序中自动化 PDF 数据提取吗?

当然可以。IronPDF 可以集成到 .NET 应用程序中,自动化 PDF 数据提取,简化那些需要定期和一致数据检索的流程。

我可以使用哪些编程语言与 IronPDF 一起进行 PDF 数据提取?

IronPDF 主要在 .NET Framework中使用 C#,为开发人员以编程方式从 PDF 中提取数据提供了广泛的支持和功能。

IronPDF 是否支持从 PDF 文档中提取元数据?

是的,IronPDF 可以从 PDF 文档中提取元数据,允许您访问信息,例如作者、创建日期以及其他文档属性。

有哪些用于学习使用 IronPDF 进行 PDF 数据提取的示例代码?

开发者指南提供了完整的 C# 教程以及实用的代码示例,帮助您掌握使用 IronPDF 在 .NET 应用程序中进行 PDF 数据提取。

IronPDF 是否完全兼容最新的 .NET 10 版本?这能为数据提取带来哪些好处?

是的——IronPDF 完全兼容 .NET 10,支持其所有性能、API 和运行时改进,例如减少堆分配、数组接口去虚拟化以及增强的语言特性。这些改进使得 C# 应用程序中的 PDF 数据提取工作流程更快、更高效。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我