自定义的字体管理
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。
有关详细信息,请参阅新式打印平台和打印支持应用设计指南。
对于 PCL 打印机,Unidrv 支持以位图或 TrueType 轮廓的形式下载软字体。 对于设备字体,Unidrv 支持 PCL、CAPSL 和 PPDS 打印机命令格式。 对于其他格式,必须在呈现插件中提供自定义的字体管理代码。 可以实现以下 IPrintOemUni 方法集:
IPrintOemUni::DownloadFontHeader
用于从 Unidrv 获取软字体的页眉信息,然后将信息下载到打印机。
IPrintOemUni::DownloadCharGlyph
用于将软字体的字符字形下载到打印机。
IPrintOemUni::OutputCharStr
用于控制字符的打印。
IPrintOemUni::SendFontCmd
用于修改打印机的设备字体选择命令,并在必要时将其发送到打印机。
IPrintOemUni::TextOutAsBitmap
用于创建文本字符串的位图图像。
IPrintOemUni::TTDownloadMethod
用于指定 Unidrv 向打印机发送指定软字体时应使用的字形格式。
Unidrv 提供了一个回调函数 UNIFONTOBJGetInfo,呈现插件可以调用该函数来获取字体或字形信息。
对于设备字体,必须按照 Unidrv 字体指标文件部分和字形转换表文件部分中的说明来提供字体说明。
对于墨盒字体,可在资源 DLL 中提供字体说明,并使用 GPD 文件中的字体墨盒条目进行指定。 字体说明也可以 Unidrv 字体格式文件的形式提供。
对于可下载的 PCL 软字体,必须按照 Unidrv 字体格式文件部分中的说明来提供字体说明。
Unidrv 字体指标文件
打印机支持的每个设备字体都代表一个 Unidrv 字体指标 (.ufm) 文件。 .ufm 文件是使用 Unidrv 字体指标结构中描述的结构来构建的二进制文件。 .ufm 文件中的第一个结构是 UNIFM_HDR,其中包含文件其他结构的偏移量。 下图显示了 Unidrv 字体指标文件的布局。
Unidrv 还支持 .ifi 文件,即为 Windows NT 4.0 创建的字体指标文件。
字形转换表文件
打印机支持的每个设备字体都代表一个字形转换表 (.gtt) 文件。 .gtt 文件是使用 Unidrv 字形转换表结构中描述的结构来构建的二进制文件。 .gtt 文件的第一个结构是 UNI_GLYPHSETDATA 结构,其中包含文件其他结构的偏移量。
下图显示了字形转换表文件的布局。
在上图中,UNI_GLYPHSETDATA 结构包含从文件开头到第一个 GLYPHRUN 结构、第一个 UNI_CODEPAGEINFO 结构和 MAPTABLE 结构的偏移量。
Unidrv 还支持为 Windows NT 4.0 创建的字形转换文件,该文件使用运行长度编码 (RLE) 压缩,扩展名为 .rle。
Unidrv 字体格式文件
对于未在 GPD 文件中使用字体墨盒条目指定的墨盒字体,必须在 Unidrv 字体格式 (.uff) 文件中对字体进行说明。 此外,必须使用 .uff 文件指定可下载的 PCL 软字体。
.uff 文件是一种二进制文件,由以下几组结构构成:
Unidrv 字体格式结构,它定义了 .uff 文件的内容和结构。
Unidrv 字体指标结构,它定义了每种字体的指标。
Unidrv 字形转换表格结构,它定义了字体使用的字形集。
下图显示了 Unidrv 字体格式文件的布局。
Unidrv 字体格式文件由 UFF_FILEHEADER 结构和一个或多个 UFF_FONTDIRECTORY 和 DATA_HEADER 结构对组成。 每个 DATA_HEADER 结构都与一个字体数据块相关联。 UFF_FILEHEADER 结构包含从文件开头到第一个 UFF_FONTDIRECTORY 结构的偏移量。 每个 UFF_FONTDRECTORY 结构都包含从文件开头到包含字体数据的 DATA_HEADER 结构的偏移量。
此外,对于可下载的 PCL 软字体,要下载的二进制数据存储在 .uff 文件中。
.uff 文件的创建由供应商提供的字体安装软件负责。 Unidrv 读取打印机的 .uff 文件,以获取字体和字形信息。 在添加或删除字体时,字体安装程序应修改 .uff 文件的内容。 有关创建字体安装程序的详细信息,请参阅为 Unidrv 自定义的字体安装程序。
所有 .uff 文件都必须存储在 %SystemRoot%\System32\Spool\Drivers\Unifont 目录中。 要将单个 .uff 文件与特定打印机关联起来,安装软件必须调用 SetPrinterData 函数(如 Windows SDK 文档中所述),以便在每个打印机的注册表项下创建注册表值。 下表列出了必须使用的注册表值名称,并指出了每个值的维护者。
注册表值名称和类型 | 值定义 | 维护者 |
---|---|---|
"ExternalFontFile" REG_SZ |
指定当前所安装字体的 .uff 文件的文件名。 字体可以下载,也可以包含在墨盒中。 | 字体安装程序 |
"ExtFontCartFile" REG_SZ |
.uff 文件的文件名,该文件指定了为“ExtFontCartNames”列出的所有字体墨盒中包含的所有字体。 | 字体安装程序 |
"ExtFontCartNames" REG_MULTI_SZ |
打印机上可能安装的所有字体墨盒的名称。 | 字体安装程序 |
"FontCart" REG_MULTI_SZ |
打印机当前安装的所有字体墨盒的名称。 | Unidrv 用户界面 |
为打印机添加字体墨盒后,系统管理员必须运行字体安装程序,该程序负责将“ExtFontCartFile”指定的 .uff 文件中的字体描述复制到“ExternalFontFile”指定的 .uff 文件中。 同样,在删除墨盒时,字体安装程序必须从“ExtFontCartFile”指定的 .uff 文件中删除字体说明。