Документация PDFiumPas

RectangleCount Метод

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

Синтаксис

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

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

Return Value

Количество объединённых bounding rectangles, которые покрывают указанный сегмент символов. После этого вызова каждый rectangle доступен через индексированное свойство от 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;

См. также

Rectangle, FindFirst, CharacterCount, CharacterIndexAtPos, Text