代码之家  ›  专栏  ›  技术社区  ›  Todd Main

将.fntdata文件转换为.ttf

  •  2
  • Todd Main  · 技术社区  · 15 年前

    有人熟悉 .fntdata 嵌入字体的结构?这在PowerPoint2007/2010中用于在演示文稿中嵌入字体(与Word 2007/Word 2010中使用的.odttf不同)。基本上,我只想将其转换为.ttf或.odttf文件,以便wpf/silverlight应用程序可以读取它。

    One page 标准中规定了以下内容:

    C.标准规定 application/x-fontdata指定 字体应存储为 位图字体(存储每个字形 作为光栅图像)。

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

    这有助于了解至少有一个研究方向,但我不确定从这里如何转换,如果有可能转换,等等(最好在.NET中)。

    现在,我甚至想不出怎么读。我试过微软字体验证程序,但它说它不是有效的字体。

    要查看这种字体,请转到PowerPoint2007/2010,创建一张空白幻灯片并添加一个文本框。添加一些文本并将字体更改为“ 冷却器 “(例如)。然后,去 球体 (上面那个圆的东西),点击 保存为… 然后就在 保存 按钮单击 工具 下拉,然后单击 保存选项 . 一旦对话框弹出,在底部选择 在文件中嵌入字体 (不管你选择哪种收音机)。好了,现在保存,你就完成了。现在关闭该文件,并在刚保存的位置找到它。重命名扩展名 PPTX 邮编 然后拉开拉链。在该文件夹中,转到 /PPT/字体/ 你可以在那里找到很多字体。他们中的任何人都愿意。

    有人有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   NakedBrunch    15 年前

    我想我已经接近答案了。这种字体属于 Embedded Open Type (EOT)以下格式 PowerPoint Binary File Format 规范。您可以在 W3C's Embedded Open Type (EOT) file format .

    我测试了一些字体,比如 校准尺 冷却器 ,执行上面为PowerPoint提供的说明,然后使用 Microsoft Web Embedding Fonts Tool (纬纱)它们都创建了相同的文件大小,但加密似乎有所不同——我猜WEFT正在应用一些不同的加密,因为它是如何为特定网站构建EOT的。上面的W3C页面可能有更多关于加密的详细信息。

    好消息是,至少在网页中,您可以使用PowerPoint生成的“原样”。在我创建的PowerPoint嵌入字体中 冷却器 字体是 fut1.fntDATA 当嵌入时,我就用它创建了一个网页,它工作得很好:

    <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中使用,但至少现在你知道你在处理什么了。

        2
  •  1
  •   josh3736    15 年前

    我从链接页面收集到的是 .fntdata 文件只包含光栅化的标志符号。这意味着如果必须执行任何缩放操作,结果可能很难看。

    第一步显然是提取字形。快速搜索在网络上绝对不会产生任何关于 fntDATA 文件夹。我试着用十六进制编辑器来观察一个字体,但没有任何东西能真正弹出(除了字体的字符串名称)。此外, TrID 完全不知道里面是什么。你也许可以尝试一下,看看是否能提取出有用的数据——祝你好运。

    如果你真的知道如何得到字形,下一步你只需要把它们放到一个TTF文件中。根据 OpenType file spec (封面) .ttf 文件),ttfs可能包含位图标志符号。(具体见 EBDT table )我不认为有TTF解析器或编写器的.NET实现,所以您必须从头开始实现规范。再次,祝您好运。

    当然,如果我对只包含光栅化标志符号的嵌入字体的看法是正确的,那么所有这些工作都只会得到很少的回报——你不会 真正地 正在获取字体。我显然不知道你的要求是什么,也不知道你为什么要提取这些字体,但在这种情况下,仅仅找到原始字体可能更有效。

    推荐文章