Файлы PDF представляют собой стандартный формат для обмена документами через Интернет. Такие документы, как счета и руководства по продуктам, обычно передаются в виде PDF-файлов. Могут возникнуть ситуации, когда у вас есть несколько счетов-фактур, содержащих табличные данные, которые необходимо извлечь и обработать. Более эффективно будет извлечь эти данные программно. С этой целью эта статья научит вас извлекать данные из таблиц PDF с помощью C++.

C++ API для извлечения данных из таблиц в файлы PDF

Aspose.PDF for C++ — это библиотека C++, позволяющая создавать, читать и обновлять PDF-файлы. Кроме того, API поддерживает извлечение данных из таблиц в файлах PDF. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела загрузки.

PM> Install-Package Aspose.PDF.Cpp

Извлечение данных из таблиц PDF с помощью C++

Ниже приведены шаги для извлечения данных из таблиц PDF.

В следующем примере кода показано, как извлечь данные из таблиц PDF с помощью C++.

// Загрузите 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, выполните следующие действия.

В следующем примере кода показано, как извлечь данные из таблицы в определенной области страницы PDF с помощью C++.

// Загрузите 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 без ограничений на пробную версию, вы можете запросить бесплатную временную лицензию.

Вывод

В этой статье вы узнали, как извлекать данные из таблиц PDF с помощью C++. Более того, вы научились извлекать данные из таблицы в определенной области страницы PDF. Aspose.PDF for C++ API предоставляет множество дополнительных функций для работы с PDF-файлами. Вы можете подробно изучить API, посетив официальную документацию. Если у вас возникнут вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.

Смотрите также