PDFium Delphi Component Docs

FindFirst 메서드

컴포넌트: TPdf  ·  유닛: PDFium
지정한 텍스트 검색을 시작합니다. StartIndex는 0 기반이며, -1은 page의 끝을 뜻합니다. DirectionUp 매개변수는 이 검색 작업의 방향을 결정합니다

Syntax

function FindFirst(const Text: WString; Options: TSearchOptions = []; StartIndex: Integer = 0; DirectionUp: Boolean = True): Integer;

TextWString. 현재 페이지에서 찾을 Unicode 텍스트 문자열입니다
OptionsTSearchOptions. 매칭 동작을 제어하는 TSearchOption 플래그 집합입니다. 지원 플래그는 soMatchCase(대소문자 구분 매칭)와 soMatchWholeWord(단어 단위 매칭만)입니다. []를 넘기면 대소문자를 무시하는 부분 문자열 검색이 됩니다
StartIndexInteger. 검색을 시작할 0 기반 문자 인덱스입니다. -1을 넘기면 페이지의 마지막 문자부터 시작합니다(DirectionUp이 False일 때 유용). 기본값은 0입니다
DirectionUpBoolean. 초기 검색 방향을 정합니다. True(기본값)는 StartIndex에서 페이지 끝을 향해 검색하고 False는 페이지 시작을 향해 검색합니다. 이후 FindNext 호출은 항상 앞으로, FindPrevious 호출은 항상 뒤로 움직입니다

Return Value

첫 번째 일치의 0 기반 character index를 반환하며, 일치를 찾지 못하면 -1을 반환합니다. 내부 검색 핸들은 유지되므로 이후 FindNext 또는 FindPrevious 호출이 재초기화 없이 검색을 이어갈 수 있습니다

Description

FindFirst는 현재 로드된 PDF 페이지에서 전문 검색을 시작합니다. Unicode 검색 문자열에 선택적 매칭 플래그, 시작 문자 위치, 방향 힌트를 함께 받습니다. 성공하면 첫 일치의 0 기반 문자 인덱스를 반환하고 내부 검색 핸들을 저장해 이후 FindNext와 FindPrevious 호출이 그 핸들을 재사용합니다. 텍스트를 찾지 못하면 -1을 반환합니다

StartIndex 파라미터 덕분에 항상 페이지 처음이 아니라 임의의 문자 위치에서 검색을 시작할 수 있습니다. 맨 첫 문자부터 시작하려면 0(기본값)을, 마지막 문자에 고정하려면 -1을 넘기세요 — DirectionUp = False로 역방향 검색할 때 편리합니다

매칭 동작을 세밀히 조정하려면 Options 파라미터를 쓰세요. soMatchCase는 대소문자를 구분하는 비교를 켜고, soMatchWholeWord는 단어 단위 일치로 제한합니다. 두 플래그는 조합할 수 있습니다. 빈 집합 []을 넘기면 대소문자를 무시하는 부분 문자열 검색이 됩니다

일치를 찾은 뒤에는 반환된 인덱스와 알고 있는 일치 길이로 RectangleCount를 호출해 페이지에서 일치 텍스트의 바운딩 사각형들을 얻으세요 — 뷰어에서 검색 결과를 하이라이트할 때 유용합니다

Example

var
  Idx, MatchLen, R, I: Integer;
  Rect: TPdfRectangle;
begin
  Pdf1.PageIndex := 0;
  MatchLen := Length('invoice');
  Idx := Pdf1.FindFirst('invoice', [], 0, True);
  while Idx >= 0 do
  begin
    // Retrieve bounding rectangles for the matched text
    R := Pdf1.RectangleCount(Idx, MatchLen);
    for I := 0 to R - 1 do
    begin
      Rect := Pdf1.Rectangle[I];
      Memo1.Lines.Add(Format('Match at char %d, rect [%.1f,%.1f,%.1f,%.1f]',
        [Idx, Rect.Left, Rect.Top, Rect.Right, Rect.Bottom]));
    end;
    Idx := Pdf1.FindNext;
  end;
end;

See Also

FindNext, FindPrevious, Find, CharacterIndexAtPos, CharacterCount, RectangleCount, Text