PDFium Component Docs

RectangleCount Metoda

Ten wpis API zachowuje identyfikatory, sygnatury, bloki kodu i terminy PDF w oryginalnej postaci.
Komponent: TPdf  ·  Moduł: PDFium
Zlicza liczbę prostokątnych obszarów zajmowanych przez segment tekstu. Funkcja automatycznie łączy małe prostokąty znaków w większy, jeśli te znaki leżą w tej samej linii i używają tych samych ustawień fontu

Składnia

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

StartIndexInteger. 0-based indeks pierwszego znaku w segmencie do zmierzenia. Domyślnie 0
CountInteger. Liczba znaków uwzględnianych w pomiarze, liczona od StartIndex. Domyślnie MaxInt, co obejmuje wszystkie pozostałe znaki na stronie

Return Value

Liczba scalonych prostokątów ograniczających, które pokrywają wskazany segment znaków. Po tym wywołaniu każdy prostokąt jest dostępny przez indeksowaną właściwość od Rectangle[0] do Rectangle[RectangleCount - 1]

Opis

RectangleCount oblicza zestaw prostokątów ograniczających, które razem pokrywają ciągły fragment znaków na bieżącej stronie. Znaki w tej samej linii, które mają te same ustawienia fontu, są automatycznie scalane do jednego prostokąta, co sprowadza wynik do minimalnej liczby niepokrywających się ramek potrzebnych do podświetlenia tekstu

Parametry StartIndex i Count definiują segment znaków do zmierzenia. Typowe użycie polega na przekazaniu indeksu dopasowania zwróconego przez FindFirst lub FindNext jako StartIndex oraz długości ciągu wyszukiwania jako Count, aby uzyskać prostokąty podświetlenia dla wyniku wyszukiwania

Zwrócone prostokąty są przechowywane w wewnętrznym buforze i pozostają ważne do następnego wywołania RectangleCount. Każdy prostokąt pobierasz, odczytując właściwość Rectangle[Index] dla Index w zakresie od 0 do RectangleCount - 1. Wszystkie współrzędne są w jednostkach przestrzeni użytkownika PDF (punkty, początek w lewym dolnym rogu)

Aby zwyczajnie policzyć wszystkie znaki na stronie, użyj CharacterCount; aby znaleźć, gdzie na stronie leży konkretny znak, użyj CharacterIndexAtPos

Przykład

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;

Zobacz też

Rectangle, FindFirst, CharacterCount, CharacterIndexAtPos, Text