procedure SetTextPositions(ObjectIndex: Integer; const Positions: TPdfSingleArray);
| ObjectIndex | Integer. 文字位置を設定するテキストオブジェクトの 0 起点インデックス (0 から ObjectCount - 1 まで) |
| Positions | TPdfSingleArray. テキストオブジェクトの原点からの相対的な、ポイント単位の文字ごとのオフセット配列。Positions[0] が 2 番目の文字の位置、Positions[1] が 3 番目の文字の位置を設定します。最初の文字は常に位置 0 に置かれます |
SetTextPositions は、各文字に明示的な水平オフセットを与えることで、テキストオブジェクトの既定の文字間隔を上書きします。これにより、きめ細かなカーニング制御、両端揃えのテキストレイアウト、既存の PDF に含まれる正確な文字配置の再現が可能になります
Positions 配列は、1 文字目と 2 文字目の間のギャップから始まる、文字間ギャップごとに 1 つの要素を持ちます。具体的には、Positions[0] が 2 番目の文字の位置、Positions[1] が 3 番目の文字の位置となり、以降も同様に、すべてテキストオブジェクトの原点からベースラインに沿ってポイント単位で測定されます。最初の文字は常にオフセット 0 に置かれます。配列長はテキストオブジェクトの文字数より 1 だけ少なくする必要があり、余分な要素は無視され、不足している要素に対応する文字は既定の位置に留まります
このメソッドは、元の文字間隔を正確に保つ必要があるテキストオブジェクトを再構築または編集する際に、通常 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;