Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439443
  • 博文数量: 35
  • 博客积分: 747
  • 博客等级: 上士
  • 技术积分: 870
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-05 00:04
个人简介

执酒对饮桃花翩,醉踏歌剑挽流年。

文章分类

全部博文(35)

文章存档

2015年(1)

2014年(4)

2013年(2)

2012年(15)

2011年(13)

分类: LINUX

2013-08-25 21:32:05

======
ePub 文件可以嵌入多个字体文件,这样可以在制作的书籍中使用多种字体。然而由于每个字体文件通常都很大,若是将各个字体完全嵌入书籍的话,则生成的文件最终会非常大。
而实际上,书籍中使用的某种字体可能只是其中的很少一部分字,这样的话,显然将整个字体文件完整嵌入是不必要的。因此,若是能够提取出所使用的该种字体的子集,再将其嵌入 ePub 文件中,则最终生成的书籍文件会小很多。

这里介绍使用 软件来提取字体子集的方法,该软件来自于 。
本文使用到的软件有 , 和 。

======
首先使用 Sigil 软件制作好 ePub 文件(尚未包含字体文件),假设其文件名为 file.epub,其目录结构通常为:
  1. file.epub
  2. |   mimetype
  3. |
  4. +---META-INF
  5. |   container.xml
  6. |
  7. \---OEBPS
  8.     |   content.opf
  9.     |   toc.ncx
  10.     |
  11.     +---Images
  12.     |   cover.jpg
  13.     |
  14.     +---Styles
  15.     |   style.css
  16.     |
  17.     \---Text
  18.             Chapter001.html
  19.             Chapter002.html
  20.             Chapter003.html
  21.             ...

若是嵌入了字体的话,则目录结构为:
  1. file.epub
  2. |   mimetype
  3. |
  4. +---META-INF
  5. |   container.xml
  6. |
  7. \---OEBPS
  8.       content.opf
  9.     |   toc.ncx
  10.     |
  11.     +---Fonts
  12.     |   FangSong.ttf
  13.     |   KaiTi.ttf
  14.     |   ...
  15.     |
  16.     +---Images
  17.     |   cover.jpg
  18.     |
  19.     +---Styles
  20.     |   style.css
  21.     |
  22.     \---Text
  23.             Chapter001.html
  24.             Chapter002.html
  25.             Chapter003.html
  26.             ...
可见,增加了一个目录 OEBPS\Fonts,其中包含了所嵌入的字体。

先看一下所使用的样式文件 OEBPS\Styles\style.css,其部分内容为:
  1. ...
  2. /*字体定义*/
  3. @font-face {
  4.     font-family: "MyFangSong";
  5.     src:
  6.     local("仿宋"),
  7.     local("FangSong"),
  8.     url(../Fonts/FangSong.ttf);
  9. }
  10. ...
这里自定义了一个字体名称“MyFangSong”,该字体所引用的字体文件按定义列表依次查找:首先查看阅读器系统中是否存在字体“仿宋”,若是不存在的话,再查看字体“FangSong”是否存在,最后,重点的那行 url(../Fonts/FangSong.ttf); 与我们这里提到的字体嵌入有关,查看该 css 文件目录的上层目录下的 Fonts 目录中是否存在字体文件 FangSong.ttf。

使用该自定义字体的方法如下所示:
  1. /*使用上面自定义的字体*/
  2. .ZhuShi { /*注释*/
  3.     margin: 0 0 0 2em;
  4.     font-family: "MyFangSong", serif;
  5. }
若是需要在 ePub 文件的 html 源文件中使用的话,则可写成(具体可以查询 css 的相关用法):
  1. <p class="ZhuShi">这是一段注释。</p>
自定义其他字体名称的方法依此类推。

======
下面介绍 FontRepack 软件的配置说明,这里使用的是 v1.22 版本。

软件的目录结构如下:
  1. FontRepack-1.22
  2. |   config.xml
  3. |   fontmap.ini
  4. |   FontRepack.exe
  5. |   README.txt
  6. |
  7. +---fonts
  8. |   FangSong.ttf
  9. |   KaiTi.ttf
  10. |   Song.ttf
  11. |   ...
  12. |
  13. \---temp
其中,比较重要的文件为 fontmap.ini,其内容为:
  1. ;分号开头表示注释
  2. ;对应关系以冒号分隔
  3. ;默认注释掉 "SongTi" 行表示不内嵌 "SongTi"/Song.ttf

  4. fontrepackdefault: Song.ttf
  5. ;"SongTi": Song.ttf
  6. "MyFangSong": FangSong.ttf
该文件定义了字体名称和字体文件的映射,所对应的字体放在目录 fonts 下。

比如,前面我又自定义了一种字体名称“MyKaiTi”,使用的字体文件为 KaiTi.ttf,现在想要将字体文件嵌入到最终的 ePub 文件中。
做法如下:首先将需要使用的字体文件 KaiTi.ttf 放到目录 fonts 中,然后在文件 fontmap.ini 中增加对应的一行,如下所示:
  1. ;分号开头表示注释
  2. ;对应关系以冒号分隔
  3. ;默认注释掉 "SongTi" 行表示不内嵌 "SongTi"/Song.ttf

  4. fontrepackdefault: Song.ttf
  5. ;"SongTi": Song.ttf
  6. "MyFangSong": FangSong.ttf
  7. "MyKaiTi": KaiTi.ttf ; 增加了该行
若是想暂时先不嵌入某种字体的话,如“MyFangSong”字体,则只需将对应的行注释掉,如下:
  1. ;分号开头表示注释
  2. ;对应关系以冒号分隔
  3. ;默认注释掉 "SongTi" 行表示不内嵌 "SongTi"/Song.ttf

  4. fontrepackdefault: Song.ttf
  5. ;"SongTi": Song.ttf
  6. ;"MyFangSong": FangSong.ttf ; 将该行注释掉
  7. "MyKaiTi": KaiTi.ttf
======
接下来介绍使用 FontRepack 软件提取字体子集的方法。

首先将需要用到的各个字体放到目录 fonts 下,同时在文件 fontmap.ini 中写好相关的映射。打开 FontRepack.exe,将需要嵌入字体的 ePub 文件拖动到“输入”那行,点击“运行”,稍待片刻,便可以得到生成的文件 file_repack.epub。可以使用压缩软件如 7-Zip 打开生成的文件,可以看到其中增加了 OEBPS\Fonts 目录,该目录包含了所使用到的字体。

由于 FontRepack 软件需要修改 ePub 文件中的 OEBPS\content.opf 文件,以增加相关的字体引用,而该软件的自动修改会导致由其生成的文件无法通过 Sigil 软件的 ePub 验证。因此,我们可以将由 FontRepack 软件生成的 file_repack.epub 文件中的字体子集文件解压出来,然后再使用 Sigil 软件重新嵌入,即我们不发布由 FontRepack 软件生成的文件 file_repack.epub,而只是使用由它生成的字体子集文件。

使用压缩软件如 7-Zip 解压出 file_repack.epub 中的 OEBPS\Fonts 目录,再用 Sigil 软件打开原文件 file.epub,右击 Fonts 目录,选择“增加现有文件”,定位到刚才解压出来的 Fonts 目录,选中所有字体文件,点击“确定”,保存后即可得到嵌入了字体子集的 ePub 文件。

======
后记:

其实,最初研究提取字体子集是因为 Kindle 现在支持 KF8 格式,该格式可以使用多种字体,从而可以制作出精美排版的书籍。而很多人的设备中可能没有相应的字体文件,这样便失去了很多精排书籍精心定义的样式。这里使用 FontRepack 软件提取字体子集并将其嵌入后,既保证了原精排书籍的精美排版,又不会使得最终生成的文件过大。

若是需要在 Kindle 上查看 KF8 格式的精美书籍,只需要将前面嵌入了字体文件的 file.epub 文件通过 Calibre 软件转换为 .azw3 格式,再在 Kindle 上选择“A/a”菜单,选中“Publisher Font”选项即可。这里放上在 Kindle Touch 上的效果图一张,其对应的书籍来自于:


阅读(9427) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~