可移植文档的指标

下表指定了需要可移植文档的应用程序最重要的字体指标,以及允许应用程序检索这些文档的函数。

函数 指标 用途
EnumFontFamilies ntmSizeEM 检索设计指标;转换为设备指标。
GetCharABCWidths ABCWidths 在边距、图片边界和其他文本分隔符的开头和结尾准确放置字符。
GetCharWidth32 AdvanceWidths 在行上放置字符。
GetOutlineTextMetrics otmfsType 字体嵌入位。
otmsCharSlopeRise 斜体字体光标斜率的 Y 分量。
otmsCharSlopeRun 斜体字体光标斜率的 X 分量。
otmAscent 行距。
otmDescent 行距。
otmLineGap 行距。
otmpFamilyName 字体标识。
otmpStyleName 字体标识。
otmpFullName 字体标识通常 (,系列和样式名称) 。

 

对 OUTLINETEXTMETRIC 结构的 otmsCharSlopeRiseotmsCharSlopeRunotmAscentotmDescentotmLineGap 成员进行缩放或转换,以对应于当前设备模式和物理高度 (,如 NEWTEXTMETRIC 结构的 tmHeight 成员) 所指定。

当应用程序必须选择同一字体(例如,重新打开文档或移动到其他操作系统时),字体标识非常重要。 当应用程序按全名请求字体时,字体映射器始终选择正确的字体。 系列和样式名称为标准字体对话框提供输入,这可确保正确放置选择栏。

otmsCharSlopeRiseotmsCharSlopeRun 值用于生成字体main斜角的接近近似值。 对于典型的罗马字体, otmsCharSlopeRise 为 1, otmsCharSlopeRun 为 0。 对于斜体字体,值尝试将字体main斜角的正弦和余弦值近似于垂直) (逆时针度;请注意,直立字体的斜角为 0。 由于这些值不以设计单位表示,因此不应将其转换为设备单位。

字符位置和行距指标使应用程序能够计算跨屏幕、打印机、打字机甚至平台可移植的与设备无关的换行符。

执行与设备无关的页面布局

  1. 将所有设计指标规范化为常见的超高分辨率 (UHR) 值 (,例如 65,536 DPI) ;这可以防止舍入错误。
  2. 基于 UHR 指标和物理页面宽度计算换行符;这会生成文本流中行的起点和终点。
  3. 以设备单位 ((例如像素) )计算设备页宽度。
  4. 使用步骤 2 中计算的换行符将每行文本拟合到设备页面宽度中。
  5. 使用 UHR 指标和物理页长度计算分页符;这会生成每页的行数。
  6. 以设备单位计算行高。
  7. 使用步骤 5 中的每页行数和步骤 6 中的行高将文本行拟合到绘图页上。

如果所有应用程序都采用这些技术,开发人员几乎可以保证从一个应用程序移动到另一个应用程序的文档将保留其原始外观和格式。