Поиск текстовых сегментов на странице в файле PDF

Введение

Вы когда-нибудь задумывались, как найти определенные текстовые сегменты в документе PDF с помощью Aspose.PDF для .NET? Что ж, вам повезло! В этом руководстве мы проведем вас через процесс в простом, пошаговом формате. Если вы пытаетесь извлечь информацию, проанализировать текст или просто разобраться в тонкостях манипуляции PDF, Aspose.PDF для .NET поможет вам. Давайте погрузимся!

Предпосылки

Прежде чем начать, давайте убедимся, что у вас есть все необходимое:

  • Aspose.PDF для .NET: Убедитесь, что у вас установлена библиотека. Вы можете взять ее здесьздесь.
  • .NET Framework: Убедитесь, что на вашем компьютере установлен .NET.
  • Среда разработки: рекомендуется Visual Studio или любая IDE с поддержкой .NET.
  • PDF-документ: PDF-файл, в котором вы будете искать текстовые сегменты.

Если у вас еще нет Aspose.PDF для .NET, не волнуйтесь! Вы можете получить бесплатную пробную версию отздесь или купить егоздесь.

Импортные пакеты

Прежде чем начать кодирование, крайне важно импортировать необходимые пакеты в ваш проект. Это гарантирует, что все требуемые классы и методы будут доступны для ваших задач по манипуляции PDF.

using System.IO;
using Aspose.Pdf;
using Aspose.Pdf.Text;
using System;

Определившись с основами, давайте перейдем к пошаговому руководству.

Шаг 1: Загрузите PDF-документ

Первый шаг в этом процессе — загрузка вашего PDF-файла в программу. Без загруженного документа нечего искать, верно? Вот как это сделать.

// Путь к каталогу документов.
string dataDir = "YOUR DOCUMENT DIRECTORY";
// Открыть документ
Document pdfDocument = new Document(dataDir + "SearchTextSegmentsPage.pdf");
  • dataDir : Эта переменная хранит путь к вашему PDF-файлу. Заменить"YOUR DOCUMENT DIRECTORY" на фактический каталог, где хранится ваш файл.
  • pdfDocument : ИспользованиеDocument класс, мы загружаем PDF в память.

Шаг 2: Настройка текстового поиска

Теперь, когда ваш документ загружен, следующим шагом будет созданиеTextFragmentAbsorber объект, который позволяет нам искать определенный текст в документе.

// Создайте объект TextAbsorber для поиска всех вхождений введенной поисковой фразы.
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("text");
  • TextFragmentAbsorber : Этот объект используется для захвата всех вхождений текста, который вы ищете. Заменить"text" с фактическим текстом, который вы хотите найти.

Шаг 3: Примите поглотитель для определенных страниц

Вы не всегда можете захотеть искать по всему документу PDF. В этом примере мы сужаем его до определенной страницы.

// Принять поглотитель для всех страниц
pdfDocument.Pages[2].Accept(textFragmentAbsorber);
  • pdfDocument.Pages[2]: Это означает, что мы ищем только вторую страницу документа. Вы можете изменить индекс, чтобы нацелиться на другие страницы.
  • Accept() : Этот метод позволяетTextFragmentAbsorber для обработки текста на указанной странице.

Шаг 4: Извлечение фрагментов текста

После поиска по странице мы извлекаем найденные фрагменты текста в коллекцию.

// Получить извлеченные фрагменты текста
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;
  • TextFragmentCollection: В этой коллекции хранятся все экземпляры фрагментов текста, найденные в процессе поиска.

Шаг 5: Перебор фрагментов текста и извлечение данных

Теперь давайте пройдемся по каждому фрагменту текста и извлечем из него такие детали, как положение, шрифт и цвет.

// Просмотрите фрагменты
foreach (TextFragment textFragment in textFragmentCollection)
{
    foreach (TextSegment textSegment in textFragment.Segments)
    {
        Console.WriteLine("Text : {0} ", textSegment.Text);
        Console.WriteLine("Position : {0} ", textSegment.Position);
        Console.WriteLine("XIndent : {0} ", textSegment.Position.XIndent);
        Console.WriteLine("YIndent : {0} ", textSegment.Position.YIndent);
        Console.WriteLine("Font - Name : {0}", textSegment.TextState.Font.FontName);
        Console.WriteLine("Font - IsAccessible : {0} ", textSegment.TextState.Font.IsAccessible);
        Console.WriteLine("Font - IsEmbedded : {0} ", textSegment.TextState.Font.IsEmbedded);
        Console.WriteLine("Font - IsSubset : {0} ", textSegment.TextState.Font.IsSubset);
        Console.WriteLine("Font Size : {0} ", textSegment.TextState.FontSize);
        Console.WriteLine("Foreground Color : {0} ", textSegment.TextState.ForegroundColor);
    }
}
  • foreach (TextFragment textFragment in textFragmentCollection) : Мы проходим по каждомуTextFragment в коллекции.
  • foreach (TextSegment textSegment in textFragment.Segments): Внутри каждого фрагмента есть несколько сегментов. Мы проходим по ним, чтобы собрать всю необходимую информацию.
  • Различные свойстваtextSegmentОни предоставляют нам подробную информацию о тексте, такую как его положение (X и Y), сведения о шрифте, размер и цвет.

Шаг 6: Вывод результатов

Наконец, после извлечения всей информации, результаты выводятся в консоль. Это помогает вам точно увидеть, где находится текст и детали его форматирования.

Для ясности приведем пример вывода:

Text : text
Position : X: 45.0, Y: 75.0
XIndent : 45.0
YIndent : 75.0
Font - Name : Arial
Font - IsAccessible : True
Font - IsEmbedded : False
Font - IsSubset : False
Font Size : 12.0
Foreground Color : System.Drawing.Color [Black]
  • Этот вывод дает вам точное местоположение и информацию о форматировании текста «text» на указанной странице.

Заключение

И вот оно! Вы только что узнали, как искать определенные текстовые сегменты в документе PDF с помощью Aspose.PDF для .NET. Этот процесс очень удобен при работе с большими PDF-файлами, позволяя вам эффективно определять и извлекать ключевой текст. Будь то анализ данных, извлечение информации или просто навигация по документу, Aspose.PDF предоставляет вам мощные инструменты для выполнения работы.

Часто задаваемые вопросы

Могу ли я искать несколько слов или фраз?

Да, вы можете изменитьTextFragmentAbsorberдля поиска другого текста путем изменения входной строки.

Возможен ли поиск по нескольким страницам?

Конечно! Вы можете просмотреть все страницы в PDF-файле, перебираяpdfDocument.Pages.

Как искать текст без учета регистра?

Вы можете использоватьTextSearchOptions для включения поиска без учета регистра.

Могу ли я изменить текст после его нахождения?

Да, как только вы найдетеTextFragment, вы можете изменить его текстовые свойства.

Применим ли этот метод к зашифрованным PDF-файлам?

Да, если вы разблокируете PDF-файл, используя правильный пароль.