======
ePub 文件可以嵌入多个字体文件,这样可以在制作的书籍中使用多种字体。然而由于每个字体文件通常都很大,若是将各个字体完全嵌入书籍的话,则生成的文件最终会非常大。
而实际上,书籍中使用的某种字体可能只是其中的很少一部分字,这样的话,显然将整个字体文件完整嵌入是不必要的。因此,若是能够提取出所使用的该种字体的子集,再将其嵌入 ePub 文件中,则最终生成的书籍文件会小很多。
这里介绍使用 软件来提取字体子集的方法,该软件来自于 。
本文使用到的软件有 , 和 。
======
首先使用 Sigil 软件制作好 ePub 文件(尚未包含字体文件),假设其文件名为 file.epub,其目录结构通常为:
-
file.epub
-
| mimetype
-
|
-
+---META-INF
-
| container.xml
-
|
-
\---OEBPS
-
| content.opf
-
| toc.ncx
-
|
-
+---Images
-
| cover.jpg
-
|
-
+---Styles
-
| style.css
-
|
-
\---Text
-
Chapter001.html
-
Chapter002.html
-
Chapter003.html
-
...
-
若是嵌入了字体的话,则目录结构为:
-
file.epub
-
| mimetype
-
|
-
+---META-INF
-
| container.xml
-
|
-
\---OEBPS
-
| content.opf
-
| toc.ncx
-
|
-
+---Fonts
-
| FangSong.ttf
-
| KaiTi.ttf
-
| ...
-
|
-
+---Images
-
| cover.jpg
-
|
-
+---Styles
-
| style.css
-
|
-
\---Text
-
Chapter001.html
-
Chapter002.html
-
Chapter003.html
-
...
可见,增加了一个目录 OEBPS\Fonts,其中包含了所嵌入的字体。
先看一下所使用的样式文件 OEBPS\Styles\style.css,其部分内容为:
-
...
-
/*字体定义*/
-
@font-face {
-
font-family: "MyFangSong";
-
src:
-
local("仿宋"),
-
local("FangSong"),
-
url(../Fonts/FangSong.ttf);
-
}
-
...
这里自定义了一个字体名称“MyFangSong”,该字体所引用的字体文件按定义列表依次查找:首先查看阅读器系统中是否存在字体“仿宋”,若是不存在的话,再查看字体“FangSong”是否存在,最后,重点的那行 url(../Fonts/FangSong.ttf); 与我们这里提到的字体嵌入有关,查看该 css 文件目录的上层目录下的 Fonts 目录中是否存在字体文件 FangSong.ttf。
使用该自定义字体的方法如下所示:
-
/*使用上面自定义的字体*/
-
.ZhuShi { /*注释*/
-
margin: 0 0 0 2em;
-
font-family: "MyFangSong", serif;
-
}
若是需要在 ePub 文件的 html 源文件中使用的话,则可写成(具体可以查询 css 的相关用法):
-
<p class="ZhuShi">这是一段注释。</p>
自定义其他字体名称的方法依此类推。
======
下面介绍 FontRepack 软件的配置说明,这里使用的是 v1.22 版本。
软件的目录结构如下:
-
FontRepack-1.22
-
| config.xml
-
| fontmap.ini
-
| FontRepack.exe
-
| README.txt
-
|
-
+---fonts
-
| FangSong.ttf
-
| KaiTi.ttf
-
| Song.ttf
-
| ...
-
|
-
\---temp
其中,比较重要的文件为 fontmap.ini,其内容为:
-
;分号开头表示注释
-
;对应关系以冒号分隔
-
;默认注释掉 "SongTi" 行表示不内嵌 "SongTi"/Song.ttf
-
-
fontrepackdefault: Song.ttf
-
;"SongTi": Song.ttf
-
"MyFangSong": FangSong.ttf
该文件定义了字体名称和字体文件的映射,所对应的字体放在目录 fonts 下。
比如,前面我又自定义了一种字体名称“MyKaiTi”,使用的字体文件为 KaiTi.ttf,现在想要将字体文件嵌入到最终的 ePub 文件中。
做法如下:首先将需要使用的字体文件 KaiTi.ttf 放到目录 fonts 中,然后在文件 fontmap.ini 中增加对应的一行,如下所示:
-
;分号开头表示注释
-
;对应关系以冒号分隔
-
;默认注释掉 "SongTi" 行表示不内嵌 "SongTi"/Song.ttf
-
-
fontrepackdefault: Song.ttf
-
;"SongTi": Song.ttf
-
"MyFangSong": FangSong.ttf
-
"MyKaiTi": KaiTi.ttf ; 增加了该行
若是想暂时先不嵌入某种字体的话,如“MyFangSong”字体,则只需将对应的行注释掉,如下:
-
;分号开头表示注释
-
;对应关系以冒号分隔
-
;默认注释掉 "SongTi" 行表示不内嵌 "SongTi"/Song.ttf
-
-
fontrepackdefault: Song.ttf
-
;"SongTi": Song.ttf
-
;"MyFangSong": FangSong.ttf ; 将该行注释掉
-
"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 上的效果图一张,其对应的书籍来自于:
阅读(9588) | 评论(0) | 转发(0) |