提取 PDF 表格

PDF 已成為眾多領域中使用最廣泛的文檔格式之一。在各種情況下,它用於生成數據以表格形式顯示的發票。在這種情況下,您可能需要解析 PDF 以編程方式從表中讀取數據。為此,本文介紹瞭如何使用 C# 從 PDF 表格中提取數據。

從 PDF 中提取表格的 C# API

為了從 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 的更多信息。此外,您可以在我們的 論壇 上發布您的疑問。

也可以看看