PDF 文件是通過 Internet 交換文檔的標準格式。發票和產品指南等文檔通常以 PDF 格式共享。在某些情況下,您可能有多個發票,其中包含您需要提取和進一步處理的表格數據。以編程方式提取此數據會更有效。為此,本文將教您如何使用 C++ 從 PDF 表格中提取數據。

用於從 PDF 文件中的表中提取數據的 C++ API

Aspose.PDF for C++ 是一個 C++ 庫,允許您創建、讀取和更新 PDF 文件。此外,API 支持從 PDF 文件中的表格中提取數據。您可以通過 NuGet 安裝 API 或直接從 下載 部分下載。

PM> Install-Package Aspose.PDF.Cpp

使用 C++ 從 PDF 表中提取數據

以下是從 PDF 表格中提取數據的步驟。

以下示例代碼展示瞭如何使用 C++ 從 PDF 表格中提取數據。

// 加載 PDF 文檔
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");

// 遍歷文檔的頁面
for (auto page : pdfDocument->get_Pages())
{
	// 創建 TableAbsorber 類的實例
	auto absorber = MakeObject<TableAbsorber>();
	absorber->Visit(page);

	// 遍歷表格
	for (auto table : absorber->get_TableList())
	{
		Console::WriteLine(u"Table");

		// 遍歷行
		for (auto row : table->get_RowList())
		{
			// 遍歷單元格
			for (auto cell : row->get_CellList())
			{
				// 遍歷文本片段
				for (auto fragment : cell->get_TextFragments())
				{
					String string = u"";

					// 遍歷文本段
					for (auto seg : fragment->get_Segments())
					{
						// 獲取文本
						string = String::Concat(string, seg->get_Text());
					}

					// 打印文本
					Console::WriteLine(string);
				}
			}
			Console::WriteLine();
		}
	}
}

從 PDF 頁面特定區域的表格中提取數據

要從 PDF 頁面特定區域的表格中提取數據,請按照以下步驟操作。

以下示例代碼演示瞭如何使用 C++ 從 PDF 頁面特定區域的表格中提取數據。

// 加載 PDF 文檔
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");

// 獲取文檔的第一頁
auto page = pdfDocument->get_Pages()->idx_get(1);

// 遍歷頁面上的註釋
for (auto annotation : page->get_Annotations())
{
	// 檢查註解類型
	if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
	{
		System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);

		// 創建 TableAbsorber 類的實例
		auto absorber = MakeObject<TableAbsorber>();
		absorber->Visit(page);

		// 遍歷表格
		for (auto table : absorber->get_TableList())
		{
			// 檢查表是否在區域中
			if ((squareAnnotation->get_Rect()->get_LLX() < table->get_Rectangle()->get_LLX()) &&
				(squareAnnotation->get_Rect()->get_LLY() < table->get_Rectangle()->get_LLY()) &&
				(squareAnnotation->get_Rect()->get_URX() > table->get_Rectangle()->get_URX()) &&
				(squareAnnotation->get_Rect()->get_URY() > table->get_Rectangle()->get_URY())
				)
			{
				// 遍歷行
				for (auto row : table->get_RowList())
				{
					// 遍歷單元格
					for (auto cell : row->get_CellList())
					{
						// 遍歷文本片段
						for (auto fragment : cell->get_TextFragments())
						{
							String string = u"";

							// 遍歷文本段
							for (auto seg : fragment->get_Segments())
							{
								// 獲取文本
								string = String::Concat(string, seg->get_Text());
							}

							// 打印文本
							Console::WriteLine(string);
						}
					}
					Console::WriteLine();
				}
			}
		}
		break;
	}
}

獲得免費許可證

為了在沒有評估限制的情況下試用 API,您可以申請免費的臨時許可證

結論

在本文中,您學習瞭如何使用 C++ 從 PDF 表格中提取數據。此外,您還學習瞭如何從 PDF 頁面特定區域的表格中提取數據。 Aspose.PDF for C++ API 提供了許多用於處理 PDF 文件的附加功能。您可以通過訪問 官方文檔 來詳細探索 API。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。

也可以看看