将.fntdata文件转换为.ttf

时间:2010-07-14 19:29:05

标签: .net fonts gdi+

是否有人熟悉嵌入字体的 .fntdata 结构?将字体嵌入到演示文稿中时,这在PowerPoint 2007/2010中使用(与Word 2007 / Word 2010中使用的.odttf不同)。基本上,我只是想将它转换为.ttf或.odttf文件,以便WPF / Silverlight applcations可以读取它。

该标准的

One page声明如下:

  

℃。该标准规定了这一点   application / x-fontdata指定   字体应存储为   位图字体(存储每个字形   作为光栅图像)。

     

PowerPoint存储TrueType和   OpenType字体   (Embed-Open-Type-Format,   Micro-Type-Exp-Format)部分内容   这个类型。 Word不读或写   这种内容类型。

这有助于了解至少有一个研究方向,但我不知道从这里开始如何转换,如果可以转换等等(在.NET中可以优先考虑)

现在,我甚至无法弄清楚如何阅读它。我已经尝试过Microsoft Font Validator,但它说它不是有效的字体。

要查看此类字体,请转到PowerPoint 2007/2010,创建一张空白幻灯片并添加文本框。添加一些文本并将字体更改为“ Chiller ”(例如)。然后,转到 Orb (顶部的那个圆形物品),点击另存为... ,然后点击保存按钮旁边的工具下拉菜单,然后点击保存选项。弹出对话框后,在底部选择在文件中嵌入字体(无论您选择哪个收音机都无关紧要)。好的,现在保存,你就完成了。现在关闭文件,然后在刚保存它的位置找到它。将扩展名从 .pptx 重命名为 .zip ,然后将其解压缩。在该文件夹中,转到 / ppt / fonts / ,您会在那里找到许多字体。他们中的任何人都会这样做。

有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

我想我已接近你的答案了。此类型的字体具有遵循Embedded Open Type规范的PowerPoint Binary File Format(EOT)格式。您可以在W3C's Embedded Open Type (EOT) file format上阅读有关EOT详情的更多信息。

我针对此测试了一些字体,例如 Calibri Bold Chiller ,同时执行两项说明上面给了PowerPoint,然后也使用了Microsoft Web Embedding Fonts Tool(WEFT)。它们都创建相同的文件大小,但加密似乎不同 - 我猜测WEFT正在应用一些不同的加密,因为它如何为特定网站构建EOT。上面的W3C页面可能有更多关于加密的细节。

好消息是,至少在网页中,您可以“按原样”使用PowerPoint生成的一个。在我嵌入的 Chiller 字体 font1.fntdata 的PowerPoint嵌入式字体中,我刚刚拿了那并使用它创建了一个网页,它运作得很好:

<html>
   <head>
      <title>Chill</title>
      <style type="text/css">
      @font-face{
        font-family: Chiller;
        src: url('font1.fntdata');
      }
      .Chiller{
        font-family: Chiller;
        font-size:60px;
        color:#000;
       } 
      </style>
   </head>
   <body>
      <div class="Chiller">Cold Beer</div>
      Free!
   </body>
</html>

我还没有测试过这些是否可以直接在WPF / Silverlight中使用,但至少现在你知道你在处理什么了。

答案 1 :(得分:1)

我从链接页面收集的是.fntdata个文件只包含栅格化的字形。这意味着如果必须进行任何缩放,结果可能会很难看。

第一步显然是提取字形。快速搜索在网络上绝对没有关于.fntdata文件的任何内容。我尝试用十六进制编辑器中的一个眼球,但没有真正弹出(除了字体的名称作为字符串)。此外,TrID完全不知道那里有什么。您可以尝试并查看是否可以提取任何有用的数据 - 祝您好运。

如果您确实想弄清楚如何获取字形,接下来您只需要将它们输入TTF文件即可。根据{{​​3}}(涵盖.ttf个文件),TTF可能包含位图字形。 (具体来说,请参阅OpenType file spec)。我认为没有TTF解析器或编写器的.NET实现,因此您必须从头开始实现规范。再次,祝你好运。

当然,如果我对仅包含栅格化字形的嵌入字体是正确的,那么所有这些工作都将获得很少的回报 - 你不是真的获得字体。我显然不知道你的要求是什么,或者你为什么试图提取这些字体,但这可能只是找到原始字体更有效。