在Windows下搭建Docbook环境
1.下载Docbook XSL样式表
在这里下载Docbook XSL样式表,选择docbook-xsl-ns目前是1.77.1解压到C:\docbook目录,即Docbook XSL所在的目录是:C:\docbook\docbook-xsl-ns-1.77.1\下,在转换Html和PDF时要用到样式表。
2.下载下载xsltproc转换程序
在这里下载Windows版本的xsltproc,需要下载下面几个包:
-
- iconv-1.9.2.win32.zip – 编码转换工具
- zlib-1.2.3.win32.zip – 压缩工具
- libxslt-1.1.24.win32.zip – XSL和EXSL转换工具,xsltproc程序就在此包中
- libxml2-2.7.3.win32.zip – XML解析工具和处理工具,同时提供了验证工具xmllint和xmlcatalog
下载后,把这些包解压到同一个目录里,假设解压到C:\docbook\xsltproc目录,解压后在C:\docbook\xsltproc\下的各个工具目录里有bin、include和lib三个目录,要把它们都分类放在C:\docbook\xsltproc\bin,C:\docbook\xsltproc\include,C:\docbook\xsltproc\lib中。现在需要在环境变量PATH中增加C:\docbook\xsltproc\bin,设置后,再打开一个DOS窗口,可以直接输入xsltproc命令
现在可以用命以下令生成HTML文件
xsltproc -o docbook.html docbook_easwy.xsl docbook.xml
如果报错误:Element include in namespace 'http://www.w3.org/2001/XInclude' encountered in book, but no template matches.
则需要加入--xinclude参数,这样就可以将你的外部的xml文件包含进来
xsltproc --xinclude -o dataguard.html ../format_xsl/dataguard_guide.xsl dataguard_manual_book.xml
3.安装配置Apache FOP
到Apache Download Mirrors下载Apache FOP,下载的是FOP 1.0。下载后,将下载的文件解压把它解压到C:\docbook\fop-1.0,最好设置系统环境变量,要在cmd中使用fop命令转换成PDF文件。
注意:我是下载binaries目录下的fop-1.0-bin.tar.gz文件,source目录下的包没有build/fop.jar文件。
报错内容: Could not find or load main class org.apache.fop.fonts.apps.TTFReader
接下来,还要安装Java虚拟机,因为Apache FOP需要Java虚拟机才能运行。到Java网站下载安装,注意系有可能要设置Java的系统环境变量。
配置C:\docbook\fop-1.0\conf\fop.xconf文件,使Apache FOP能够找中文字体。在文件中找到<renderer mime=”application/pdf”>在<fonts></fonts>内的</fonts>标签之上加上以下内容:
<!-- new added start --> <!-- register all the fonts found in a directory and all of its sub directories (use with care) --> <directory recursive="true">file:///c:/windows/fonts/</directory> <!-- automatically detect operating system installed fonts --> <auto-detect/> <!-- new added end -->
指定Windows系统中的字体,docbook_fo.xsl样式文件会调用。
4.安装Docbook5.0
下载Docbook5的schema,打开页面之后,点击“5.0”链接,在新打开的页面可以看到“docbook-5.0.zip”的文件链接,这个文件包含了DocBook所有的schema及相应的文档。下载这个文件,将其解压到“c:\docbook\docbook-5.0”的路径中。在c:\docbook\下创建名为“catalog.xml”的文件,文件内容如下:
<?xml version="1.0"?> <DOCTYPE catalog PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"> <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> <group prefer="public" xml:base="file:///D:/docbook/"> <public publicId="-//OASIS//DTD DocBook XML 5.0//EN" uri="docbook-5.0/dtd/docbook.dtd"/> <system systemId="http://www.oasis-open.org/docbook/xml/5.0/dtd/docbook.dtd" uri="docbook-5.0/dtd/docbook.dtd"/> <uri name="docbook.xsl" uri="docbook-xsl-1.76.1/html/docbook.xsl"/> </group> </catalog>
当处理器查找相应的名称时可优先到所指定的路径中去搜索而无需上网下载。
Catalog主要作用体现在三个方面:
- 将公共ID与实际网络地址相映射。
- 将特定网络地址重新导向至另一个网络地址。
- 将网络地址重新导向至本地文件以实现缓存。
这时C:\docbook\的目录内容如下:
docbook
- docbook-5.0
- docbook-xsl-ns-1.77.1
- fop-1.0
- xsltproc
- catalog.xml
5.设置SXL转换样式表
接下来,我们要配置XSL转换样式表,让xsltproc在转换Docbook文档时,使用我们指定的中文字体。在下面给出了一个简单的样式表,假设存为docbook_fo.xsl:
<?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ng="http://docbook.org/docbook-ng" xmlns:db="http://docbook.org/ns/docbook" exclude-result-prefixes="db ng exsl" version='1.0'> <xsl:import href="C:/docbook/docbook-xsl-1.74.3/fo/docbook.xsl"/> <xsl:param name="body.font.family">SimSun</xsl:param> <xsl:param name="monospace.font.family">SimSun</xsl:param> <xsl:param name="title.font.family">SimHei</xsl:param> </xsl:stylesheet>
在这个转换样式表里,首先导入了Docbook的FO样式表,然后重新设置了其中的字体参数,改成我们所要的字体名称,c:/windows/fonts/文件夹下有的字体都可以加,也可以下载想要的字体复制到该文件夹下。
6.生成PDF文件
完成上述配置后,就可以进行PDF文件的转换了,写一表简单的文档,如下把下面的文件保存为example.xml
<?xml version='1.0' encoding="utf-8"?> <article xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="zh-CN" xmlns:xlink='http://www.w3.org/1999/xlink'> <articleinfo> <title>我的第一篇Docbook 5.0文档</title> <author> <firstname>Easwy</firstname> <surname>Yang</surname> </author> </articleinfo> <section> <title>文档介绍</title> <para> 这是我的第一篇Docbook 5.0文档,欢迎你来到<link xlink:href='http://easwy.com/blog/'>Easwy的博客</link>。 </para> </section> </article>
然后输入下面的命令将其转换成PDF:
xsltproc -o example.fo c:\docbook\fop-1.0\conf\docbook_fo.xsl example.xml fop -c c:\docbook\fop-1.0\conf\fop.xconf example.fo -pdf example.pdf
生成PDF时有许多错误,暂时忽略。看看有没有生成PDF文件,如果没有则需要认真查看报错内容,再到百度、谷歌上搜吧。
参考文档