在 Windows 上安装配置 Apache FOP


在使用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:\docbook\fop-1.0。

接下来,还要安装Java虚拟机,因为Apache FOP需要Java虚拟机才能运行。到Java网站下载安装即可。

设置Apache FOP

我们需要配置Apache FOP进行PDF转换时所用到的字体信息。首先,用下面的命令把字体信息从Windows自带的系统字体中提取出来:

cd C:\docbook\fop-1.0
mkdir fonts
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 SimSun c:\windows\fonts\simsun.ttc fonts\simsun.xml
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 SimHei c:\windows\fonts\simhei.ttf fonts\simhei.xml

上面的命令,把C:\Windows\fonts\目录下的宋体和黑体这两种字体信息提取到fonts\simsun.xml和fonts\simhei.xml文件中。

接下来配置C:\docbook\fop-1.0\conf\fop.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: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

来自:易水博客 原文链接

相关内容