Видобути текст із PDF C++

Виділення тексту з документів (PDF, текстовий редактор, веб-сторінки тощо) має різноманітні варіанти використання у світі цифрової інформації. Наприклад, його можна використовувати для аналізу документів, аналізу тексту, пошуку інформації, зберігання вмісту документів у базах даних тощо. Якщо ми звузимо його, то PDF є одним із найпоширеніших форматів документів для зберігання та обміну цифровою інформацією. Ця популярність робить PDF-документи величезним джерелом інформації. Таким чином, розбір або вилучення тексту з PDF-документів може бути залучено до низки сценаріїв аналізу тексту.

Щоб автоматизувати розбір PDF-файлів у програмах C++, у цій статті показано, як видобувати текст із документів PDF за допомогою C++. Він охоплює такі сценарії вилучення тексту:

  • Витягніть текст із документа PDF за допомогою C++.
  • Витягніть текст із певних сторінок документа PDF за допомогою C++.
  • Посторінкове вилучення тексту з документа PDF за допомогою C++.

C++ PDF Reader і Text Extractor Library

Для отримання тексту з PDF-документів ми будемо використовувати Aspose.PDF for C++, яка є потужною PDF-бібліотекою для створення, конвертації та аналізу PDF-документів. Ви можете завантажити файли бібліотеки, а також зразки запущеного коду з розділу Завантаження.

Витягніть текст із PDF за допомогою C++

Aspose.PDF for C++ дозволяє аналізувати PDF-документи за кілька простих кроків. Нижче наведено рецепт вилучення тексту з документа PDF.

  • Створіть об’єкт класу PdfExtractor.
  • Завантажте PDF-документ за допомогою функції PdfExtractor->BindPdf().
  • Витягніть текст із документа PDF у PdfExtractor за допомогою функції PdfExtractor->ExtractText().
  • Збережіть витягнутий текст в об’єкт MemoryStream.
  • Прочитайте текст як рядок із MemoryStream.

У наведеному нижче прикладі коду показано, як отримати текст із PDF-файлу за допомогою C++.

auto extractor = MakeObject<Facades::PdfExtractor>();
// Прив’язати вихідний документ PDF
extractor->BindPdf(u"candy.pdf");
// Витягніть текст із PDF у PdfExtractor
extractor->ExtractText();
auto memStream = MakeObject<IO::MemoryStream>();
// Зберегти текст у потік пам'яті
extractor->GetText(memStream);
auto unicode = System::Text::Encoding::get_Unicode();
String allText = unicode->GetString(memStream->ToArray());
// Роздрукувати вилучений текст
Console::WriteLine(u"Extracted text:");
Console::WriteLine(allText);

Витягніть текст із певних сторінок у PDF за допомогою C++

Може бути випадок, коли вам потрібно витягти текст лише з кількох сторінок PDF-файлу. Для такого випадку ви можете вказати діапазон сторінок у PDF, установивши початкові та кінцеві номери сторінок. Нижче наведено кроки для вилучення тексту з певних сторінок PDF-документа.

  • Створіть об’єкт класу PdfExtractor.
  • Завантажте PDF-документ за допомогою функції PdfExtractor->BindPdf().
  • Встановіть номер початкової та кінцевої сторінок за допомогою функцій PdfExtractor->setStartPage() та PdfExtractor->setEndPage() відповідно.
  • Витягніть текст із PDF за допомогою функції PdfExtractor->ExtractText().
  • Збережіть витягнутий текст в об’єкт MemoryStream.
  • Прочитайте текст як рядок із MemoryStream.

У наведеному нижче прикладі коду показано, як отримати текст із певних сторінок PDF-файлу на C++.

auto extractor = MakeObject<Facades::PdfExtractor>();
// Прив’язати вихідний документ PDF
extractor->BindPdf(u"candy.pdf");
// Установити діапазон сторінок
extractor->set_StartPage(2);
extractor->set_EndPage(2);
// Витягніть текст із PDF у PdfExtractor
extractor->ExtractText();
auto memStream = MakeObject<IO::MemoryStream>();
// Зберегти текст у потік пам'яті
extractor->GetText(memStream);
auto unicode = System::Text::Encoding::get_Unicode();
String allText = unicode->GetString(memStream->ToArray());
// Роздрукувати вилучений текст
Console::WriteLine(u"Extracted text:");
Console::WriteLine(allText);

Витягуйте текст сторінка за сторінкою з PDF на C++

Замість того, щоб витягувати весь текст із документа PDF, ви можете витягувати текст із кожної сторінки документа окремо. Нижче наведено кроки для посторінкового вилучення тексту з PDF.

У наведеному нижче прикладі коду показано, як видобувати текст сторінка за сторінкою з PDF-файлу на C++.

auto extractor = MakeObject<Facades::PdfExtractor>();
// Прив’язати вихідний документ PDF
extractor->BindPdf(u"candy.pdf");
// Витягніть текст із PDF у PdfExtractor
extractor->ExtractText();
auto unicode = System::Text::Encoding::get_Unicode();
int pageNumber = 1; 

while (extractor->HasNextPageText())
{
	auto memStream = MakeObject<IO::MemoryStream>();
	extractor->GetNextPageText(memStream);
	String text;
	// Укажіть тип кодування Unicode у конструкторі StreamReader
	auto streamReader = MakeObject<StreamReader>(memStream, unicode);
	streamReader->get_BaseStream()->Seek(0, SeekOrigin::Begin);
	text = streamReader->ReadToEnd();
	streamReader->Dispose();
	// Роздрукувати вилучений текст
	std::cout << "Page: " << pageNumber << "\n";
	Console::Write(text);
	std::cout << "\n------------------------\n";
	pageNumber++;
}

Дізнайтеся більше про Aspose.PDF for C++

Ви можете дізнатися більше про Aspose.PDF for C++ за допомогою документації.

Дивись також