IRONSOFTWAREHOME
使用IRONPDF

如何使用IronPDF构建一个ASP.NET Core PDF查看器

Curtis Chau
Curtis Chau
Updated: 2026年7月12日

IronPDF 通过提供方法,使开发人员能够使用简单的 C# 代码从 PDF 文件中读取文本、表单数据和表格,从而简化了 ASP.NET Core 中的 PDF 数据提取过程,无需复杂的依赖项或手动解析。

在 .NET 应用程序中处理 PDF 文件可能比乍看之下更具挑战性。 您可能需要从上传的发票中提取文本、从调查问卷中获取表单数据,或为数据库解析表格。 许多项目进展缓慢,是因为开发人员使用了过于复杂的库,这些库需要大量自定义解析代码。 IronPDF 提供了一个简便的替代方案,让您只需极少的配置即可阅读和处理 PDF 文档。

无论您处理的是简单文本、交互式表单字段还是结构化表格数据,IronPDF 的 API 都能让您直接访问 PDF 内容,无需进行底层解析。 本指南详细介绍了如何在 .NET Core 中读取 PDF 文件中的数据,涵盖文本提取、表单数据获取、表格解析以及异步文件上传处理——所有内容均附有可直接用于您项目的 C# 代码。

如何在 ASP.NET Core 项目中配置 IronPDF?

入门非常简单。 请通过 NuGet 包管理器控制台.NET CLI 安装 IronPDF NuGet 包,可使用以下任一命令:

PM > Install-Package IronPdf

安装包后,请在任何处理 PDF 文档的文件顶部添加 IronPDF 命名空间:

using IronPdf;

对于大多数项目而言,上述配置已足够。 IronPDF 不依赖于外部渲染进程,也不依赖于 Windows 上的其他原生组件。 对于 Linux 或 Docker 环境,请查阅 IronPDF 文档以获取特定平台的指导。

免费试用许可证可让您在投入生产环境使用前,全面测试所有功能。 您可以直接从 IronPDF 网站获取试用许可证,并在执行首次 PDF 操作前通过一行代码将其应用。

如何从 PDF 文件中提取文本?

文本提取是 PDF 阅读中最常见的任务。 IronPDF提供ExtractTextFromPage用于页面级访问。 这两种方法均保留了阅读顺序,并支持标准文本编码。

// Load a PDF document from disk
var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text from every page
string allText = pdf.ExtractAllText();

// Extract text from a specific page (zero-based index)
string pageOneText = pdf.ExtractTextFromPage(0);

Console.WriteLine(allText);

ExtractAllText返回完整的文本内容作为一个字符串,保留换行符。 ExtractTextFromPage使用基于零的索引定位单独的页面,这在您只需要多页文档中特定部分的内容时很有用。

若需深入了解文本和图像提取选项,请参阅《从 PDF 中提取文本指南,其中涵盖了基于区域提取等高级场景。

如何将文本提取功能集成到 .NET Core 控制器中?

以下控制器操作通过MemoryStream中,并以JSON返回提取的文本:

using IronPdf;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    [HttpPost("extract-text")]
    public IActionResult ExtractText(IFormFile pdfFile)
    {
        if (pdfFile == null || pdfFile.Length == 0)
            return BadRequest("No PDF file uploaded.");

        using var stream = new MemoryStream();
        pdfFile.CopyTo(stream);

        var pdf = new PdfDocument(stream.ToArray());
        string extractedText = pdf.ExtractAllText();

        return Ok(new { text = extractedText });
    }
}

此端点将上传的文件转换为字节数组,并直接传递给PdfDocument。 不会将临时文件写入磁盘,这既保持了代码的简洁性,又避免了不必要的存储开销。 IFormFile接口自然地与多部分表单提交和像Postman这样的API客户端配合使用。

如何在 ASP.NET Core 中读取 PDF 表单数据?

PDF 表单(也称为 AcroForms)包含供用户填写的交互式字段。 IronPDF通过Form属性暴露表单字段,提供文档中每个字段的名称和值。

以下端点读取上传的表单 PDF 文件,并将所有字段值作为 JSON 字典返回:

[HttpPost("extract-form")]
public IActionResult ExtractForm([FromForm] IFormFile pdfFile)
{
    if (pdfFile == null || pdfFile.Length == 0)
        return BadRequest("No PDF file uploaded.");

    using var stream = new MemoryStream();
    pdfFile.CopyTo(stream);

    var pdf = new PdfDocument(stream.ToArray());
    var formData = new Dictionary<string, string>();

    if (pdf.Form != null)
    {
        foreach (var field in pdf.Form)
        {
            formData[field.Name] = field.Value;
        }
    }

    return Ok(new { formFields = formData });
}

Value属性(用户输入的文本或选择)。 本系列中包含文本框、复选框、单选按钮和下拉菜单等控件。

JSON 响应使表单提交数据能够轻松转发至数据库、第三方 API 或消息队列,无需进行额外解析。 对于涉及以编程方式创建或编辑PDF表单的工作流程,PDF表单指南显示了如何添加字段和预填充值。

典型的表单提取响应是什么样子的?

API响应显示从PDF表单中提取的JSON数据,带有在Postman测试界面中显示的姓名、电子邮件和地址字段,状态为200 OK

上述响应显示了一个 200 OK 结果,其中包含来自示例联系表单 PDF 的字段名称和值。 其结构为扁平化的键值映射,可与大多数数据库模式或 REST 数据负载完美对应。

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

PDF 文件中的表格以定位文本的形式存储——PDF 格式本身不包含原生的表格数据结构。 因此,提取表格数据意味着先提取原始文本,然后应用解析逻辑来重建行和列。

IronPDF的ExtractAllText保留空格和制表符,这使得可以通过程序将行拆分为列。 以下控制器操作演示了这种方法:

[HttpPost("extract-table")]
public IActionResult ExtractTable([FromForm] IFormFile pdfFile)
{
    if (pdfFile == null || pdfFile.Length == 0)
        return BadRequest("No PDF file uploaded.");

    using var memoryStream = new MemoryStream();
    pdfFile.CopyTo(memoryStream);

    var pdf = new PdfDocument(memoryStream.ToArray());
    string text = pdf.ExtractAllText();

    // Split into lines, then split each line into columns
    string[] lines = text.Split(
        new[] { '\r', '\n' },
        StringSplitOptions.RemoveEmptyEntries
    );

    var tableData = new List<string[]>();
    foreach (string line in lines)
    {
        string[] columns = line
            .Split('\t')
            .Where(c => !string.IsNullOrWhiteSpace(c))
            .ToArray();

        if (columns.Length > 0)
            tableData.Add(columns);
    }

    var table = tableData.Select(r => string.Join(" | ", r)).ToList();
    return Ok(new { Table = table });
}

对于表格采用统一制表符分隔列的 PDF 文件,此方法效果良好。 对于列间间距不固定的文档,您可能需要应用最小间距启发式算法或检查字符位置。 当您需要在提取前将包含表格的特定页面分离出来时,PDF 合并或拆分指南将非常有用。

何时应手动解析表格?

API响应显示从PDF中提取的结构化发票数据,包括客户详细信息、发票元数据和按项目列出的产品及其定价,以JSON格式显示

当 PDF 文件并非由 HTML 或结构化数据源生成时(例如扫描的发票或使用桌面出版工具创建的文档),手动解析是最佳选择。 制表符分隔法能够可靠地处理许多标准 PDF 文件。 当列边界不规则时,您可以通过 IronPDF 的 DOM 访问 API 检查原始字符坐标来优化逻辑。

对于由 HTML 生成的文档,请考虑通过 HTML 中间层进行双向转换。 通过基于数据的 HTML 模板生成 PDF(详见《HTML 字符串转 PDF 指南》)意味着文本位置可预测,数据提取过程也将十分简便。

如何处理异步 PDF 文件上传?

生产环境中的 ASP.NET Core 应用程序应异步处理文件上传,以避免阻塞线程池。 await结合使用,使得控制器非阻塞:

[HttpPost("process-upload")]
public async Task<IActionResult> ProcessPdf([FromForm] IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No PDF file uploaded.");

    using var ms = new MemoryStream();
    await file.CopyToAsync(ms);

    var pdf = new PdfDocument(ms.ToArray());
    string text = pdf.ExtractAllText();
    int pageCount = pdf.PageCount;

    return Ok(new
    {
        text,
        pages = pageCount
    });
}

PdfDocument构造函数是同步的,但上传步骤——通常是管道中最慢的部分——是异步执行的。 该模式在并发负载下具有良好的扩展性,并兼容最小化 API 端点、Razor Pages 处理程序和 gRPC 服务。

如何限制上传文件大小?

ASP.NET Core 默认强制执行 30 MB 的请求正文大小限制。 对于较大的PDF,请在Program.cs中增加限制:

builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 100 * 1024 * 1024; // 100 MB
});

Kestrel 自身存在限制,您可能还需要提高该限制:

builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.MaxRequestBodySize = 100 * 1024 * 1024;
});

请根据您的应用程序将要处理的 PDF 文件的实际最大大小来设置这些值。 在将文件传递给 IronPDF 之前,请务必验证上传文件的 MIME 类型和扩展名,以防范意外输入。

如何将提取的 PDF 内容转换为其他格式?

获取文本或表单数据后,您可以将其传递给应用程序所需的任何下游流程——例如数据库写入、搜索索引、报表生成或 API 调用。 IronPDF 还支持反向转换:将 HTML 渲染为 PDF。

若需直观展示提取的内容,可参考 PDF 转图像指南,将原始 PDF 渲染为图像。 这对于文档预览功能非常有用,当您希望在浏览器中显示页面缩略图而无需加载完整的 PDF 文件时。

如果您需要在将文档交付给用户前对其进行保护,IronPDF 支持在后处理步骤中添加数字签名水印。 添加页眉和页脚(详见页眉和页脚指南)同样简单直观。

常见的 PDF 数据提取场景及推荐的 IronPDF 方法
场景IronPDF 方法 / 属性注意事项
提取页面所有文本PDF.ExtractAllText()按阅读顺序返回完整的文档文本
从单页中提取文本PDF.ExtractTextFromPage(n)基于零的页码索引
读取 AcroForm 字段pdf.Form枚举 field.Namefield.Value
解析表格行ExtractAllText() + 分割逻辑按制表符或空格分隔
统计页数pdf.PageCount可用于分页和验证
从字节数组加载new PdfDocument(bytes)无需临时文件
从文件路径加载PdfDocument.FromFile(path)用于服务器端文件访问

PDF数据提取设置完成后,下一步该怎么做?

您现在拥有了文本提取、表单数据读取、表格解析和异步上传的工作模式。 以下是根据您的应用程序要求,接下来可以探索的几个方向。

如果您需要在提取工作流程中生成 PDF 报告, IronPDF 功能概述涵盖了 HTML 到 PDF 的渲染、图章叠加和页面操作。 对于合并来自多个来源的报告的应用程序,合并或拆分 PDF 指南将逐步介绍如何合并和拆分文档。

为了确保文件安全送达,数字签名允许您在将 PDF 文件发送给客户之前对其进行认证。 自定义水印可为生成的文档添加视觉品牌标识或草稿标签。

如果您的项目从扫描的PDF(图像而非可搜索文本)中提取数据,则需要在调用ExtractAllText之前进行OCR步骤。 Iron Software 的IronOCR与 IronPDF 集成,用于处理扫描文档工作流程。

IronPDF 为个人开发者和团队提供灵活的许可选项。 首先可以免费试用,体验所有功能,不受任何限制。 完整的文档包括 API 参考、入门指南以及 Windows、Linux、Docker 和云环境的部署说明。

在 ASP.NET Core 中读取 PDF 文件中的数据不再需要底层解析代码或重量级依赖项。 使用 IronPDF,从上传文件到提取内容的路径只有几行代码,可以自然地融入任何控制器或服务层。

Curtis Chau
技术作家

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

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户