在使用Apache FOP將Docbook文檔轉換成PDF一文中,Easwy介紹了在Debian Linux上使用Apache FOP將Docbook文檔轉換成PDF文件。本來在那篇文章之后,Easwy想寫一篇如何在Windows上配置Apache FOP的文章,不過一直沒抽出時間。今天剛好有網友問這個問題,于是教她一步步做下來,把步驟列在下面。
你可以在這里下載到文章中Easwy用到的所有文件:點此下載
安裝Docbook樣式表和xsltproc程序
按照文章一個簡單的Docbook 5.0例子,安裝Docbook樣式表和xsltproc轉換程序,并能夠成功將Docbook文件轉換成html格式。
安裝Apache FOP和Java虛擬機
到Apache Download Mirrors下載Apache FOP,Easwy下載的是FOP 1.0。下載后,將下載的文件解壓,Easwy把它解壓到C:docbookfop-1.0。
接下來,還要安裝Java虛擬機,因為Apache FOP需要Java虛擬機才能運行。到Java網站下載安裝即可。
設置Apache FOP
我們需要配置Apache FOP進行PDF轉換時所用到的字體信息。首先,用下面的命令把字體信息從Windows自帶的系統字體中提取出來:
cd C:docbookfop-1.0
mkdir fonts
java -cp buildfop.jar;libavalon-framework-4.2.0.jar;libcommons-logging-1.0.4.jar;libcommons-io-1.3.1.jar;libxmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimSun c:windowsfontssimsun.ttc fontssimsun.xml
java -cp buildfop.jar;libavalon-framework-4.2.0.jar;libcommons-logging-1.0.4.jar;libcommons-io-1.3.1.jar;libxmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimHei c:windowsfontssimhei.ttf fontssimhei.xml
上面的命令,把C:Windowsfonts目錄下的宋體和黑體這兩種字體信息提取到fontssimsun.xml和fontssimhei.xml文件中。
接下來配置C:docbookfop-1.0conffop.xconf,使Apache FOP能夠找到這兩種字體。首先在文件中找到<renderer mime=”application/pdf”>這一行,然后在此標簽中加入關于字體的配置。
<fonts>
<font metrics-url="fonts/simsun.xml" kerning="yes" embed-url="file:///c:/windows/fonts/simsun.ttc">
<font-triplet name="SimSun" style="normal" weight="normal"/>
<font-triplet name="SimSun" style="normal" weight="bold"/>
<font-triplet name="SimSun" style="italic" weight="normal"/>
<font-triplet name="SimSun" style="italic" weight="bold"/>
</font>
<font metrics-url="fonts/simhei.xml" kerning="yes" embed-url="file:///c:/windows/fonts/simhei.ttf">
<font-triplet name="SimHei" style="normal" weight="normal"/>
<font-triplet name="SimHei" style="normal" weight="bold"/>
<font-triplet name="SimHei" style="italic" weight="normal"/>
<font-triplet name="SimHei" style="italic" weight="bold"/>
</font>
<directory recursive="true">file:///c:/windows/fonts/</directory>
<auto-detect/>
</fonts>
配置XLT轉換樣式表
接下來,我們要配置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樣式表,然后重新設置了其中的字體參數,改成我們所要的字體名稱。需要注意的是,這里的字體名字需要和fop.xconf中設置的font-triplet中的名字完全一致。
輸出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:>Easwy的博客</link>。
</para>
</section>
</article>
然后輸入下面的命令將其轉換成PDF:
xsltproc -o example.fo c:docbookfop-1.0confdocbook_fo.xsl example.xml
fop -c c:docbookfop-1.0conffop.xconf example.fo -pdf example.pdf
來自:易水博客 原文鏈接