中提到了sfntly(具体介绍可以看:),利用其中sfnttool.jar就可以提取只包含指定字符的字体,如果想在页面中通过@font-face嵌入中文字体的话是一个不错的选择。
sfnttool.jar的选项如下:
java -jar sfnttool.jar -hSubset [-?|-h|-help] [-b] [-s string] fontfile outfilePrototype 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
拿“”做个测试:
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\tool\sfntly\java\build.xmlcompile: [mkdir] Created dir: E:\php\tool\sfntly\java\build\classes [javac] Compiling 201 source files to E:\php\tool\sfntly\java\build\classes [javac] E:\php\tool\sfntly\java\src\com\google\typography\font\sfntly\table\opentype\component\VisibleBuilder.java:8: 错误: Builder可以在SubTable中访问protected [javac] class VisibleBuilderextends SubTable.Builder { [javac] ^ [javac] E:\php\tool\sfntly\java\src\com\google\typography\font\sfntly\sample\sfview\RuleDump.java:26: 错误: 无法将类 Rule中的方法 charGlyphClosure应用到给定类型; [javac] GlyphGroup ruleClosure = Rule.charGlyphClosure(txt, font); [javac] ^ [javac] 需要: Font,String [javac] 找到: String,Font [javac] 原因: 无法通过方法调用转换将实际参数String转换为Font [javac] E:\php\tool\sfntly\java\src\com\google\typography\font\sfntly\table\opentype\component\VisibleBuilder.java:20: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] E:\php\tool\sfntly\java\src\com\google\typography\font\sfntly\table\opentype\component\VisibleBuilder.java:23: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] E:\php\tool\sfntly\java\src\com\google\typography\font\sfntly\table\opentype\component\VisibleBuilder.java:26: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] E:\php\tool\sfntly\java\src\com\google\typography\font\sfntly\table\opentype\component\VisibleBuilder.java:29: 错误: 方法不会覆盖或实现超类型的方法 [javac] @Override [javac] ^ [javac] 6 个错误BUILD FAILEDE:\php\tool\sfntly\java\common.xml:21: Compile failed; see the compiler error output for details.
build相关(熟悉ant的情飘过)
环境:
1 jdk,1.6/1.7版本都可以,怎么安装和配置环境变量请自行搜索
2 ant,java的build工具,在这里下载http://ant.apache.org/bindownload.cgi,下载后解压,然后将ant\bin目录路径加入到环境变量的path中,这样每次在cmd中直接使用ant而不用写全路径,方便使用
build:
在cmd中切换到sfntly代码的java目录,然后输入ant就开始build了。build完成后,sfnttool.jar在项目目录的java\dist\tools\sfnttool文件夹下 。
参考:“中文字体其实也可以用在网页上的”