linlu11 的博客

[原创]终于搞定中文docbook转换成PDF

1、下载libxslt工具

链接:在 Windows上使用DocBook写帮助文档

解压到:D:\GnuWin32\docbook\libxslt

 

2、下载fop 0.95

链接:http://apache.freelamp.com/xmlgraphics/fop/binaries/fop-0.95-bin.tar.gz
解压到:D:\GnuWin32\docbook\fop-0.95

 

3、下载docbook-xsl

链接:http://nchc.dl.sourceforge.net/project/docbook/docbook-xsl-ns/1.75.2/docbook-xsl-ns-1.75.2.zip
解压到:D:\GnuWin32\docbook\docbook-xsl

 

4、下载offo-hiphenation

链接:http://nchc.dl.sourceforge.net/project/offo/offo-hyphenation-utf8/0.1/offo-hyphenation-fop-stable-utf8.zip
解压到:D:\GnuWin32\docbook\fop-0.95\lib

 

5、生成字体描述文件和配置文件

新建D:\GnuWin32\docbook\fop-0.95\conf\TTFReader.zh-CN.bat,将将如下脚本拷入其中:

:: Step 1. 生成字体文件
set TTFReader=java -cp ..\build\fop.jar;..\lib\avalon-framework-4.2.0.jar;..\lib\batik-all-1.7.jar;..\lib\commons-logging-1.0.4.jar;..\lib\commons-io-1.3.1.jar;..\lib\serializer-2.7.0.jar;..\lib\xalan-2.7.0.jar;..\lib\xercesImpl-2.7.1.jar;..\lib\xml-apis-1.3.04.jar;..\lib\xml-apis-ext-1.3.04.jar;..\lib\xmlgraphics-commons-1.3.1.jar org.apache.fop.fonts.apps.TTFReader 

%TTFReader% C:\WINDOWS\Fonts\simhei.ttf %cd%\simhei.xml
%TTFReader% -ttcname "SimSun" C:\WINDOWS\Fonts\simsun.ttc %cd%\simsun.xml

:: Step 2. 生成配置文件
(
echo ^<?xml version=^"1.0^"?^>
echo ^<fop version=^"1.0^"^>
echo   ^<base^>.^</base^>
echo   ^<renderers^>
echo     ^<renderer mime=^"application/pdf^"^>
echo       ^<filterList^>
echo         ^<value^>flate^</value^>
echo       ^</filterList^>
echo       ^<fonts^>
echo         ^<font metrics-url=^"file:///%cd%\simhei.xml^" kerning=^"yes^" embed-url=^"file:///c:\windows\fonts\simhei.ttf^"^>
echo           ^<font-triplet name=^"simhei^" style=^"normal^" weight=^"normal^" /^>
echo           ^<font-triplet name=^"simhei^" style=^"normal^" weight=^"bold^" /^>
echo           ^<font-triplet name=^"simhei^" style=^"italic^" weight=^"normal^" /^>
echo           ^<font-triplet name=^"simhei^" style=^"italic^" weight=^"bold^" /^>
echo         ^</font^>
echo         ^<font metrics-url=^"file:///%cd%\simsun.xml^" kerning=^"yes^" embed-url=^"file:///c:\windows\fonts\simsun.ttc^"^>
echo           ^<font-triplet name=^"simsun^" style=^"normal^" weight=^"normal^" /^>
echo           ^<font-triplet name=^"simsun^" style=^"normal^" weight=^"bold^" /^>
echo           ^<font-triplet name=^"simsun^" style=^"italic^" weight=^"normal^" /^>
echo           ^<font-triplet name=^"simsun^" style=^"italic^" weight=^"bold^" /^>
echo         ^</font^>
echo       ^</fonts^>
echo     ^</renderer^>
echo   ^</renderers^>
echo ^</fop^>
) ^> %cd%\user.config

运行D:\GnuWin32\docbook\fop-0.95\conf\TTFReader.zh-CN.bat脚本,将在D:\GnuWin32\docbook\fop-0.95\conf目录下生成字体描述文件simsun.xml和simhei.xml,并且生成配置文件fop.zh-CN.conf

 

6、新建D:\GnuWin32\docbook\docbook-xsl\fo\docbook.zh-CN.xsl文件,内容如下:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:fo="http://www.w3.org/1999/XSL/Format" 
				xmlns:doc="http://nwalsh.com/xsl/documentation/1.0" 
				exclude-result-prefixes="doc" 
				version="1.0">
	<xsl:import href="docbook.xsl"/>
	<xsl:param name="body.font.family">simsun,serif</xsl:param>
	<xsl:param name="body.font.size">12</xsl:param>
	<xsl:param name="monospace.font.family">simsun,serif</xsl:param>
	<xsl:param name="title.font.family">simsun,serif</xsl:param>
	<xsl:param name="page.margin.inner">2cm</xsl:param>
	<xsl:param name="page.margin.outer">2cm</xsl:param>
	<xsl:param name="hyphenate">false</xsl:param>
	<xsl:param name="paper.type" select="'A4'"/>
	<xsl:param name="draft.mode" select="'no'"/>
</xsl:stylesheet>

 

7、现在就可以进行转换了,示例脚本如下:

PATH %PATH%;D:\GnuWin32\docbook\libxslt\bin;D:\Program Files\HTML Help Workshop
set FOP_PATH=D:\GnuWin32\docbook\fop-0.95

::set file=%1
set file=book
set cmd1=xsltproc --xinclude --output %file%.fo %cd%\..\docbook-xsl\fo\docbook.zh-CN.xsl %file%.xml 
set cmd2=%FOP_PATH%\fop -c %FOP_PATH%\conf\fop.zh-CN.conf -fo %file%.fo -pdf %file%.pdf

@echo Building FO file
%cmd1%
@echo Building PDF
%cmd2%
@echo Cleaning up
del %file%.fo
@echo Done

 

7、后记

在我尝试的过程中,在网上搜索了很久,但是一个细节没注意:我在docbook.zh-CN.xsl和fop.zh-CN.conf两个文件中分别用SimSun和simsun,由于fop区分大小写一直是乱码,搞了好久,希望大家别犯我这种低级错误。

posted on 2010-05-23 21:30  linlu11  阅读(1452)  评论(0编辑  收藏  举报

导航