PDFium Delphi Component 文件

FindFirst 方法

组件: TPdf  ·  单元: PDFium
开始搜索指定文本。StartIndex 为零基,-1 表示页面末尾。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

第一个匹配项的零基字符索引;如果未找到则为 -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
    // 检索匹配文本的边界矩形
    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