PDFium Delphi Component Docs

RectangleCount Метод

Компонент: TPdf  ·  Модуль: PDFium
Считает количество прямоугольных областей, занятых сегментом текста. Функция автоматически объединяет маленькие character boxes в более крупный, если эти символы находятся на одной строке и используют одинаковые настройки шрифта

Syntax

function RectangleCount(StartIndex: Integer = 0; Count: Integer = MaxInt): Integer;

StartIndexInteger. Индекс с нуля первого символа измеряемого сегмента. По умолчанию 0
CountInteger. Число символов, включаемых в измерение, начиная с StartIndex. По умолчанию MaxInt — покрывает все оставшиеся символы страницы

Return Value

Количество объединённых bounding rectangles, которые покрывают указанный сегмент символов. После этого вызова каждый rectangle доступен через индексированное свойство от Rectangle[0] до Rectangle[RectangleCount - 1]

Description

RectangleCount вычисляет набор габаритных прямоугольников, которые вместе покрывают непрерывный прогон символов на текущей странице. Символы одной строки с одинаковыми настройками шрифта автоматически объединяются в один прямоугольник, сводя результат к минимальному числу непересекающихся боксов, необходимых для подсветки текста

Параметры StartIndex и Count задают измеряемый сегмент символов. Типичное применение — передать как StartIndex индекс совпадения из FindFirst или FindNext, а как Count — длину строки поиска, чтобы получить прямоугольники подсветки для результата поиска

Возвращённые прямоугольники хранятся во внутреннем буфере и остаются валидными до следующего вызова RectangleCount. Доставайте каждый прямоугольник чтением свойства Rectangle[Index] для Index в диапазоне от 0 до RectangleCount - 1. Все координаты — в пользовательских единицах PDF (пункты, начало внизу слева)

Для простого количества всех символов страницы есть CharacterCount; чтобы найти, где на странице сидит конкретный символ, — CharacterIndexAtPos

Example

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;

See Also

Rectangle, FindFirst, CharacterCount, CharacterIndexAtPos, Text