【问题标题】:embedded font flash.text.engine嵌入字体 flash.text.engine
【发布时间】:2013-10-25 02:34:33
【问题描述】:

我对此完全没有想法。它紧随其后,是我之前问题的一部分:

embedding a font in a swf using as3

我似乎无法让 flash.text.engine 使用我的嵌入字体。注意,在用户选择了两种语言(用于相互翻译)之后,必须将字体加载到应用程序中(嵌入在 swf 中)。似乎有一些信息暗示现在有必要使用 sdk 中的 fontswf 应用程序。我已经尝试过这个并生成了可加载的 swf 文件,但我找不到任何关于如何加载这些文件的信息(即下面的 getDefinition 和 registerFont 位不起作用,因为这些 swf 中没有类)并应用于 text.engine对象。嵌入的来源在我对上述问题的回答中。这是一个测试 as3,它演示了它是如何不起作用的!

package 
{
import flash.display.Loader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.engine.ElementFormat;
import flash.text.engine.FontDescription;
import flash.text.engine.TextBlock;
import flash.text.engine.TextLine;
import flash.text.engine.TextElement;
import flash.net.URLRequest;
import flash.text.Font;

public class Main extends Sprite 
{
    private var loader:Loader;
    private var tl:TextLine;

    public function Main():void 
    {
        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,fontLoaded);
        loader.load(new URLRequest("EnglishF.swf"));
    }

    private function fontLoaded(evt:Event):void {
        var FontClass:Class
        FontClass = evt.target.applicationDomain.getDefinition("EnglishF") as Class;
        try {
            Font.registerFont(FontClass.myFont);
            trace("successfully loaded " + FontClass); 
            // gives 'successfully loaded EnglishF'
        } catch (err:Error) {}
        var fontList:Array = Font.enumerateFonts();
        for (var i:int = 0; i < fontList.length; i++) {
            trace(fontList[i].fontName, fontList[i].fontType); 
            // gives 'EnglishF embeddedCFF'
        }
        var block:TextBlock = new TextBlock();
        var font:FontDescription = new FontDescription("EnglishF");
        var formt:ElementFormat = new ElementFormat(font, 30);
        trace(FontDescription.isFontCompatible("EnglishF","normal","normal"), formt.fontDescription.fontName); 
        // gives 'true EnglishF'
        formt.color = 0x882233;
        var span:TextElement = new TextElement("Hello World. This is certainly NOT in the Font provided!", formt);
        block.content = span;
        tl = block.createTextLine();
        tl.x = 10;
        tl.y = tl.ascent + 10;
        addChild(tl);
    }
}
}

我做错了什么,还是这不可能?

【问题讨论】:

    标签: actionscript-3 flash fonts


    【解决方案1】:

    希望这会有所帮助。在这一行下:

    var font:FontDescription = new FontDescription("EnglishF");
    

    添加以下行:

    font.fontLookup = FontLookup.EMBEDDED_CFF;
    

    这将使文本框架知道您正在使用 CFF 字体(在新文本框架中使用),而不是常规嵌入字体(在 TextFields 中使用)。

    希望这会有所帮助。

    约旦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多