下表指定了需要便携式文档的应用程序最重要的字体指标以及允许应用程序检索它们的功能。
功能 | 公 | 使用 |
EnumFontFamilies | ntmSizeEM | Retrieval of design metrics; conversion to device metrics |
GetCharABCWidths | ABCWidths | 在边距,图片边界和其他文字中断的开始和结束时准确放置角色 |
GetCharWidth32 | AdvanceWidths | 字符放置在一行上 |
GetOutlineTextMetrics | 字体嵌入位 | 字体嵌入位 |
otmsCharSlopeRise | 用于斜体字斜坡的Y分量 | |
otmsCharSlopeRun | 用于斜体斜体的X分量,用于斜体字体 | |
行间距 | 行间距 | |
字体识别 | 行间距 | |
otmLineGap | 行间距 | |
otmpFamilyName | 字体识别 | |
otmpStyleName | 字体识别 | |
otmpFullName | 字体识别(通常是家庭和风格名称) |
字体识别,otmsCharSlopeRun,行间距,字体识别和otmLineGap成员OUTLINETEXTMETRIC结构进行缩放或转换,以对应于当前设备模式和物理高度(如tmHeight中 NEWTEXTMETRIC结构的成员)。
当应用程序必须选择相同的字体__时,例如当文档被重新打开或移动到不同的操作系统时,字体识别很重要。当应用程序以全名请求字体时,字体映射器总是选择正确的字体。系列和样式名称为标准字体对话框提供输入,可确保选择条正确放置。
otmsCharSlopeRise和otmsCharSlopeRun值用于产生字体主要斜体角的近似值。对于典型的罗马字体,otmsCharSlopeRise为1,otmsCharSlopeRun为0。对于斜体字体,值将尝试近似字体主斜面的正弦和余弦(以垂直方向为逆时针方向);请注意,直立字体的斜体角为0。因为这些值不能以设计单位表示,所以不能将其转换为设备单位。
字符放置和线间距指标使应用程序能够计算在屏幕,打印机,排版机甚至平台上可移植的独立于设备的换行符。
与设备无关的页面布局需要以下七个基本步骤:
将所有设计指标归一化为常见的超高分辨率(UHR)值(例如,65,536 DPI);这样可以防止四舍五入的错误。
2.基于UHR度量和物理页面宽度的计算线路断裂;这产生文本流中的一行的起点和终点。
3.以设备单位计算设备页面宽度(例如,像素)。
4.使用步骤2中计算的换行符将每行文本转换成设备页面宽度。
通过使用UHR度量和物理页面长度来计算分页符;这产生了每页的行数。
6.以设备单位计算线路高度。
7.使用页面上的文本行,使用步骤5中每页的行和第6步的行高。
如果所有应用程序都采用这些技术,开发人员几乎可以保证从一个应用程序移动到另一个应用程序的文档将保留其原始的外观