Os arquivos PDF são um formato padrão para troca de documentos pela Internet. Documentos como faturas e guias de produtos geralmente são compartilhados na forma de PDFs. Pode haver situações em que você tenha várias faturas contendo dados tabulares que você precisa extrair e processar ainda mais. Será mais eficiente extrair esses dados programaticamente. Para isso, este artigo ensinará como extrair dados de tabelas PDF usando C++.

API C++ para extrair dados de tabelas em arquivos PDF

Aspose.PDF for C++ é uma biblioteca C++ que permite criar, ler e atualizar arquivos PDF. Além disso, a API suporta a extração de dados de tabelas em arquivos PDF. Você pode instalar a API por meio do NuGet ou baixá-la diretamente da seção downloads.

PM> Install-Package Aspose.PDF.Cpp

Extrair dados de tabelas PDF usando C++

A seguir estão as etapas para extrair dados de tabelas PDF.

O código de exemplo a seguir mostra como extrair dados de tabelas PDF usando C++.

// Carregar o documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");

// Iterar pelas páginas do documento
for (auto page : pdfDocument->get_Pages())
{
	// Crie uma instância da classe TableAbsorber
	auto absorber = MakeObject<TableAbsorber>();
	absorber->Visit(page);

	// Iterar pelas tabelas
	for (auto table : absorber->get_TableList())
	{
		Console::WriteLine(u"Table");

		// Iterar pelas linhas
		for (auto row : table->get_RowList())
		{
			// Iterar pelas células
			for (auto cell : row->get_CellList())
			{
				// Iterar através dos fragmentos de texto
				for (auto fragment : cell->get_TextFragments())
				{
					String string = u"";

					// Iterar pelos segmentos de texto
					for (auto seg : fragment->get_Segments())
					{
						// Obtenha o texto
						string = String::Concat(string, seg->get_Text());
					}

					// Imprima o texto
					Console::WriteLine(string);
				}
			}
			Console::WriteLine();
		}
	}
}

Extrair dados de uma tabela em uma área específica de uma página PDF

Para extrair dados de uma tabela em uma área específica de uma página PDF, siga as etapas abaixo.

O código de exemplo a seguir demonstra como extrair dados de uma tabela em uma área específica de uma página PDF usando C++.

// Carregar o documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");

// Obter a primeira página do documento
auto page = pdfDocument->get_Pages()->idx_get(1);

// Iterar pelas anotações na página
for (auto annotation : page->get_Annotations())
{
	// Verifique o tipo de anotação
	if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
	{
		System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);

		// Crie uma instância da classe TableAbsorber
		auto absorber = MakeObject<TableAbsorber>();
		absorber->Visit(page);

		// Iterar pelas tabelas
		for (auto table : absorber->get_TableList())
		{
			// Verifique se a mesa está na região
			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())
				)
			{
				// Iterar pelas linhas
				for (auto row : table->get_RowList())
				{
					// Iterar pelas células
					for (auto cell : row->get_CellList())
					{
						// Iterar através dos fragmentos de texto
						for (auto fragment : cell->get_TextFragments())
						{
							String string = u"";

							// Iterar pelos segmentos de texto
							for (auto seg : fragment->get_Segments())
							{
								// Obtenha o texto
								string = String::Concat(string, seg->get_Text());
							}

							// Imprima o texto
							Console::WriteLine(string);
						}
					}
					Console::WriteLine();
				}
			}
		}
		break;
	}
}

Obtenha uma licença gratuita

Para experimentar a API sem limitações de avaliação, você pode solicitar uma licença temporária gratuita.

Conclusão

Neste artigo, você aprendeu como extrair dados de tabelas PDF usando C++. Além disso, você aprendeu como extrair dados de uma tabela em uma região específica da página do PDF. Aspose.PDF para C++ API fornece muitos recursos adicionais para trabalhar com arquivos PDF. Você pode explorar a API em detalhes visitando a documentação oficial. Em caso de dúvidas, sinta-se à vontade para entrar em contato conosco em nosso fórum de suporte gratuito.

Veja também