跳至页脚内容
使用IRONPDF

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

在 .NET Core 应用程序中处理 PDF 文件可能比看起来更棘手。 您可能需要从上传的发票中提取文本,从调查中获取表单数据,或解析表格以用于数据库。 我见过很多项目因为开发者使用了过于复杂的库而被拖慢。 这就是 IronPDF 发挥作用的地方。 它让您无需处理繁琐的依赖关系或编写大量自定义解析代码即可读取和处理 PDF 文档。

无论您是处理简单文本、数字签名还是结构化数据,IronPDF 都让一切变得简单。 本指南向您展示如何在 ASP.NET 中从 PDF 文件读取数据,处理 IFormFile,处理字节数组,甚至将文件返回给用户或将其渲染为 HTML 字符串。 您还可以将其集成到您的解决方案中,在浏览器中显示输出或将其存储在数据库中。

如何在 ASP.NET Core 中设置 IronPDF?

在您的 ASP.NET Core 项目中入门 IronPDF 仅需几分钟。 通过 NuGet 包管理器控制台使用以下命令安装 IronPDF NuGet 包:

Install-Package IronPdf

或通过 .NET CLI:

dotnet add package IronPdf

安装后,将 IronPDF 命名空间添加到您的类 Program、控制器或服务中:

using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

For detailed installation options including Docker deployment, Azure setup, and additional information, check the comprehensive documentation.

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

IronPDF 的 ExtractAllText 方法提供对 PDF 文档内所有文本内容的即时访问。 此方法处理各种文本编码,并保持原始文档的阅读顺序,确保在 ASP.NET Core 应用程序中准确提取 PDF 文件中的数据。

// Load a PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text
string allText = pdf.ExtractAllText();
// Extract text from specific page (0-indexed)
string pageText = pdf.ExtractTextFromPage(0); // current page
// Load a PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text
string allText = pdf.ExtractAllText();
// Extract text from specific page (0-indexed)
string pageText = pdf.ExtractTextFromPage(0); // current page
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ExtractAllText 方法返回一个包含 PDF 中所有可读文本的字符串,保留换行和间距。 对于特定页面的提取,ExtractTextFromPage 允许使用零基索引定位单个页面。 当您提供正确的密码时,这种方法可以与加密 PDF 无缝协作。

这是一个实用的 ASP.NET Core 控制器实现,演示了如何使用此 PDF 从 PDF 文件读取数据:

示例代码

[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    [HttpPost("extract-text")]
    public IActionResult ExtractText(IFormFile pdfFile)
    {
        using var stream = new MemoryStream();
        pdfFile.CopyTo(stream);
        var pdf = new PdfDocument(stream.ToArray());
        var extractedText = pdf.ExtractAllText();
        return Ok(new { text = extractedText });
    }
}
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    [HttpPost("extract-text")]
    public IActionResult ExtractText(IFormFile pdfFile)
    {
        using var stream = new MemoryStream();
        pdfFile.CopyTo(stream);
        var pdf = new PdfDocument(stream.ToArray());
        var extractedText = pdf.ExtractAllText();
        return Ok(new { text = extractedText });
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此示例代码有效处理上传的 PDF 文件。 IFormFile 参数与 Razor Pages 或 MVC 控制器配合使用,而 MemoryStream 确保在不创建临时文件的情况下顺利处理,最终提高响应时间。 开发人员可以下载、保存或处理提取的文本以用于数据库存储、生成报告或在浏览器中显示内容。

如何读取 PDF 表单数据?

PDF 表单包含用户填写的交互字段。 IronPDF simplifies extracting this form data through its comprehensive forms API, supporting all standard AcroForm field types. You can easily extract all form field data, including text boxes, checkboxes, and content type details.

然后可以将响应保存到数据库、返回给用户或集成到您的 ASP.NET 应用程序工作流中。 以下代码示范了如何做到这一点:

[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 });
        }
[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 });
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ExtractForm 端点使用 PdfDocument 的 Form 属性读取上传 PDF 中的交互字段。 每个字段都有一个名称和值,这些值被收集到字典中并作为 JSON 返回。 这使得可以轻松捕获文本框、复选框和其他输入的数据,允许 PDF 表单提交被直接处理和集成到您的应用程序或数据库中。

输出

!如何在 ASP.NET Core 中读取 PDF 中的数据:图 3 - HTTP Postman

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

PDF 中的表格本质上是格式化的文本,需要解析逻辑来提取结构化数据。 IronPDF 提取文本时保留间距,然后您可以解析以从 PDF 文件中读取数据到 ASP.NET 中:

[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);
    // Load PDF from byte array
    var pdf = new PdfDocument(memoryStream.ToArray());
    // Extract all text
    string text = pdf.ExtractAllText();
    // Split text into lines (rows)
    string[] lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    var tableData = new List<string[]>();
    foreach (string line in lines)
    {
        // Split line into columns using tab character
        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 });
}
[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);
    // Load PDF from byte array
    var pdf = new PdfDocument(memoryStream.ToArray());
    // Extract all text
    string text = pdf.ExtractAllText();
    // Split text into lines (rows)
    string[] lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    var tableData = new List<string[]>();
    foreach (string line in lines)
    {
        // Split line into columns using tab character
        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 });
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

该代码提取文本并根据间距模式将其拆分为可能的表行。 对于更复杂的表格,您可能需要使用关键字识别表格边界或根据您的特定 PDF 结构实施更复杂的解析逻辑。

此输出可以下载、在浏览器中显示或进行其他信息处理。 您可以集成 CSS 格式或 HTML 字符串渲染以在您的解决方案中动态显示表格。

输出

!如何在 ASP.NET Core 中读取 PDF 中的数据:图 4

如何在 ASP.NET Core 中处理上传的 PDF 文件?

处理上传的 PDF 需要将 IFormFile 转换为 IronPDF 可以读取的格式。 This approach works seamlessly with Razor Pages and MVC controllers:

[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);
            // Load PDF from byte array
            var pdf = new PdfDocument(ms.ToArray());
            // Extract text and page count
            var text = pdf.ExtractAllText();
            var pageCount = pdf.PageCount;
            return Ok(new
            {
                text = text,
                pages = pageCount
            });
        }
[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);
            // Load PDF from byte array
            var pdf = new PdfDocument(ms.ToArray());
            // Extract text and page count
            var text = pdf.ExtractAllText();
            var pageCount = pdf.PageCount;
            return Ok(new
            {
                text = text,
                pages = pageCount
            });
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这个异步任务确保非阻塞处理,并与对象发送者、事件参数 e 以及标准 .NET 库配合使用。 使用 ReturnFile 并结合 Content-Disposition 头以允许用户安全下载处理后的 PDF 文件。 为额外的安全性,考虑在处理之前实施文件验证。

结论

IronPDF 使在 ASP.NET Core 和其他 .NET Core 应用程序中读取、提取、处理和保存 PDF 文档变得容易。 无论您是处理表单、表格、纯文本还是数字签名,这个 .NET 库都能将通常需要数小时的任务简化为短短几行代码。 您可以创建、转换、访问和以 HTML、浏览器甚至图像格式显示输出。

开始使用免费试用版来探索 IronPDF 在 ASP.NET Core 中的全部功能。 您可以在承诺购买许可证之前构建并测试您的 PDF 提取工作流程。 对于生产环境,IronPDF 提供适合单个开发人员或大型解决方案的灵活选项。 坦白说,使用 IronPDF 是我发现处理 ASP.NET Core 中 PDF 文件最快的方法之一,无需常见的麻烦。

常见问题解答

在 .NET Core 应用程序中处理 PDF 文件时可能会出现哪些挑战?

由于需要提取文本、获取表单数据,或在没有过于复杂的库的情况下解析表格,处理 .NET Core 中的 PDF 文件可能相当棘手。

IronPDF 如何帮助简化在 ASP.NET 中从 PDF 文件中读取数据?

IronPDF 通过消除不必要的依赖或大量自定义解析代码,简化了 PDF 文档的读取和处理。

在处理 PDF 时避免使用过于复杂的库为什么很重要?

使用过于复杂的库可能会拖慢项目进度并增加开发时间,而像 IronPDF 这样的简单解决方案则会简化流程。

IronPDF 可以从 PDF 文件中提取哪些类型的数据?

IronPDF 可以从 PDF 文件中提取文本、表单数据和表格,使其在各种数据处理需求中具有多功能性。

IronPDF 是否可以用于在 ASP.NET 应用程序中处理上传的发票?

是的,IronPDF 可以高效地读取并处理 ASP.NET 应用程序中上传的发票文本。

使用 IronPDF 时是否需要编写自定义解析代码?

不,IronPDF 允许您在不需要大量自定义解析代码的情况下处理 PDF 文档。

在 .NET Core 应用程序中使用 IronPDF 的好处是什么?

IronPDF 提供了一种简单的方式来读取和处理 PDF 文件,提高了数据处理能力,而无需复杂的依赖关系。

.NET 10 — IronPDF 是否完全兼容它?

是的。IronPDF 的设计完全兼容 .NET 10(以及 .NET 9、8、7、6、5、Core、Standard 和 Framework 4.6.2+),确保您可以在最新的 .NET 平台上运行其所有 PDF 读取和写入功能,而无需特殊的变通方法。

IronPDF 是否支持 .NET 10 中用于读取流式 PDF 内容的最新 API?

是的。在 .NET 10 中,IronPDF 可以使用 Stream 和 MemoryStream 等 API 从字节数组或内存流处理 PDF 数据,从而无需保存临时文件即可读取 PDF。这使其适用于高性能服务器场景,以及在 Web API 中上传或处理 PDF 数据。

Curtis Chau
技术作家

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

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