function FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;
| Text | WString。現在のページで検索する Unicode テキスト文字列です |
| Options | TSearchOptions。マッチングの動作を制御する TSearchOption フラグの集合です。サポートされるフラグは soMatchCase (大文字小文字を区別するマッチ) と soMatchWholeWord (完全な単語のみにマッチ) です。大文字小文字を区別せず部分文字列を検索するには [] を渡します |
| StartIndex | Integer。検索を開始する 0 起点の文字インデックスです。-1 を渡すとページの最後の文字から開始します (DirectionUp が False のときに便利です)。デフォルトは 0 です |
| DirectionUp | Boolean。初期の検索方向を決定します。True (デフォルト) は StartIndex からページ末尾へ向かって検索し、False はページ先頭へ向かって検索します。以降の FindNext の呼び出しは常に前へ、FindPrevious は常に後ろへ進みます |
-1 になります。内部の検索ハンドルは保持されるため、以降の FindNext や FindPrevious の呼び出しは再初期化なしで検索を続けられますFindFirst は、現在読み込まれている PDF ページ上の全文検索を開始します。Unicode 検索文字列と、省略可能なマッチングフラグ、開始文字位置、方向のヒントを受け取ります。成功すると最初のマッチの 0 起点の文字インデックスを返し、以降の 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;