安装和使用嵌入式字体

【勇芳软件工作室】汉化HomePreviousNext

您必须从包含的文档中分离一个嵌入的字体,并在Windows可以使用它之前将其安装在用户的操作系统中。虽然从文档中分离字体的确切步骤取决于嵌入它的方法,但应用程序应始终执行以下步骤:

1.在安装字体之前解决名称冲突。

2.将字体数据写入文件,根据需要解码只读字体。

3.使用CreateScalableFontResource函数创建未嵌入字体的字体资源文件。

在Windows中,只能嵌入TrueType字体。

您的应用程序应避免安装与系统上已有的字体名称相同的字体。要确定是否有重复的样式名称,应用程序可以将EnumFontFamilies返回的信息与存储在嵌入式字体中的姓名和样式名称进行比较。

读写权限

具有读写权限(因此可以永久安装在用户系统上)的嵌入式字体应写入具有.TTF文件扩展名的文件。

大多数应用程序将具有读写权限的嵌入式字体的文件放入用户Windows目录的SYSTEM子目录或应用程序的工作目录中。只读嵌入式字体的文件通常放在临时目录中。

在安装嵌入式字体之前,您必须使用CreateScalableFontResource功能创建字体资源文件。因为Windows不能直接解释本机的TrueType字体文件格式,所以它需要一个模仿标准.FON文件(称为.FOT文件)的文件,使内部簿记和枚举更容易。CreateScalableFontResource函数生成指向TrueType字体文件的.FOT文件。一旦生成.FOT文件,Windows应用程序就可以使用AddFontResourceRemoveFontResource功能透明地使用TrueType字体。您还可以使用CreateScalableFontResource功能为徽标,图标和其他图形安装特殊字体??。只读字体的字体资源文件应使用不同的扩展名(例如.FOR),并且应通过为CreateScalableFontResource的第一个参数指定1来隐藏系统中的其他应用程序。

您的应用程序应为用户提供永久安装具有读写权限的嵌入式字体的选项。要永久安装字体,应用程序应连接字体和样式名称,然后使用WriteProfileString功能将该字符串以及.txt文件名称连接到WIN.INI文件的[Fonts]部分。[Fonts]部分中的典型字体条目如下所示。

Times New Roman Bold (TrueType)=TIMESBD.FOT

只读权限

具有只读权限的嵌入式字体不应使用.TTF扩展名,并且应避免使用.FOT和.FON扩展名。只读嵌入字体的典型文件扩展名为.TTR。一旦封装文档被关闭,必须从操作系统以及物理和逻辑内存中删除只读嵌入字体的文件,因此除了应用程序之外,它们的名称不需要有意义。

如果文档包含一个或多个只读嵌入字体,则不得允许用户编辑文档。如果允许用户以任何方式编辑文档,您的应用程序必须首先剥离并删除只读嵌入字体。如前所述,只读的嵌入式字体必须在其捆绑的文档关闭时立即从操作系统和内存中删除。

要删除只读嵌入字体,您的应用程序应遵循以下步骤:

1.为要删除的每个字体选择RemoveFontResource函数。

2.删除每个字体的字体资源文件。

3.为每个字体删除每个TrueType字体文件。

当应用程序为只读嵌入式字体创建文件时,为CreateScalableFontResource函数的第一个参数指定1,EnumFontsEnumFontFamilies函数将不会枚举此字体。以这种方式隐藏只读嵌入式字体使得另一个应用程序不可能使用它们,即使Windows资源在理论上可用于Windows中的所有进程。RemoveFontResource功能不会删除当前正在使用的字体。如果您的应用程序使用另一个应用程序安装的只读嵌入式字体,安装应用程序可能难以删除该字体。在这种情况下,当用户关闭包含只读字体的文档时,应用程序应删除资源文件和TrueType字体文件。

非常重要的是,应用程序将只读嵌入字体的TrueType字体文件删除。如果用户关闭文档时删除操作失败,则应用程序应在应用程序运行时关闭时及其下次启动时定期尝试删除该文件。

在某些情况下,由于外部事件(例如系统故障),应用程序无法为只读嵌入式字体删除TrueType字体文件。对于无法控制的事件,不存在任何法律责任。