自定义字体管理

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (PSA) ,在 Windows 10 和 11 中自定义打印体验,以便进行打印机设备开发。

有关详细信息,请参阅 打印支持应用设计指南

对于 PCL 打印机,Unidrv 支持下载软字体作为位图或 TrueType 轮廓。 对于设备字体,Unidrv 支持 PCL、CAPSL 和 PPDS 打印机命令格式。 对于其他格式,必须在呈现插件中提供自定义字体管理代码。 可以实现以下 IPrintOemUni 方法集:

IPrintOemUni::D ownloadFontHeader
用于从 Unidrv 获取软字体的标题信息,然后将信息下载到打印机。

IPrintOemUni::D ownloadCharGlyph
用于将软字体的字符字形下载到打印机。

IPrintOemUni::OutputCharStr
用于控制字符的打印。

IPrintOemUni::SendFontCmd
用于修改打印机的设备字体选择命令,并在必要时将其发送到打印机。

IPrintOemUni::TextOutAsBitmap
用于创建文本字符串的位图图像。

IPrintOemUni::TTDownloadMethod
用于指定 Unidrv 向打印机发送指定的软字体时应使用的字形格式。

Unidrv 提供回调函数 UNIFONTOBJGetInfo,呈现插件可以调用该函数来获取字体或字形信息。

对于设备字体,必须按照 Unidrv 字体指标文件 部分和 字形翻译表文件 部分的说明提供字体说明。

对于墨盒字体,可以在资源 DLL 中提供字体说明,并使用 GPD 文件中的字体墨盒条目进行指定。 还可以以 Unidrv 字体格式文件的形式提供字体说明。

对于可下载的 PCL 软字体,必须按照 Unidrv 字体格式文件 部分中的说明提供字体说明。

Unidrv 字体指标文件

打印机支持的每个设备字体都表示 Unidrv Font Metrics (.ufm) 文件。 .ufm 文件是使用 Unidrv 字体指标结构中所述的结构构造的二进制文件。 .ufm 文件中的第一个结构是 UNIFM_HDR,其中包含文件的其他结构的偏移量。 下图显示了 Unidrv 字体指标文件的布局。

说明 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 字体格式文件的布局。

说明 unidrv 字体格式文件的布局的示意图。

Unidrv 字体格式文件由 UFF_FILEHEADER 结构以及一个或多个 UFF_FONTDIRECTORYDATA_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 文件中删除字体说明。