Извлечь текст из PDF C++

Извлечение текста из документов (PDF, текстовая обработка, веб-страницы и т. д.) имеет множество вариантов использования в мире цифровой информации. Например, его можно использовать для синтаксического анализа документов, выполнения анализа текста, поиска информации, сохранения содержимого документов в базах данных и так далее. Если сузить круг, PDF является одним из наиболее широко используемых форматов документов для хранения и обмена цифровой информацией. Эта популярность делает PDF-документы огромным источником информации. Следовательно, синтаксический анализ или извлечение текста из PDF-документов может быть задействован в ряде сценариев анализа текста.

Чтобы автоматизировать синтаксический анализ PDF-файлов в приложениях C++, в этой статье показано, как извлекать текст из PDF-документов с помощью C++. Он охватывает следующие сценарии извлечения текста:

  • Извлечение текста из PDF-документа с помощью C++.
  • Извлечение текста с определенных страниц документа PDF с помощью C++.
  • Постраничное извлечение текста из PDF-документа с использованием C++.

C++ PDF Reader и библиотека для извлечения текста

Для извлечения текста из документов 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->set_StartPage() и PdfExtractor->set_EndPage() соответственно.
  • Извлеките текст из 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 на С++

Вместо того, чтобы извлекать весь текст из документа 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 для C++

Вы можете узнать больше об Aspose.PDF для C++, используя документацию.

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