以编程方式将CFF字体转换为OpenType字体

时间:2012-01-08 16:21:06

标签: windows fonts gdi opentype compact-font-format

有没有人有任何指针我可以找到有关如何围绕CFF字体创建opentype包装的额外信息?

目前我有一个CFF文件的解析器,所以我可以从中获取各种信息(cmap,字形名称,宽度,名称等)。鉴于此信息,我无法创建一个Opentype(truetype格式)包装器,所以我可以使用GDI在Windows上使用该字体; GDI不会加载Opentype字体,我唯一知道的是它无法加载字体。

是否有人知道任何其他信息,验证应用程序,示例代码,获取有关字体无法从Windows加载等的其他信息等?

注意:我正在寻找有关如何操作的信息,而不是实用程序和/或转换工具。

4 个答案:

答案 0 :(得分:1)

现在使用,我有3个库作为参考:

  1. FreeType:主要在cff包中,主要条目是cff \ cffload.c,现在在github中
  2. FontForge:fontforge \ parsettf.c,仍然在sf.net
  3. fonttools:fonttools \ cffLib.py,in sf.net
  4. ots工具:http://code.google.com/p/ots/source/browse/trunk/src/cff.cc
  5. 在parsettf.c中,George Williams写道:True Type是一种非常狡猾的格式。 ...现在我理解它似乎设计得更好,但文档仍然存在冲突。有时候非常糟糕。

    IMO,cff doc同样糟糕。 也许它设计得更好。也许,如果我有时间:)我会确认也许。为什么?看看那些东西的创作时间,太旧了。

    只有年纪大了才有什么好处?家长,数学和filosophy :) 其他人必须推进其他任何事情!

答案 1 :(得分:1)

CFF(压缩字体格式)主要用于PDF文件中的嵌入式PostScript字体。您还可以在OpenType字体文件中找到基于PostScript轮廓的CFF。

如果从PDF的嵌入字体文件中获取CFF,则可以从CFF的NameIndex获取PostScript名称。您应该通过PostScript名称找到相应的OpenType文件。

如果您从OpenType文件获得CFF,为什么要问这个问题? :-D

答案 2 :(得分:0)

我引用此链接:Raster, Vector, TrueType, and OpenType Fonts

  

...字体的字形存储在font-resource文件中。 ...

因此,Windows从具有其理解格式的文件加载字形,而不是CFF文件,而不是内存中的结构。如果你想在不使用文件转换工具的情况下绘制CFF文件,我想你需要加载CFF并自己绘制字形。

要加载CFF并确定字形,您可以使用FreeType Project。这是SO上的链接,解释了如何从FreeType源构建Win32 DLL:Compiling FreeType to DLL (as opposed to static library)

要绘制字形,您可以从gdipp project获得灵感,它是Windows文本渲染器的替代品,并包含显示从FreeType加载的字形的Win32 C / C ++示例代码。

答案 3 :(得分:0)

似乎CFF格式直接嵌入到OpenType文件中。 Microsoft对OpenType文件有一个很好的概述:http://www.microsoft.com/typography/otspec/otff.htm