function RectangleCount(StartIndex: Integer = 0; Count: Integer = MaxInt): Integer;
| StartIndex | Integer. Индекс первого символа в измеряемом сегменте с нумерацией с нуля. По умолчанию 0 |
| Count | Integer. Количество символов, которые нужно включить в измерение, начиная с StartIndex. По умолчанию MaxInt, что охватывает все оставшиеся символы на странице |
Rectangle[0] до Rectangle[RectangleCount - 1]RectangleCount вычисляет набор bounding rectangles, которые вместе покрывают непрерывный run of characters на текущей странице. Символы на одной строке, которые разделяют одинаковые настройки шрифта, автоматически объединяются в один rectangle, уменьшая результат до минимального количества непересекающихся boxes, нужных для подсветки текста
Параметры StartIndex и Count задают измеряемый сегмент символов. Типичное применение — передать индекс совпадения, возвращённый FindFirst или FindNext, в качестве StartIndex, а длину строки поиска как Count, чтобы получить highlight rectangles для результата поиска
Возвращаемые rectangles хранятся во внутреннем буфере и остаются валидными до следующего вызова RectangleCount. Получайте каждый rectangle, читая свойство Rectangle[Index] для Index в диапазоне от 0 до RectangleCount - 1. Все координаты заданы в PDF user-space units (points, origin at lower-left)
Для простого подсчёта всех символов на странице используйте 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;