PDFium Delphi Component Docs

RectangleCount metoda

Component: TPdf  ·  Unit: PDFium
Počítá počet obdélníkových oblastí obsazených segmentem textu. Funkce automaticky sloučí malé obdélníky znaků do většího, pokud tyto znaky leží na stejném řádku a používají stejné nastavení písma

Syntax

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

StartIndexInteger. The 0-based index of the first character in the segment to measure. Defaults to 0.
CountInteger. The number of characters to include in the measurement, starting from StartIndex. Defaults to MaxInt, which covers all remaining characters on the page.

Return Value

The number of merged bounding rectangles that cover the specified character segment. After this call, each rectangle is accessible via the Rectangle[0] through Rectangle[RectangleCount - 1] indexed property.

Description

RectangleCount vypočítá sadu ohraničujících obdélníků, které společně pokrývají souvislý úsek znaků na aktuální stránce. Znaky na stejném řádku, které sdílejí stejné nastavení písma, se automaticky sloučí do jediného obdélníku, čímž se výsledek zredukuje na minimální počet nepřekrývajících se boxů potřebných ke zvýraznění textu.

Parametry StartIndex a Count definují měřený úsek znaků. Typické použití je předat index výskytu vrácený metodami FindFirst nebo FindNext jako StartIndex a délku hledaného řetězce jako Count, abyste získali obdélníky zvýraznění pro výsledek hledání.

Vrácené obdélníky se uloží do interní vyrovnávací paměti a zůstanou platné až do příštího volání RectangleCount. Každý obdélník získáte čtením vlastnosti Rectangle[Index] pro Index v rozsahu 0RectangleCount - 1. Všechny souřadnice jsou v jednotkách uživatelského prostoru PDF (body, počátek vlevo dole).

Pro prostý počet všech znaků na stránce použijte CharacterCount; chcete-li zjistit, kde konkrétní znak na stránce leží, použijte 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];
      // Nakreslí box zvýraznění pomocí 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