THPDFPage.GetWideCharAdvances

THPDFPage

 

顶部  上一页  下一页

一次性获取文本中每个字形的自然步进量和总宽度(v2.218.1)

 

Delphi 语法:

function GetWideCharAdvances ( const Text: WideString; out TotalWidth: Single; out Advances: array of Single ): Boolean;

 

说明

 

GetWideCharAdvances 通过单次 GDI GetTextExtentExPointW 调用,同时获得每个字形的自然步进量(含字距,用户空间点,与 GetWideTextWidth 相同单位)和行总宽度,效率远高于逐字形调用 N+1 次 GetWideTextWidth。调用方须在调用前将 Advances 数组 SetLength 至少 Length(Text) 个元素。GDI 调用失败时返回 False,调用方应回退到 GetWideTextWidth / TextOut。适合用于两端对齐、表格布局及一次性需要所有字形宽度的场景

 

参数

名称说明
Text要测量的 Unicode 文本
TotalWidth[out] 整行总宽度(用户空间点)
Advances[out] 每个字形的自然步进量数组;调用前须 SetLength 至 Length(Text)

 

返回值

成功时返回 True,并填充 TotalWidth 和 Advances;GDI 失败时返回 False

 

代码示例

// 取得 "Hello" 每个字形的步进量,然后通过 ExtTextOut 输出精确字距
var
  Text: WideString;
  TotalW: Single;
  Adv: array of Single;
begin
  Text := 'Hello';
  SetLength(Adv, Length(Text));
  if HPDF.CurrentPage.GetWideCharAdvances(Text, TotalW, Adv) then
    HPDF.CurrentPage.ExtTextOut(50, 400, 0, Text, Adv)
  else
    HPDF.CurrentPage.TextOut(50, 400, 0, Text);
end;

另请参阅: GetWideTextWidth ExtTextOut GetWideTextRowCount