IRONSOFTWAREHOME
使用IRONPDF

如何在C#中将图像转换为PDF [代码示例教程]

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

从PDF文档中提取结构化表格数据是C#开发人员的一项常见需求,对于数据分析、报告或将信息集成到其他系统中至关重要。 然而,PDF主要设计用于一致的视觉呈现,而不是直观的数据提取。 这可能使得以编程方式从PDF文件读取表格在C#中成为一项挑战,尤其是因为表格可能差异很大-从简单的文本网格到复杂的合并单元格布局,甚至是在扫描文档中嵌入作为图像的表格。

本指南提供了一个全面的C#教程,介绍如何使用IronPDF进行PDF表格提取。 我们将主要探索利用IronPDF强大的文本提取功能来访问并解析文本PDF中的表格数据。 我们将讨论这种方法的有效性,提供解析策略,并提供处理提取信息的见解。 此外,我们还将涉及更复杂场景的策略,包括扫描的PDF。


在C#中从PDF中提取表格数据的关键步骤

  1. 安装用于PDF处理的IronPDF C#库(https://nuget.org/packages/IronPdf/)。 2.(可选演示步骤)使用IronPDF的RenderHtmlAsPdf从HTML字符串创建一个带表格的示例PDF。 (参见章节:(演示步骤)创建带有表格数据的PDF文档)
  2. 加载任意PDF文档,并使用ExtractAllText方法检索其原始文本内容。 (See section: Extract All Text Containing Table Data from the PDF)
  3. 实现C#逻辑来解析提取的文本并识别表格行和单元格。 (See section: Parsing Extracted Text to Reconstruct Table Data in C#)
  4. 输出结构化的表格数据或将其保存到CSV文件中以供进一步使用。 (See section: Parsing Extracted Text to Reconstruct Table Data in C#)
  5. 考虑用于扫描PDF的OCR等高级技术(稍后讨论)。

IronPDF - C# PDF库

IronPDF是一个用于.NET的C#库解决方案,用于在.NET中操作PDF(https://ironpdf.com/),帮助开发人员在其软件应用程序中轻松读取、创建和编辑PDF文档。 其强大的Chromium引擎以高精度和速度从HTML呈现PDF文档。 它允许开发人员无缝地从不同格式转换为PDF及其反方向。 它支持最新的.NET框架,包括.NET 7、.NET 6、5、4、.NET Core和Standard。

此外,IronPDF 适用于 .NET API还使开发人员能够操作和编辑PDF,添加页眉和页脚,以及轻松地从PDF中提取文本、图像和(如我们将看到的)表格数据。

一些重要功能包括:

使用IronPDF库在C#中提取表格数据的步骤

为了从PDF文档中提取表格数据,我们将设置一个C#项目:

  1. **Visual Studio:**确保您已安装 Visual Studio(例如,2022)。 如果没有,从Visual Studio网站下载它(https://visualstudio.microsoft.com/downloads/)。
  2. 创建项目:
    • 打开Visual Studio 2022并点击创建新项目。

      如何在C#中读取PDF表格,图1:Visual Studio的启动屏幕 Visual Studio的开始屏幕

  • 选择"控制台应用程序"(或您偏好的C#项目类型),然后点击下一步。

    如何在C#中读取PDF表格,图2:在Visual Studio中创建新的控制台应用程序 在Visual Studio中创建一个新控制台应用程序

  • 为您的项目命名(例如,"ReadPDFTableDemo")并点击下一步。 如何在C#中读取PDF表格,图3:配置新创建的应用程序 配置新创建的应用程序

    • 选择您希望的.NET框架(例如.NET 6或更高版本)。 如何在C#中读取PDF表格,图4:选择.NET Framework 选择一个.NET框架

    • 点击创建。 控制台项目将被创建。

3.安装 IronPDF: *使用 Visual Studio NuGet 包管理器:

  • 在解决方案资源管理器中右键单击您的项目并选择"管理NuGet包..."

    如何在C#中读取PDF表格,图5:工具和管理NuGet包 工具和管理NuGet包

    • 在NuGet包管理器中搜索"IronPDF"并点击"安装"。 如何在C#中读取PDF表格,图6:工具和管理NuGet包 工具和管理NuGet包

    ***直接下载 NuGet 包:**访问 IronPDF 的 NuGet 包页面( https://www.nuget.org/packages/IronPdf/ )。 *下载 IronPDF .DLL 库:从 IronPDF 官方网站下载,并在您的项目中引用该 DLL。

(演示步骤)创建包含表格数据的PDF文档

在本教程中,我们将首先从HTML字符串创建一个包含简单表格的示例PDF。 这为我们提供了已知的PDF结构以展示提取过程。 在实际场景中,您将加载已存在的PDF文件。

添加IronPDF命名空间并(可选)设置您的许可证密钥(IronPDF对开发是免费的,但需要许可证才能在不带水印的商业部署中使用):

using IronPdf;
using System;       // For StringSplitOptions, Console
using System.IO;    // For StreamWriter

// Apply your license key if you have one. Otherwise, IronPDF runs in trial mode.
// License.LicenseKey = "YOUR-TRIAL/PURCHASED-LICENSE-KEY";

这是我们示例表格的HTML字符串:

string HTML = "<html>" +
        "<style>" +
            "table, th, td {" +
                "border:1px solid black;" +
            "}" +
        "</style>" +
        "<body>" +
            "<h1>A Simple table example</h1>" + // Corrected typo: h1 not h2
            "<table>" +
                "<tr>" +
                    "<th>Company</th>" +
                    "<th>Contact</th>" +
                    "<th>Country</th>" +
               "</tr>" +
                "<tr>" +
                    "<td>Alfreds Futterkiste</td>" +
                    "<td>Maria Anders</td>" +
                    "<td>Germany</td>" +
                "</tr>" +
                "<tr>" +
                    "<td>Centro comercial Moctezuma</td>" +
                    "<td>Francisco Chang</td>" +
                    "<td>Mexico</td>" +
                "</tr>" +
            "</table>" +
            "<p>To understand the example better, we have added borders to the table.</p>" +
        "</body>" +
        "</html>";
HTML

现在,使用ChromePdfRenderer从此HTML创建PDF:

var renderer = new ChromePdfRenderer();
PdfDocument pdfDocument = renderer.RenderHtmlAsPdf(HTML);
pdfDocument.SaveAs("table_example.pdf");
Console.WriteLine("Sample PDF 'table_example.pdf' created.");

该SaveAs方法保存PDF。 生成的table_example.pdf看起来将是这样的(基于HTML的概念图):

如何在C#中读取PDF表格,图7:在NuGet包管理器UI中搜索IronPDF 在NuGet包管理器UI中搜索IronPDF

从PDF中提取包含表格数据的所有文本

要提取表格数据,我们首先加载PDF(可以是我们刚创建的或任何现有的PDF),然后使用ExtractAllText方法。 此方法从PDF页面检索所有文本内容。

// Load the PDF (if you just created it, it's already loaded in pdfDocument)
// If loading an existing PDF:
// PdfDocument pdfDocument = PdfDocument.FromFile("table_example.pdf"); 
// Or use the one created above:
string allText = pdfDocument.ExtractAllText();

现在,allText变量持有PDF中的所有文本内容。 您可以显示它以查看原始提取:

Console.WriteLine("\n--- Raw Extracted Text ---");
Console.WriteLine(allText);

如何在C#中读取PDF表格,图8:提取文本的PDF文件 要提取文本的PDF文件

解析提取的文本以重建C#中的表格数据

提取的原始文本后,下一个挑战是解析该字符串以识别和构建表格数据。 这一步高度依赖于PDF中表格的格式和一致性。

一般解析策略:

  1. **识别行分隔符:**换行符(\r\n)是常见的行分隔符。
  2. **识别列分隔符:**行中的单元格可能由多个空格、制表符或特定已知字符(如'|"或';')分隔。 有时,如果列是视觉对齐的但缺乏明确的文本分隔符,您可能会根据一致的间距模式推断结构,尽管这更复杂。
  3. 过滤非表格内容:ExtractAllText方法获取所有文本。 您需要逻辑来隔离实际形成表格的文本,可能通过寻找标题关键词或跳过前言/后记文本。

C# String.Split方法是一个基本工具。 以下代码示例尝试仅从我们的示例中提取表格行,过滤掉带圆点的行(对于此具体示例的简单启发法):

Console.WriteLine("\n--- Parsed Table Data (Simple Heuristic) ---");
string[] textLines = allText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in textLines)
{
    // Simple filter: skip lines with a period, assuming they are not table data in this example
    // and skip lines that are too short or headers if identifiable
    if (line.Contains(".") || line.Contains("A Simple table example") || line.Length < 5) 
    {
        continue;
    }
    else
    {
        // Further split line into cells based on expected delimiters (e.g., multiple spaces)
        // This part requires careful adaptation to your PDF's table structure
        // Example: string[] cells = line.Split(new[] { "  ", "\t" }, StringSplitOptions.None);
        Console.WriteLine(line); // For now, just print the filtered line
    }
}

此代码将文本拆分为行。 if条件是这个特定示例中非表格文本的一个非常基本的过滤器。 在现实场景中,您需要更健壮的逻辑来准确识别和解析表格行和单元格。

简单过滤文本的输出:

如何在C#中读取PDF表格,图9:控制台显示提取的文本 控制台显示提取的文本

文本解析方法的重要考虑因素:

  • 最佳适用场合: 适用于具有简单、一致的表格结构和明确文本分隔符的文本型PDF。
  • **局限性:**此方法可能在以下方面遇到困难:
    • 具有合并单元格或复杂嵌套结构的表格。
    • 列由视觉间距而非文本分隔符定义的表格。
    • 作为图像嵌入的表格(需要OCR)。
    • PDF生成的变化导致文本提取顺序不一致。

您可以将过滤后的行(理想地表示表格行)保存到CSV文件中:

using (StreamWriter file = new StreamWriter("parsed_table_data.csv", false))
{
    file.WriteLine("Company,Contact,Country"); // Write CSV Header
    foreach (string line in textLines)
    {
        if (line.Contains(".") || line.Contains("A Simple table example") || line.Length < 5)
        {
            continue;
        }
        else
        {
            // For a real CSV, you'd split 'line' into cells and join with commas
            // E.g., string[] cells = line.Split(new[] {"  "}, StringSplitOptions.RemoveEmptyEntries);
            // string csvLine = string.Join(",", cells);
            // file.WriteLine(csvLine);
            file.WriteLine(line.Replace("  ", ",").Trim()); // Basic replacement for this example
        }
    }
}
Console.WriteLine("\nFiltered table data saved to parsed_table_data.csv");

在C#中提取更复杂的PDF表格的策略

从复杂或基于图像的PDF表格中提取数据通常需要比简单文本解析更高级的技术。 IronPDF提供的功能可以帮助:

  • **使用IronOCR的能力提取扫描表格:**如果表格在图像中(例如,扫描过的PDFs),ExtractAllText()单独无法捕捉它们。 IronOCR的文本检测功能可以首先将这些图像转换为文本。
// Conceptual OCR usage (refer to IronOCR's documentation for detailed implementation)
// Install Package IronOcr
using IronOcr;
using (var ocrInput = new OcrInput("scanned_pdf_with_table.pdf"))
{
     ocrInput.TargetDPI = 300; // Good DPI for OCR accuracy
     var ocrResult = new IronOcr().Read(ocrInput);
     string ocrExtractedText = ocrResult.Text;
     // Now, apply parsing logic to 'ocrExtractedText'
     Console.WriteLine("\n--- OCR Extracted Text for Table Parsing ---");
     Console.WriteLine(ocrExtractedText);
}

有关详细指导,请访问IronOCR文档(https://ironsoftware.com/csharp/ocr/)。 进行OCR后,您需要解析得到的文本字符串。

  • **基于坐标的文本提取(高级):**虽然IronPDF的ExtractAllText()提供文本流,但在某些场景中知道每个文本片段的x,y坐标可能会有好处。 如果IronPDF提供获取文本及其边界框信息的API(请查看当前文档),这可能允许基于视觉对齐进行更复杂的空间解析以重建表格。

  • 将PDF转换为其他格式: IronPDF可以将PDF转换为结构化格式,如HTML。 通常,解析HTML表格比解析原始PDF文本更简单。

PdfDocument pdfToConvert = PdfDocument.FromFile("your_document.pdf");
string htmlOutput = pdfToConvert.ToHtmlString();
// Then use an HTML parsing library (e.g., HtmlAgilityPack) to extract tables from htmlOutput.
  • **模式识别和正则表达式:**对于具有非常可预测模式但分隔符不一致的表格,应用于提取文本的复杂正则表达式有时可以隔离表格数据。

选择正确的策略取决于您源PDF的复杂性和一致性。 对于许多具有基于文本的表格的常见商业文档,IronPDF的ExtractAllText结合智能C#解析逻辑可以非常有效。对于基于图像的表格,其OCR功能是必要的。

总结

本文演示了如何使用IronPDF在C#中从PDF文档中提取表格数据,主要集中在利用ExtractAllText()方法和随后的字符串解析。 我们已经看到,虽然这种方法对于基于文本的表格非常有效,但像基于图像的表格这样更复杂的情况可以使用IronPDF的OCR功能或通过先将PDF转换为其他格式来处理。

IronPDF为.NET开发人员提供多功能的工具包,简化了许多与PDF相关的任务,从创建和编辑到全面的数据提取。 它提供了像ExtractTextFromPage这样的页面特定提取方法,并支持从如markdown或DOCX等格式转换为PDF。

IronPDF对开发是免费的,并提供免费试用许可证用于测试其完整的商业功能。 针对生产部署,提供多种许可选项。

欲了解更多详细信息和高级用例,探索官方IronPDF文档和示例(https://ironpdf.com/)

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% 解锁。无需信用卡。

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

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

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

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999 起