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;