PDFium Delphi Component 文件

RectangleCount 方法

组件: TPdf  ·  单元: PDFium
统计一段文本占用的矩形区域数量。当字符位于同一行且使用相同字体设置时,函数会自动把较小的字符框合并为更大的框

Syntax

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

StartIndexInteger。要测量段中第一个字符的基于 0 的索引。默认值为 0
CountInteger。从 StartIndex 开始要包含在测量中的字符数。默认值为 MaxInt,覆盖页面上所有剩余字符

Return Value

覆盖指定字符段的合并边界矩形数量。调用后,可以通过从 Rectangle[0] 到 Rectangle[RectangleCount - 1] 的索引属性访问每个矩形

Description

RectangleCount 计算共同覆盖当前页面上连续字符段的边界矩形集合。同一行上共享相同字体设置的字符会自动合并为单个矩形,将结果减少到高亮文本所需的最少非重叠框数

StartIndex 和 Count 参数定义要测量的字符段。典型用法是将 FindFirst 或 FindNext 返回的匹配索引作为 StartIndex,将搜索字符串的长度作为 Count,以获得搜索结果的矩形

返回的矩形存储在内部缓冲区中,并在下一次调用 RectangleCount 之前保持有效。通过读取 Index 在 0 到 RectangleCount - 1 范围内的 Rectangle[Index] 属性来检索每个矩形。所有坐标以 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];
      // 使用 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