PDFium Delphi Component Docs

FindFirst Метод

Компонент: TPdf  ·  Модуль: PDFium
Начинает поиск указанного текста. StartIndex отсчитывается от нуля, -1 означает конец страницы. Параметр DirectionUp определяет направление этой операции поиска

Syntax

function FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;

TextWString. Строка текста Unicode для поиска на текущей странице
OptionsTSearchOptions. Множество флагов TSearchOption, управляющих поведением сопоставления. Поддерживаются флаги soMatchCase (учёт регистра) и soMatchWholeWord (только полные слова). Передайте [] для поиска подстроки без учёта регистра
StartIndexInteger. Индекс символа с отсчётом от нуля, с которого начинается поиск. Передайте -1, чтобы начать с последнего символа страницы (полезно, когда DirectionUp равно False). По умолчанию 0
DirectionUpBoolean. Определяет начальное направление поиска. True (по умолчанию) ищет от StartIndex к концу страницы; False — к началу. Последующие вызовы FindNext всегда движутся вперёд; FindPrevious всегда движется назад

Return Value

Индекс символа первого совпадения, отсчитываемый от нуля, или -1, если совпадение не найдено. Внутренний дескриптор поиска сохраняется, чтобы последующие вызовы FindNext или FindPrevious могли продолжить поиск без повторной инициализации

Description

FindFirst запускает полнотекстовый поиск на текущей загруженной странице PDF. Он принимает строку поиска Unicode вместе с необязательными флагами сопоставления, начальной позицией символа и указанием направления. При успехе возвращает индекс символа первого совпадения с отсчётом от нуля и сохраняет внутренний дескриптор поиска, переиспользуемый последующими вызовами FindNext и FindPrevious. Возвращает -1, когда текст не найден

Параметр StartIndex позволяет начать поиск с любой позиции символа, а не всегда с верха страницы. Передайте 0 (по умолчанию), чтобы начать с самого первого символа, или -1, чтобы закрепиться на последнем символе — удобно при обратном поиске с DirectionUp = False

Используйте параметр Options для уточнения поведения сопоставления. soMatchCase включает сравнение с учётом регистра; soMatchWholeWord ограничивает совпадения только полными словами. Оба флага можно комбинировать. Передача пустого множества [] выполняет поиск подстроки без учёта регистра

После нахождения совпадения вызовите RectangleCount с возвращённым индексом и известной длиной совпадения, чтобы получить ограничивающие прямоугольники найденного текста на странице — полезно для подсветки результатов поиска в средстве просмотра

Example

var
  Idx, MatchLen, R, I: Integer;
  Rect: TPdfRectangle;
begin
  Pdf1.PageIndex := 0;
  MatchLen := Length('invoice');
  Idx := Pdf1.FindFirst('invoice', [], 0, True);
  while Idx >= 0 do
  begin
    // Retrieve bounding rectangles for the matched text
    R := Pdf1.RectangleCount(Idx, MatchLen);
    for I := 0 to R - 1 do
    begin
      Rect := Pdf1.Rectangle[I];
      Memo1.Lines.Add(Format('Match at char %d, rect [%.1f,%.1f,%.1f,%.1f]',
        [Idx, Rect.Left, Rect.Top, Rect.Right, Rect.Bottom]));
    end;
    Idx := Pdf1.FindNext;
  end;
end;

See Also

CreateDocumentSearch, FindNext, FindPrevious, Find, CharacterIndexAtPos, CharacterCount, RectangleCount, Text