雨忆博客中提到了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. Hash(4) hashtable,hashmap

    首先,我们要知道set是利使用map是实现的,因为只要利用map中的key唯一性就行了. 1.hashmap 和hashtable的区别是什么? 我们可以背出:  hashtable线程安全.hash ...

  2. OFFSET & FETCH

    OFFSET & FECTH 关键字与ORDER BY结合使用,实现对查询结果的分页 一.单独使用OFFSET: 示例:查询所有职员的信息,按雇佣日期排序并跳过前285条记录(共290条) U ...

  3. ADO数据库链接

    一.数据库操作准备 // --------------------------------------------------------------------------------------- ...

  4. PyH : python生成html

    参考:Python PyH模块中文文档 1.  使用自己的css或者js文件. 写好自己的css以及js文件,比如mystyle.css.myjs.js. from pyh import * page ...

  5. Java反射获取类和对象信息全解析

    反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...

  6. [置顶] SVN服务器搭建和使用

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  7. js中return、return true、return false的区别

    一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件 ...

  8. Mean Shift具体介绍

    Mean Shift,我们 翻译为“均值飘移”.其在聚类,图像平滑.图像切割和跟踪方面得到了比較广泛的应用.因为本人眼下研究跟踪方面的东西,故此主要介绍利用Mean Shift方法进行目标跟踪,从而对 ...

  9. SICP 习题 (1.8) 解题总结

    SICP 习题1.8需要我们做的是按照牛顿法求平方根的方法做一个求立方根的过程. 所以说书中讲牛顿法求平方根的内容还是要好好理解,不然后面这几道题做起来就比较困难. 反过来,如果理解了牛顿法求平方根的 ...

  10. innodb 页分配

    [root@localhost test]# python /root/soft/py_innodb_page_info.py -v t1.ibdpage offset 00000000, page ...