嵌入式字体

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

嵌入字体是将文档和其包含的字体捆绑到文件中以传输到另一台计算机的技术。嵌入字体可以保证发送文件中指定的字体将出现在接收文件的计算机上。然而,并不是所有的字体都可以从计算机移动到计算机,因为大多数字体一次只能授权给一台计算机。在Windows中,只能嵌入TrueType字体。

应用程序只有在用户请求时才将文字嵌入到文档中。应用程序不能与包含嵌入字体的文档一起分发,应用程序本身也不能包含嵌入字体。每当应用程序分发字体时,以任何格式,必须确认字体所有者的所有权。

这可能违反字体供应商的专有权利或用户许可协议,以嵌入不允许嵌入的任何字体,或者无法遵守关于嵌入字体的以下准则。字体的许可证可能只能为目标计算机上要安装和使用的字体提供读写权限。或许可授予只读权限。只读权限允许目标计算机查看和打印(但不修改)文档;具有只读嵌入字体的文档本身是只读的。只读嵌入式字体可能无法从文档中分拆并安装在目标计算机上。

应用程序可以通过调用GetOutlineTextMetrics功能并检查OUTLINETEXTMETRIC结构的字体嵌入位成员来确定许可证状态。如果设置了字体嵌入位的第1位,字体不允许嵌入。如果位1清零,则可以嵌入字体。如果设置了位2,则嵌入是只读的。

要嵌入字体,应用程序可以使用GetFontData函数来读取字体文件。将GetFontDataGetFontData【dwOffset】参数设置为0L,将【cbData】参数设置为-1L可确保应用程序从头开始读取整个字体文件。

应用程序检索字体数据后,可以使用任何适用的格式将数据与文档进行存储。大多数应用程序在文档中构建一个字体目录,列出嵌入字体以及嵌入是读写还是只读。应用程序可以使用OUTLINETEXTMETRIC结构的otmpStyleNameotmFamilyName成员来标识字体。

如果为嵌入式字体设置只读位,应用程序必须在将文档存储之前加密字体数据。加密方法不必复杂;例如,使用XOR运算符将字体数据与应用程序定义的常量组合是足够和快速的。