function FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;
| Text | WString. Строка текста Unicode для поиска на текущей странице |
| Options | TSearchOptions. Множество флагов TSearchOption, управляющих поведением сопоставления. Поддерживаются флаги soMatchCase (учёт регистра) и soMatchWholeWord (только полные слова). Передайте [] для поиска подстроки без учёта регистра |
| StartIndex | Integer. Индекс символа с отсчётом от нуля, с которого начинается поиск. Передайте -1, чтобы начать с последнего символа страницы (полезно, когда DirectionUp равно False). По умолчанию 0 |
| DirectionUp | Boolean. Определяет начальное направление поиска. True (по умолчанию) ищет от StartIndex к концу страницы; False — к началу. Последующие вызовы FindNext всегда движутся вперёд; FindPrevious всегда движется назад |
-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;