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 字符代码还是字形索引。 可以指定以下标志的任意组合:

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

[in] usTTCIndex

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

[in] usSubsetFormat

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

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

[in] usSubsetLanguage

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

[in] usSubsetPlatform

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

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

含义
TTFCFP_UNICODE_PLATFORMID
TTFCFP_APPLE_PLATFORMID
TTFCFP_ISO_PLATFORMID
TTFCFP_MS_PLATFORMID

[in] usSubsetEncoding

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

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

含义
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

用于释放 由 lpfnAllocate 和 lpfnReAllocate 分配的内存 回调函数。

[in] lpvReserved

必须设置为 NULL

返回值

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

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

注解

通过为 usSubsetFormat 指定 TTFCFP_SUBSET 值,可以直接创建工作字体,而不是字体包。 这不允许将来进行合并,但如果不需要合并,则会跳过下游处理中的步骤:需要将字体包转换回工作字体,然后才能使用它。

通过为 usSubsetFormat 指定 TTFCFP_SUBSET1 值,可以创建允许稍后合并的字体包。 例如,假设应用程序在大型打印作业开始时调用此函数。 在打印作业的一部分过程中,应用程序会发现它需要的字形不在所生成的子集中。 应用程序可以再次调用 CreateFontPackage,这次为 usSubsetFormat 指定值 TTFCFP_DELTA。 打印机可以使用 MergeFontPackage 合并这些附加字形。

CMAP 从字符编码映射到字形。 如果 *pusSubsetKeepList 是字符值列表,则应用程序使用参数 usSubsetPlatformusSubsetEncoding 来指定正在使用的 CMAP 类型,以便字符值可以映射到字形。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 fontsub.h
Library FontSub.lib
DLL FontSub.dll

另请参阅

CFP_ALLOCPROC

CFP_FREEPROC

CFP_REALLOCPROC

MergeFontPackage