雨忆博客中提到了sfntly(具体介绍可以看:https://code.google.com/p/sfntly/),利用其中sfnttool.jar就可以提取只包含指定字符的字体,如果想在页面中通过@font-face嵌入中文字体的话是一个不错的选择。
sfnttool.jar的选项如下:
java -jar sfnttool.jar -h Subset [-?|-h|-help] [-b] [-s string] fontfile outfile Prototype font subsetter -?,-help print this help information -s,-string String to subset -b,-bench Benchmark (run 10000 iterations) -h,-hints Strip hints -w,-woff Output WOFF format -e,-eot Output EOT format -x,-mtx Enable Microtype Express compression for EOT format
拿“新蒂黑板报体 Senty Chalk”做个测试:
java -jar sfnttool.jar -s '张' SentyChalk.ttf zhang_SentyChalk.ttf
用FontCreator打开生成的字体,可以发现字体只有一个“张”对应的图形。
在用ant编译sfntly目前最新版本代码(r237)的时候遇到代码报错,一直编译不过去,最后将利用Eclipse强大的错误修改功能就将错误改好了编译通过,如果大家不想修改代码,可以checkout r228版本的代码就可以顺利build了。rivision在tortoisesvn设置如下图中红框所示:
r237的build错误:
Buildfile: E:php oolsfntlyjavauild.xml compile: [mkdir] Created dir: E:php oolsfntlyjavauildclasses [javac] Compiling 201 source files to E:php oolsfntlyjavauildclasses [javac] E:php oolsfntlyjavasrccomgoogle ypographyfontsfntly able opentypecomponentVisibleBuilder.java:8: 错误: Builder可以在SubTable中访问prote cted [javac] class VisibleBuilder<T extends SubTable> extends SubTable.Builder< T> { [javac] ^ [javac] E:php oolsfntlyjavasrccomgoogle ypographyfontsfntlysample sfviewRuleDump.java:26: 错误: 无法将类 Rule中的方法 charGlyphClosure应用到给定 类型; [javac] GlyphGroup ruleClosure = Rule.charGlyphClosure(txt, font); [javac] ^ [javac] 需要: Font,String [javac] 找到: String,Font [javac] 原因: 无法通过方法调用转换将实际参数String转换为Font [javac] E:php oolsfntlyjavasrccomgoogle ypographyfontsfntly able opentypecomponentVisibleBuilder.java:20: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] E:php oolsfntlyjavasrccomgoogle ypographyfontsfntly able opentypecomponentVisibleBuilder.java:23: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] E:php oolsfntlyjavasrccomgoogle ypographyfontsfntly able opentypecomponentVisibleBuilder.java:26: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] E:php oolsfntlyjavasrccomgoogle ypographyfontsfntly able opentypecomponentVisibleBuilder.java:29: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] 6 个错误 BUILD FAILED E:php oolsfntlyjavacommon.xml:21: Compile failed; see the compiler error ou tput for details.
build相关(熟悉ant的情飘过)
环境:
1 jdk,1.6/1.7版本都可以,怎么安装和配置环境变量请自行搜索
2 ant,java的build工具,在这里下载http://ant.apache.org/bindownload.cgi,下载后解压,然后将antin目录路径加入到环境变量的path中,这样每次在cmd中直接使用ant而不用写全路径,方便使用
build:
在cmd中切换到sfntly代码的java目录,然后输入ant就开始build了。build完成后,sfnttool.jar在项目目录的javadist oolssfnttool文件夹下 。
参考:“中文字体其实也可以用在网页上的” http://hxgdzyuyi.github.io/blog/chinese-subset.html