
如何在 .NET 中从 PDF 中提取数据
IronPDF 使从 .NET 中的 PDF 文档中提取文本、表格、表单字段和附件变得简单,只需几行代码即可完成,非常适合自动化发票处理、构建知识库或生成报告,而无需复杂的解析。
PDF文档在商业中无处不在; 现代例子包括发票、报告、合同和手册。 但是以编程方式从中提取重要信息可能很棘手。 PDF关注的是外观,而不是数据访问方式。
对于.NET开发人员,IronPDF是一个强大的.NET PDF库,使从PDF文件中提取数据变得容易。 您可以直接从 PDF 文档中提取文本、表格、表单字段、图片和附件。 无论您是自动化处理发票、构建知识库,还是生成报告,该库都能为您节省大量时间。
本指南将通过实际示例向您介绍如何提取文本内容、表格数据和表单字段值,并在每个代码片段之后进行说明,以便您可以将其适应到自己的项目中。
如何开始使用 IronPDF?
为什么安装如此快速?
通过 NuGet 包管理器安装 IronPDF 只需几秒钟。 打开包管理器控制台并运行:
对于 Windows 开发者而言,安装过程非常简单。 如果您部署在 Linux 或 macOS 系统上,IronPDF 同样支持这些平台。 您甚至可以在 Docker 容器中运行 IronPDF,或将其部署到 Azure 和 AWS。
提取文本的最简单方法是什么?
安装完成后,您可以立即开始处理 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);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)这段代码加载 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___");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___")如何在提取的文本中搜索关键信息?
以下代码从特定页面提取数据,并将结果输出到控制台。 此方法在处理多页 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()}");
}
}
}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本示例演示了如何从 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");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")提取复杂表格时常见哪些问题?
PDF中的表格通常只是被定位得像网格的文本。 此检查有助于确定一行是否属于表格行或标题。 通过过滤掉页眉、页脚和无关文本,您可以从 PDF 中提取干净的表格数据,以便直接导入 CSV 或 Excel。
此工作流适用于 PDF 表单、财务文档和报告。 您稍后可以将提取的数据转换为 xlsx 文件,或将其合并到一个 ZIP 文件中。对于包含合并单元格的复杂表格,您可能需要根据列的位置调整解析逻辑。 处理扫描版 PDF 时,建议先使用 IronOCR 进行文本识别。

如何从 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");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")若需进行更高级的表单处理,您还可以处理特定的字段类型:
// 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何时应使用表单字段提取?
此代码片段从PDF中提取表单字段值,并允许您以编程方式更新它们。 这使得处理 PDF 表单并提取特定信息以供分析或生成报告变得轻而易举。 这对于自动化工作流程如客户入职、调查处理或数据验证非常有用。
常见的用例包括:
- 自动化数字签名
- 处理受密码保护的 PDF 文件
- 提取数据以符合 PDF/A 标准
- 构建自定义工作流

我的下一个步骤是什么?
IronPDF使.NET中的PDF数据提取变得实用高效。 您可以从各种 PDF 文档中提取文本、表格、表单字段、图像和附件,包括通常需要额外 OCR 处理的扫描版 PDF。
无论您的目标是构建知识库、自动化报告工作流程,还是从财务PDF中提取数据,该库都为您提供了无需手动复制或易出错解析来完成任务的工具。 它简单、快捷,并可直接集成到 Visual Studio 项目中。 试一试; 这将为您节省大量时间,并避免处理 PDF 文件时常见的麻烦。
如需处理更复杂的场景,请参阅:
准备在您的应用程序中实现PDF数据提取了吗? IronPDF听起来是适合您的.NET库吗? 开始您的免费试用以用于商业用途。 请访问我们的文档,获取全面的指南和 API 参考。

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


