Документация PDFiumPas

FindFirst Метод

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

Синтаксис

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

TextWString. Строка Unicode для поиска на текущей странице
OptionsTSearchOptions. A set of TSearchOption flags that control matching behaviour. Supported flags are soMatchCase (case-sensitive match) and soMatchWholeWord (whole-word match only). Pass [] for a case-insensitive, substring search.
StartIndexInteger. Индекс символа, с которого начинается поиск, отсчитываемый от нуля. Передайте -1, чтобы начать с последнего символа на странице, что полезно, когда DirectionUp равен False. По умолчанию 0
DirectionUpBoolean. Определяет начальное направление поиска. True (по умолчанию) ищет от StartIndex к концу страницы; False ищет к началу. Последующие вызовы FindNext всегда движутся вперед; FindPrevious всегда движется назад

Return Value

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

Описание

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

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

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

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

Пример

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;

См. также

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