function RectangleCount(StartIndex: Integer = 0; Count: Integer = MaxInt): Integer;
| StartIndex | Integer. Индекс с нуля первого символа измеряемого сегмента. По умолчанию 0 |
| Count | Integer. Число символов, включаемых в измерение, начиная с StartIndex. По умолчанию MaxInt — покрывает все оставшиеся символы страницы |
Rectangle[0] до Rectangle[RectangleCount - 1]RectangleCount вычисляет набор габаритных прямоугольников, которые вместе покрывают непрерывный прогон символов на текущей странице. Символы одной строки с одинаковыми настройками шрифта автоматически объединяются в один прямоугольник, сводя результат к минимальному числу непересекающихся боксов, необходимых для подсветки текста
Параметры StartIndex и Count задают измеряемый сегмент символов. Типичное применение — передать как StartIndex индекс совпадения из FindFirst или FindNext, а как Count — длину строки поиска, чтобы получить прямоугольники подсветки для результата поиска
Возвращённые прямоугольники хранятся во внутреннем буфере и остаются валидными до следующего вызова RectangleCount. Доставайте каждый прямоугольник чтением свойства Rectangle[Index] для Index в диапазоне от 0 до RectangleCount - 1. Все координаты — в пользовательских единицах PDF (пункты, начало внизу слева)
Для простого количества всех символов страницы есть CharacterCount; чтобы найти, где на странице сидит конкретный символ, — CharacterIndexAtPos
var
MatchIdx, RCount, I: Integer;
Rect: TPdfRectangle;
begin
Pdf1.PageIndex := 0;
MatchIdx := Pdf1.FindFirst('PDFium');
if MatchIdx >= 0 then
begin
RCount := Pdf1.RectangleCount(MatchIdx, Length('PDFium'));
for I := 0 to RCount - 1 do
begin
Rect := Pdf1.Rectangle[I];
// Draw a highlight box using Rect.Left/Top/Right/Bottom
Memo1.Lines.Add(Format('Rect %d: (%.1f, %.1f, %.1f, %.1f)',
[I, Rect.Left, Rect.Bottom, Rect.Right, Rect.Top]));
end;
end;
end;