第 7 章 Docbook

目录

7.1. 导出到其它格式

Docbook 很适合大型文档编写,几乎所有的 Linux 发行版都可以很容易的安装并使用,本文档使用的版本是 5.x。 http://www.docbook.org/tdg5/en/html/docbook.html

7.1. 导出到其它格式

有很多工具可以将 docbook文档导出到其它格式,我使用的是 xslt 工具。

首先要确保下面的软件包已经正常安装,在 Fedora 15 中使用下面的命令安装:

$ sudo yum install docbook5-schemas docbook5-style-xsl libxslt

可以写一个 Makefile 文件,每次修改后,执行make命令就可以,也可以直接使用下面的 xsltproc 命令进行 html 的导出。

xsltproc \
  --stringparam html.stylesheet "style.css" \[1]
  --stringparam section.autolabel 1 \
  --stringparam section.label.includes.component.label 1 \
  --stringparam toc.max.depth 3 \ [2]
  --output output/single/index.html /usr/share/sgml/docbook/xsl-ns-stylesheets/html/docbook.xsl[3] linux-notes.xml  

如果要导出为 pdf 格式,还需要安装下面的软件包:

$ sudo yum install fop

fop 运行需要 jre,不过几乎所有的linux 发行版都已经默认安装好了,上面命令在安装时会自动安装一些 fop 依赖的包。个人喜欢直接安装一个完整的 fop 发行包:

$ cd /opt
$ sudo wget http://labs.renren.com/apache-mirror/xmlgraphics/fop/binaries/fop-1.0-bin.tar.gz

如果要用 fop 生成 中文 pdf 文档,需要先做一些配置。下面先加入中文字体的支持。因为我机器上默认安装的中文字体是 wqy-zenhei.ttc,所以先生成一个它的 Metrics 文件。

$ cd /opt/fop-1.0
$ sudo java -cp build/fop.jar:lib/avalon-framework-4.2.0.jar:lib/commons-logging-1.0.4.jar:lib/commons-io-1.3.1.jar:lib/xmlgraphics-commons-1.4.jar \
                org.apache.fop.fonts.apps.TTFReader -ttcname "WenQuanYi Zen Hei" \
                /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc conf/wqy-zenhei.xml

修改 /opt/fop-1.0/conf/fop.xconf 文件,找到 <renderer mime=”application/pdf”>代码段,在 <fonts>内增加:

<font metrics-url="/opt/fop-1.0/conf/wqy-zenhei.xml" kerning="yes" embed-url="/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc">
  <font-triplet name="WenQuanYi Zen Hei" style="normal" weight="normal"/>
  <font-triplet name="WenQuanYi Zen Hei" style="normal" weight="bold"/>
  <font-triplet name="WenQuanYi Zen Hei" style="italic" weight="normal"/>
  <font-triplet name="WenQuanYi Zen Hei" style="italic" weight="bold"/>
</font> 
<directory recursive="true">/usr/share/fonts/</directory>
<auto-detect/>

修改 Makefile 文件,或用下面命令来生成 fo 文件:

xsltproc \
  --stringparam html.stylesheet "style.css" \
  --stringparam section.autolabel 1 \
  --stringparam section.label.includes.component.label 1 \
  --stringparam toc.max.depth 3 \
  --stringparam body.font.family "WenQuanYi Zen Hei" \
  --stringparam monospace.font.family "WenQuanYi Zen Hei" \
  --stringparam title.font.family "WenQuanYi Zen Hei" \
  --stringparam body.font.master 11 \  
  --output output/pdf/linux-notes.fo /usr/share/sgml/docbook/xsl-ns-stylesheets/fo/docbook.xsl linux-notes.xml

生成 fo 文件以后,就可以用 fop 来生成 pdf 文件了。

$ /opt/fop-1.0/fop -c /opt/fop-1.0/conf/fop.xconf output/pdf/linux-notes.fo output/pdf/linux-notes.pdf  

注意在使用 wqy-zenhei.ttc 字库文件生成 pdf 文档会在标题插入一些 #,这是字库的原因,换 Windows 下的 SimSun 字库就没有问题,参见:Apache FOP:Fonts:Missing Glyphs



[1] 如果不用自定义的 css,可以不用设置此参数。

[2] 只显示 3 级目录。

[3] 如果生成多个 html 页面,需要将 docbook.xml 改为 chunk.xsl。