function CharacterIndexAtPos(X, Y, ToleranceX, ToleranceY: Double): Integer;
-1, если ни один символ не попадает в указанную область допуска, или -3, если возникает внутренняя ошибка, например если страница не загруженаCharacterIndexAtPos отображает точку в пользовательских координатах PDF в индекс ближайшего символа на текущей странице. Это операция, обратная чтению Character[Index] или RectangleCount: по позиции (например, клику мыши, пересчитанному в координаты страницы) определяется, на какой символ указал пользователь
Параметры X и Y задают точку запроса в пользовательских единицах PDF. Начало координат — в левом нижнем углу страницы, ось Y направлена вверх. ToleranceX и ToleranceY расширяют прямоугольную область поиска вокруг точки запроса; кандидат — любой символ, чей габаритный бокс пересекает эту область
Если в области допуска символ не найден, функция возвращает -1. Значение -3 сигнализирует об ошибке, обычно из-за того, что страница сейчас не открыта. При успехе возвращённый индекс можно передать прямо в RectangleCount, Character или использовать как аргумент StartIndex у FindFirst
При пересчёте экранных (пиксельных) координат в пользовательские единицы PDF масштабируйте по ширине и высоте страницы с учётом текущего уровня зума
var
CharIdx: Integer;
PageX, PageY: Double;
begin
Pdf1.PageIndex := 0;
// PageX/PageY are already converted to PDF user-space units
PageX := 150.0;
PageY := 400.0;
CharIdx := Pdf1.CharacterIndexAtPos(PageX, PageY, 5.0, 5.0);
if CharIdx >= 0 then
ShowMessage('Character: ' + Pdf1.Character[CharIdx])
else if CharIdx = -1 then
ShowMessage('No character at that position')
else
ShowMessage('Error retrieving character');
end;