createFontPackage 函数 (fontsub.h)
CreateFontPackage 函数创建指定 TrueType 字体的子集版本,通常是为了将其传递给打印机。 为了允许文档中稍后的页面可能需要第一页上未使用的字符或字形,此函数可以创建初始子集字体包,然后创建可与原始子集字体包合并的“Delta”字体包,从而有效地扩展它。
语法
unsigned long CreateFontPackage(
[in] const unsigned char *puchSrcBuffer,
[in] const unsigned long ulSrcBufferSize,
[out] unsigned char **ppuchFontPackageBuffer,
[out] unsigned long *pulFontPackageBufferSize,
[out] unsigned long *pulBytesWritten,
[in] const unsigned short usFlag,
[in] const unsigned short usTTCIndex,
[in] const unsigned short usSubsetFormat,
[in] const unsigned short usSubsetLanguage,
[in] const unsigned short usSubsetPlatform,
[in] const unsigned short usSubsetEncoding,
[in] const unsigned short *pusSubsetKeepList,
[in] const unsigned short usSubsetListCount,
[in] CFP_ALLOCPROC lpfnAllocate,
[in] CFP_REALLOCPROC lpfnReAllocate,
[in] CFP_FREEPROC lpfnFree,
[in] void *lpvReserved
);
参数
[in] puchSrcBuffer
指向包含源 TTF 或 TTC 数据的缓冲区,描述要子集的字体。
[in] ulSrcBufferSize
指定 *puchSrcBuffer 的大小(以字节为单位)。
[out] ppuchFontPackageBuffer
指向无符号 char* 类型的变量。 CreateFontPackage 函数将使用 lpfnAllocate 和 lpfnReAllocate 分配缓冲区 **puchFontPackageBuffer。 成功返回后,缓冲区将包含子集字体或字体包。 应用程序负责最终释放缓冲区。
[out] pulFontPackageBufferSize
指向无符号 long,成功返回后,该长将指定分配的缓冲区大小 **puchFontPackageBuffer。
[out] pulBytesWritten
指向无符号 long,成功返回后将指定缓冲区 **puchFontPackageBuffer 中实际使用的字节数。
[in] usFlag
指定是应对此字体进行子集化、压缩还是两者兼而有之;无论是 TTF 还是 TTC;以及*pusSubsetKeepListreprepresents 字符代码还是字形索引。 可以指定以下标志的任意组合:
[in] usTTCIndex
从零开始的 TTC 索引;仅在 usFlags 中设置了TTFCFP_FLAGS_TTC时才使用。
[in] usSubsetFormat
要创建的文件格式。 选择以下值之一;它们不能组合在一起。
值 | 含义 |
---|---|
|
创建以后无法合并的独立子集字体。 |
|
创建稍后可以合并的子集字体包。 |
|
创建可与以前的子集字体合并的 Delta 字体包。 |
[in] usSubsetLanguage
要保留的“名称”表中的语言。 如果设置为 0,则保留所有语言。 仅用于初始子设置:也就是说,仅当 usSubsetFormat 是TTFCFP_SUBSET或TTFCFP_SUBSET1,并且TTFCFP_FLAGS_SUBSET标志在 usFlags 中设置时才使用。
[in] usSubsetPlatform
与 usSubsetEncoding 一起指定要使用的 CMAP。 仅当 *pusSubsetKeepList 是字符列表时才使用:也就是说,仅在 usFlags 中未设置TTFCFP_FLAGS_GLYPHLIST时才使用。 在这种情况下,此 CMAP 子表应用于 pusSubsetKeepList ,以创建要保留在输出字体或字体包中的字形列表。
如果使用,则必须采用以下值之一:它们不能组合在一起:
值 | 含义 |
---|---|
|
|
|
|
|
|
|
[in] usSubsetEncoding
与 usSubsetPlatform 一起指定要使用的 CMAP。 仅当 *pusSubsetKeepList 是字符列表时才使用:也就是说,仅在 usFlags 中未设置TTFCFP_FLAGS_GLYPHLIST时才使用。
如果使用,则必须采用以下值之一:它们不能组合在一起:
[in] pusSubsetKeepList
指向整数数组,该数组包含应在输出字体或字体包中保留的字符代码或字形索引的列表。 如果此列表包含字符代码 (即,如果未在 usFlags) 中设置TTFCFP_FLAGS_GLYPHLIST,则此列表可能是 Unicode 或某种其他类型的编码,具体取决于 usSubsetPlatform 和 usSubsetEncoding 指定的 Platform-Encoding CMAP。
[in] usSubsetListCount
列表 *pusSubsetKeepList 中的元素数。
[in] lpfnAllocate
回调函数,用于为 puchFontPackageBuffer 和临时缓冲区分配初始内存。
[in] lpfnReAllocate
回调函数,用于重新分配 puchFontPackageBuffer 和临时缓冲区的内存。
[in] lpfnFree
用于释放 由 lpfnAllocate 和 lpfnReAllocate 分配的内存 的回调函数。
[in] lpvReserved
必须设置为 NULL。
返回值
如果函数成功,则返回零。
否则,返回一个非零值。 有关可能的错误返回 ,请参阅 Font-Package 函数错误消息 。
注解
通过为 usSubsetFormat 指定 TTFCFP_SUBSET 值,可以直接创建工作字体,而不是字体包。 这不允许将来进行合并,但如果不需要合并,则会跳过下游处理中的步骤:需要将字体包转换回工作字体,然后才能使用它。
通过为 usSubsetFormat 指定 TTFCFP_SUBSET1 值,可以创建允许稍后合并的字体包。 例如,假设应用程序在大型打印作业开始时调用此函数。 在打印作业的一部分过程中,应用程序会发现它需要的字形不在所生成的子集中。 应用程序可以再次调用 CreateFontPackage,这次为 usSubsetFormat 指定值 TTFCFP_DELTA。 打印机可以使用 MergeFontPackage 合并这些附加字形。
CMAP 从字符编码映射到字形。 如果 *pusSubsetKeepList 是字符值列表,则应用程序使用参数 usSubsetPlatform 和 usSubsetEncoding 来指定正在使用的 CMAP 类型,以便字符值可以映射到字形。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | fontsub.h |
Library | FontSub.lib |
DLL | FontSub.dll |