雨忆博客中提到了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

利用sfntly的sfnttool.jar提取中文字体的更多相关文章

  1. PyOpenGL利用文泉驿正黑字体显示中文字体

    摘要:在NeHe的OpenGL教程第43课源代码基础上,调用文泉驿正黑字体实现中文字体的显示 在OpenGL中显示汉字一直是个麻烦的事情,很多中文书籍的文抄公乐此不疲地介绍各种方法及其在windows ...

  2. IText 中文字体解决方案 生成doc文档

    IText生成doc文档需要三个包:iTextAsian.jar,iText-rtf-2.1.4.jar,iText-2.1.4.jar 亲测无误,代码如下: import com.lowagie.t ...

  3. CSS3 关于@font-face引用中文字体解决办法

    有两种方法,一种简单的,一种比较复杂,都可以实现(注:这里的方法只适合使用少量的中文字体,如果使用的字量过大,请使用其他方法解决) 第一种:简单的 1.下载需要的中文字体的.ttf格式,这个都不难找到 ...

  4. deepin 下安装goland中文字体显示全是方块

    下载中文字体 apt-get install ttf-arphic-uming xfonts-intl-chinese 替换goland的汉化包,两个jar包.https://blog.csdn.ne ...

  5. itextpdf使用中文字体的三种方式

    使用itextpdf时,默认的字体没有中文,总结了一下使用中文字体的方式. 1.使用windows系统下的字体,该种方式的具体操作可以看另一篇博客:https://www.cnblogs.com/wh ...

  6. linux安装中文字体

    一.查看系统字体 在开始安装之前,我们先查看系统中已经安装的字体. 要查看系统中已经安装的字体,我们可以使用fc-list命令进行查看.如果系统中没有该命令的话,我们需要先安装相关的软件包. 在cen ...

  7. Debian 8.3 中文字体安装

    有了这个字体,对于日常工作和生活而言已经非常足够了.如果你还需要更多中文字体的话,推荐可以安装“文泉驿正黑”,“文泉驿点阵宋体”等.文泉驿的安装包已经进入了 Debian/Ubuntu,直接安装 tt ...

  8. 利用private font改变PDF文件的字体

    利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大 ...

  9. CentOS 7 安装字体库 & 中文字体

    前言 报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现输入命令查看字体列表是提示命令无效:  如上图可以看出,不仅没有中文字体,连字体 ...

随机推荐

  1. C#三种判断数据库中取出的字段值是否为空(NULL) 的方法

    操作数据库,需要判断返回的字段值是否为空,收集了3种方法供参考 1 通过System.DBNull判断,网上大部分都使用这个方法. DataTable dt;                     ...

  2. JDK JRE JVM

    使用java很久,但是一直不清楚JDK,JRE,JVM直接的关系,今天特地梳理一下. JDK:Java Development ToolKit(Java开发工具包),JDK是整个JAVA的核心,包括J ...

  3. java工具类--数据库操作封装类

    java对数据库操作简单处理,如下代码即可,封装了 增删改查及获取连接.关闭连接. 代码如下: package com.test; import java.sql.Connection; import ...

  4. 深入了解VSTS的Unit Test测试属性

    深入的了解一下方法上带有的属性的含义.每个方法上几乎都带有TestMethod这个属性,我们直觉告诉我们,这肯定是表示被测试函数的意思.事实也正是如此,在Unit Test里,有许多测试属性,常用的如 ...

  5. iOS--NSAttributedString使用介绍

    iOS–NSAttributedString使用介绍 原文见: http://www.itnose.net/detail/6177538.html http://***/html/topnews201 ...

  6. svn is alread locked

    右键文件夹team →Cleanup就可以了 is not under version control team→ clean 等等更新

  7. 开始android博客分享

    现在开始写博客,分享android开发中的心得.

  8. php获得访问来源(手机wap访问、电脑web访问)

    为了更好的用户体验,本主题默认支持wap和web两种访问样式,wap访问将不包含任何脚本.样式也是重新撰写,不支持更多页面,只支持首页.详情页, 评论框.登录等内容将陆续更新到wap内容里.如果想测试 ...

  9. JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

    转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4864367.html   ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->   ...

  10. Unity3D 游戏的碰撞

    首先创建两个精灵,然后都绑定上碰撞方法(这个是在上一篇文章的基本上): 不过 要注意一点就是碰撞器需要挂一个重力组件,不然无效 所以添加了差不多就能够实现物体碰撞了: 接下来技术写代码,让碰撞的时候进 ...