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 中的表格中提取數據的步驟。
- 使用 Document 類加載 PDF 文檔。
- 使用 Document.Pages 集合循環瀏覽 PDF 中的頁面。
- 在每次迭代中,初始化 TableAbsorber 對象並使用 TableAbsorber.Visit(Page) 方法訪問所選頁面。
- 在嵌套循環中,遍歷 TableAbsorber.TableList 集合中的表列表。
- 對於集合中的每個 AbsorbedTable,遍歷 AbsorbedTable.RowList 中的行集合。
- 對於集合中的每個 AbsorbedRow,遍歷 AbsorbedRow.CellList 中的單元格集合。
- 最後,遍歷每個 AbsorbedCell 的 TextFragments 集合併打印文本。
以下代碼示例顯示瞭如何在 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 頁面的特定部分提取表格的步驟。
- 使用 Document 類加載 PDF 文檔。
- 從 Document.Pages 集合中選擇所需的 Page。
- 提取頁面的方形註釋。
- 初始化 TableAbsorber 對象並使用 TableAbsorber.Visit(Page) 方法訪問頁面。
- 在嵌套循環中,遍歷 TableAbsorber.TableList 集合中的表列表。
- 如果表在區域中,則執行以下步驟。
- 遍歷 AbsorbedTable.RowList 中的行集合。
- 對於集合中的每個 AbsorbedRow,遍歷 AbsorbedRow.CellList 中的單元格集合。
- 最後,遍歷每個 AbsorbedCell 的 TextFragments 集合併打印文本。
以下代碼示例展示瞭如何從 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 的更多信息。此外,您可以在我們的 論壇 上發布您的疑問。