StartIndex отсчитывается от нуля, -1 означает конец страницы. Параметр DirectionUp определяет направление этой операции поискаfunction FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;
| Text | WString. Строка Unicode для поиска на текущей странице |
| Options | TSearchOptions. 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. |
| 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;