Файли 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. API Aspose.PDF for C++ надає багато додаткових функцій для роботи з файлами PDF. Ви можете детально вивчити API, відвідавши офіційну документацію. У разі будь-яких запитань зв’яжіться з нами на нашому безкоштовному форумі підтримки.

Дивись також