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

指向无符号字符类型变量*。 CreateFontPackage 函数将使用 lpfnAllocate 和 lpfnReAllocate 分配缓冲区 **puchFontPackageBuffer 成功返回后,缓冲区将包含子集字体或字体包。 应用程序负责最终释放缓冲区。

[out] pulFontPackageBufferSize

指向未签名的长点,成功返回时将指定分配的缓冲区大小 **puchFontPackageBuffer

[out] pulBytesWritten

指向未签名的长点,成功返回时将指定缓冲区 **puchFontPackageBuffer 中实际使用的字节数。

[in] usFlag

指定此字体是否应进行子集化、压缩或两者:是 TTF 还是 TTC;以及*pusSubsetKeepListrepresents 字符代码还是字形索引。 可以指定以下标志的任意组合:

Value 含义
TTFCFP_FLAGS_SUBSET
如果设置,则请求子设置。
TTFCFP_FLAGS_COMPRESS
如果设置,请求压缩。 此函数的当前传送版本不进行压缩。 此标志允许将来实现此功能,但当前将被忽略。
TTFCFP_FLAGS_TTC
如果已设置,则指定 puchSrcBuffer 中的字体为 TTC;否则,它必须是 TTF。
TTFCFP_FLAGS_GLYPHLIST
如果已设置,则指定*pusSubsetKeepListis 为字形索引列表;否则,它必须是字符代码的列表。

[in] usTTCIndex

从零开始的 TTC 索引;仅在 usFlags 中设置TTFCFP_FLAGS_TTC时才使用。

[in] usSubsetFormat

要创建的文件的格式。 选择以下值之一:它们不能组合在一起。

Value 含义
TTFCFP_SUBSET
创建无法与以后合并的独立子集字体。
TTFCFP_SUBSET1
创建可以与以后合并的子集字体包。
TTFCFP_DELTA
创建可与上一子集字体合并的 Delta 字体包。

[in] usSubsetLanguage

要保留的 Name 表中的语言。 如果设置为 0,将保留所有语言。 仅用于初始子设置:也就是说,仅在 usSubsetFormat 是TTFCFP_SUBSET或TTFCFP_SUBSET1时才使用,并在 usFlags 中设置TTFCFP_FLAGS_SUBSET标志。

[in] usSubsetPlatform

usSubsetEncoding 结合使用,指定要使用的 CMAP。 仅在 *pusSubsetKeepList 是字符列表时使用:也就是说,仅在 usFlags 中未设置TTFCFP_FLAGS_GLYPHLIST时才使用。 在这种情况下,此 CMAP 子表应用于 pusSubsetKeepList ,以创建要保留在输出字体或字体包中的字形列表。

如果使用,则必须采用以下值之一:不能组合它们:

Value 含义
TTFCFP_UNICODE_PLATFORMID
TTFCFP_APPLE_PLATFORMID
TTFCFP_ISO_PLATFORMID
TTFCFP_MS_PLATFORMID

[in] usSubsetEncoding

usSubsetPlatform 结合使用,指定要使用的 CMAP。 仅在 *pusSubsetKeepList 是字符列表时使用:也就是说,仅在 usFlags 中未设置TTFCFP_FLAGS_GLYPHLIST时才使用。

如果使用,则必须采用以下值之一:不能组合它们:

Value 含义
TTFCFP_STD_MAC_CHAR_SET
仅当 usSubsetPlatform == TTFCFP_APPLE_PLATFORMID时,才能使用。
TTFCFP_SYMBOL_CHAR_SET
仅当 usSubsetPlatform == TTFSUB_MS_PLATFORMID时,才能使用。
TTFCFP_UNICODE_CHAR_SET
仅当 usSubsetPlatform == TTFSUB_MS_PLATFORMID时,才能使用。
TTFCFP_DONT_CARE

[in] pusSubsetKeepList

指向构成字符代码或字形索引列表的整数数组,这些索引应保留在输出字体或字体包中。 如果此列表包含 (字符代码(即,如果未在 usFlags) 中设置TTFCFP_FLAGS_GLYPHLIST),则此列表可能是 Unicode 或某种其他类型的编码,具体取决于 usSubsetPlatformusSubsetEncoding 指定的Platform-Encoding CMAP。

[in] usSubsetListCount

列表 *pusSubsetKeepList 中的元素数。

[in] lpfnAllocate

用于为 puchFontPackageBuffer 和临时缓冲区分配初始内存的回调函数。

[in] lpfnReAllocate

用于为 puchFontPackageBuffer 和临时缓冲区重新分配内存的回调函数。

[in] lpfnFree

用于释放 lpfnAllocatelpfnReAllocate 分配的内存的回调函数。

[in] lpvReserved

必须设置为 NULL

返回值

如果函数成功,则返回零。

否则,返回一个非零值。 有关可能的错误返回 ,请参阅字体包函数错误消息

注解

通过为 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

另请参阅

CFP_ALLOCPROC

CFP_FREEPROC

CFP_REALLOCPROC

MergeFontPackage