PDFファイルは、インターネットを介してドキュメントを交換するための標準形式です。請求書や製品ガイドなどのドキュメントは通常、PDF形式で共有されます。表形式のデータを含む複数の請求書があり、さらに抽出して処理する必要がある場合があります。プログラムでこのデータを抽出する方が効率的です。そのために、この記事では、C++を使用してPDFテーブルからデータを抽出する方法を説明します。

PDFファイルのテーブルからデータを抽出するためのC++API

Aspose.PDF for C++は、PDFファイルを作成、読み取り、更新できるC++ライブラリです。さらに、APIはPDFファイルのテーブルからのデータの抽出をサポートしています。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

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の詳細を調べることができます。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目