您的位置:首页 > 其它

利用sfntly的sfnttool.jar提取中文字体

2014-01-15 12:14 573 查看
雨忆博客中提到了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\tool\sfntly\java\build.xml

compile:
[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中访问prote
cted
[javac]   class VisibleBuilder<T extends SubTable> extends SubTable.Builder<
T> {
[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 FAILED
E:\php\tool\sfntly\java\common.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,下载后解压,然后将ant\bin目录路径加入到环境变量的path中,这样每次在cmd中直接使用ant而不用写全路径,方便使用

build:

在cmd中切换到sfntly代码的java目录,然后输入ant就开始build了。build完成后,sfnttool.jar在项目目录的java\dist\tools\sfnttool文件夹下 。

参考:“中文字体其实也可以用在网页上的” http://hxgdzyuyi.github.io/blog/chinese-subset.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: