提取 PDF 表格

PDF 已成为众多领域中使用最广泛的文档格式之一。在各种情况下,它用于生成数据以表格形式出现的发票。在这种情况下,您可能需要解析 PDF 以编程方式从表中读取数据。为此,本文介绍了如何使用 C# 从 PDF 表中提取数据。

C# API 从 PDF 中提取表格

为了从 PDF 文件中的表格中提取数据,我们将使用 Aspose.PDF for .NET。它是一个强大的 API,提供了广泛的 PDF 操作功能。您可以 下载 API 或使用 NuGet 安装它。

PM> Install-Package Aspose.PDF

在 C# 中从 PDF 表中提取数据

以下是使用 C# 从 PDF 中的表中提取数据的步骤。

以下代码示例展示了如何在 C# 中从 PDF 表中提取文本。

// 加载源 PDF 文档
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// 循环浏览页面                      
foreach (var page in pdfDocument.Pages)
{
	// 创建表格吸收器并访问页面
	Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
	absorber.Visit(page);
	
	// 循环遍历每个吸收的表 
	foreach (AbsorbedTable table in absorber.TableList)
	{
		Console.WriteLine("Table");
		
		// 循环遍历表中的每一行
		foreach (AbsorbedRow row in table.RowList)
		{
			// 循环遍历行中的每个单元格
			foreach (AbsorbedCell cell in row.CellList)
			{       
				// 循环遍历文本片段
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
						sb.Append(seg.Text);
					Console.Write($"{sb.ToString()}|");
				}                           
			}
			Console.WriteLine();
		}
	}
}

从页面的特定区域提取表格

以下是使用 C# 从 PDF 中页面的特定部分提取表格的步骤。

以下代码示例展示了如何从 PDF 页面的特定区域提取表格。

// 加载源 PDF 文档
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// 选择页面并提取其方形注释
var page = pdfDocument.Pages[1];
var squareAnnotation =
	page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
	as Annotations.SquareAnnotation;

// 创建表格吸收器并访问页面
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);

// 循环遍历列表中的每个吸收表 
foreach (AbsorbedTable table in absorber.TableList)
{
	var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
	(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
	(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
	(squareAnnotation.Rect.URY > table.Rectangle.URY);

	if (isInRegion)
	{
		// 循环遍历表格的每一行
		foreach (AbsorbedRow row in table.RowList)
		{
			// 循环遍历行中的每个单元格
			foreach (AbsorbedCell cell in row.CellList)
			{
				// 循环遍历文本片段并打印文本
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
					{
						sb.Append(seg.Text);
					}
					var text = sb.ToString();
					Console.Write($"{text}|");
				}
			}
			Console.WriteLine();
		}
	}
}

获得免费许可证

您可以使用 临时许可证 使用 Aspose.PDF for .NET,而不受评估限制。

结论

在本文中,您学习了如何使用 C# 从 PDF 中的表中提取数据。此外,您还了解了如何从 PDF 页面的特定区域提取表格。您可以使用 文档 探索有关 C# PDF API 的更多信息。此外,您可以在我们的 论坛 上发布您的查询。

也可以看看