接上篇:Flex字体篇——动态嵌入字体
按需嵌入
中文字体小的几M,大的十几M,如果把整个中文字体都嵌入到swf会使容量增大,不利于网络传输,这时应该采取按需嵌入的办法,只把使用到的字符才嵌入到字体swf里。
按需嵌入的字体样式
需要编译的css文件:wb_fz22.css
/* Generate by wizBuilder CS */
/* Text:1608 Char:62 */
@font-face {
src:local("方正黑体简体");
fontFamily: WB-方正黑体简体;
fontStyle: normal;
fontWeight: normal;
advancedAntiAliasing: true;
unicodeRange:
U+65B9,U+6B63,U+9ED1,U+4F53,U+7B80,U+000A,U+003C,U+0046,U+004F,U+004E,U+0054,U+0020,U+004B,U+0045,
U+0052,U+0049,U+0047,U+003D,U+0022,U+0031,U+003E,U+002F,U+8BF7,U+53CC,U+51FB,U+8FD9,U+91CC,U+7F16,U+8F91,
U+6587,U+672C,U+002E,U+0050,U+0032,U+0033,U+0034,U+0035,U+0036,U+0037,U+0038,U+0039,U+0030,U+5E72,U+9898,
U+000D,U+786E,U+9009,U+9879,U+9519,U+8BEF,U+5355,U+0074,U+0072,U+0075,U+0065,U+0066,U+0061,U+006C,U+0073,
U+0078,U+65C1,U+767D;
}
该css文件是外部exe自动生成,并且自动进行编译生成字体swf的,其中U+****的代码是使用到的unicode字符。
C#中生成上述unicode字符的主要代码如下:
private static string ToUnicode(char value)
{
byte[] bytes = Encoding.Unicode.GetBytes(value.ToString());
return "U+" + bytes[1].ToString("X2") + bytes[0].ToString("X2");
}
如何让外部exe自动编译css生成swf参考上篇方法使用命令行。
何时才按需嵌入字体
在设计阶段,用户输入是不确定的,应该把整个字库嵌入到编辑环境满足用户的编辑需要。
在发布后浏览阶段,这时用户的输入已经确定,应该只嵌入所需的字符。
整个字库嵌入和按需嵌入的比较
整个字库嵌入的容量
按需嵌入的容量(根据使用的字符数量变化)