Positions[0] задает позицию второго символа, Positions[1] задает позицию третьего и так далее. Значения задаются в пунктах относительно начала текстового объектаprocedure SetTextPositions(ObjectIndex: Integer; const Positions: TPdfSingleArray);
| ObjectIndex | Integer. Нулевой индекс текстового объекта, для которого задаются позиции символов (от 0 до ObjectCount - 1) |
| Positions | TPdfSingleArray. Массив смещений по символам в пунктах относительно начала текстового объекта. Positions[0] задает позицию второго символа, Positions[1] третьего и так далее. Первый символ всегда находится в позиции 0 |
SetTextPositions переопределяет стандартный межсимвольный интервал текстового объекта, задавая явное горизонтальное смещение для каждого символа. Это позволяет тонко управлять кернингом, выравнивать текст по ширине или воспроизводить точное расположение символов, найденное в существующем PDF
Массив Positions содержит по одному элементу на каждый промежуток между символами, начиная с промежутка между первым и вторым символом. Точнее, Positions[0] это позиция второго символа, Positions[1] это позиция третьего символа и так далее — все измеряется в пунктах от начала текстового объекта вдоль базовой линии текста. Первый символ всегда помещается в смещение 0. Длина массива должна быть на один элемент меньше числа символов в текстовом объекте; лишние элементы игнорируются, а отсутствующие оставляют соответствующие символы в их позициях по умолчанию
Этот метод обычно используется вместе с SetText при восстановлении или редактировании текстовых объектов, для которых исходный межсимвольный интервал нужно сохранить точно
// Add text, then apply custom per-character positions
Pdf1.NewPage(595, 842);
Pdf1.AddText('HELLO', 'Arial', 24, 72, 700);
var
Idx: Integer;
Pos: TPdfSingleArray;
begin
Idx := Pdf1.ObjectCount - 1;
// 'H' at 0 (implicit), 'E' at 20, 'L' at 38, 'L' at 56, 'O' at 74
SetLength(Pos, 4);
Pos[0] := 20; Pos[1] := 38; Pos[2] := 56; Pos[3] := 74;
Pdf1.SetTextPositions(Idx, Pos);
end;