Извлечение текста из документов (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.
- Создайте объект класса PdfExtractor.
- Загрузите документ PDF с помощью функции PdfExtractor->BindPdf().
- Вызовите функцию PdfExtractor->ExtractText() для извлечения текста из документа PDF в PdfExtractor.
- Прокрутите каждую страницу, используя функцию PdfExtractor->HasNextPageText().
- Извлеките текст в поток памяти с помощью функции PdfExtractor->GetNextPageText().
- Чтение текста из потока памяти.
В следующем примере кода показано, как извлечь текст постранично из 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++, используя документацию.