Документация PDFiumPas

SetTextPositions Метод

Эта запись API сохраняет идентификаторы, сигнатуры, блоки кода и термины PDF в исходном виде.
Компонент: TPdf  ·  Модуль: PDFium
Устанавливает позиции по символам для указанного текстового объекта. Позиция первого символа подразумевается равной 0; Positions[0] задает позицию второго символа, Positions[1] задает позицию третьего и так далее. Значения задаются в пунктах относительно начала текстового объекта

Синтаксис

procedure SetTextPositions(ObjectIndex: Integer; const Positions: TPdfSingleArray);

ObjectIndexInteger. Нулевой индекс текстового объекта, для которого задаются позиции символов (от 0 до ObjectCount - 1)
PositionsTPdfSingleArray. Массив смещений по символам в пунктах относительно начала текстового объекта. 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;

См. также

SetText, ObjectCount