XSL-FO 简介

和荣笔记 - XSL-FO 与 XHTML
========

杨和荣

版本 2.01,修改于2002年12月23日


XSL-FO 简介
========


什么是 XSL-FO?
--------

XSL-FO:一种建立在 XML 基础之上的附加排版语言。它的工作原理是在原始文字资料之中
加入 XML 语句,其作用是控制原始文字资料的排版格式。XSL-FO 其实和 TeX 非常相似,而 TeX 
在十五年以前就广泛用于各种科技文献排版之中。

XSL-FO 主要特点:

- XSL-FO 采用 XML 语言格式。

- XSL-FO 也可以和 XSL 转换语言结合使用,对被处理的 XML 文件产生两种效果:
一,内容转换;二,打印排版。


“世界你好!”实例
--------

下面是我的第一个 XSL-FO 实例,hello.fo:

<?xml version="1.0" encoding="utf-8"?><fo:root xmlns:fo=" http://www.w3.org/1999/XSL/Format">  <fo:layout-master-set>  <fo:simple-page-master master-name="my_page" margin="0.5in">   <fo:region-body/>  </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="my_page">  <fo:flow flow-name="xsl-region-body">   <fo:block>Hello world!</fo:block>  </fo:flow> </fo:page-sequence></fo:root>

请注意:

- 这是一个完整的 XML 文件,其根元素名称为“fo:root”。

- 文中所有元素的名称都有“fo:”前坠,代表 XML 名称空间:“ http://www.w3.org/1999/XSL/Format”。

有了 XSL-FO 文件后的下一个问题是用什么软件来处理这样的文件。为此我作了一些调查和测试:

- 我没有什么方法可以用 MS Internet Explorer 6.0 显示 XSL-FO 文件。

- XML Spy 可以用来编辑 XSL-FO 文件,但是我不知道怎样用它显示 XSL-FO 文件。

- 我在网络上查找一番之后,发现了 FOP。试用效果不错,而且能直接生成 PDF 文件。


安装 FOP
--------

经过初步调查,我发现 FOP (Formatting Objects Processor) 似乎是现在最常用的 XSL-FO 
处理软件。下面是安装 FOP 的步骤:

1。到  http://xml.apache.org/dist/fop/  提取 fop-0.20.5rc2-bin.tar.gz

2。用 WinZIP 将 fop-0.20.5rc2-bin.tar.gz 解包,把内容放入 /local/fop-0.20.5rc2

3。建立一份指令文件,run_fop.bat:

/local/j2sdk1.4.1_01/bin/java -cp /local/fop-0.20.5rc2/build/fop.jar;   /local/fop-0.20.5rc2/lib/xercesImpl-2.2.1.jar;   /local/fop-0.20.5rc2/lib/xalan-2.4.1.jar;   /local/fop-0.20.5rc2/lib/avalon-framework-cvs-20020806.jar;   /local/fop-0.20.5rc2/lib/batik.jar org.apache.fop.apps.Fop   %1 %2 %3 %4 %5 %6

注意,这是一条指令,必须写成一行,而且 .jar 文件名之间不能有空格。由于显示宽度的限制,
我不得不把这一条指令写成几行。

如果你在一个指令窗口中运行上述指令文件,得到下面的结果:

run_fopUSAGEFop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-pcl|-ps   |-txt|-at|-print] <outfile> [OPTIONS]  -d          debug mode  -x          dump configuration settings  -q          quiet mode  -c cfg.xml  use additional configuration file cfg.xml  -l lang     the language to use for user information  -s          for area tree XML, down to block areas only...

你的安装便是成功的。

根据使用说明,FOP 有两个主要功能:

- 将 XSL-FO 文件排版生成 .txt,.pdf,或者 .ps 文件。

- 按照 XSLT 文件所给转换和排版语句,将 XML 文件转换并排版生成 .txt,.pdf,或者 .ps 文件。


将 XSL-FO 文件排版生成 .txt 文件
--------

首先让我们作一个简单的例子,将 hello.fo 排版生成一个 .txt 文件。请运行下面的指令:

run_fop -fo hello.fo -txt hello.txt

你会得到如下的信息:

[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser[INFO] FOP 0.20.5rc2[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser[INFO] building formatting object tree[INFO] setting up fonts[INFO] rendering areas to TEXT[INFO] [1][INFO] Parsing of document complete, stopping renderer[INFO] writing out TEXT

从这些信息中,我们可以看出,FOP 使用了 Xerces SAXParser 来阅读 XSL-FO 文件。我们
还可以看出,排版后的结果只有一页。

为了验证结果,请将 hello.txt 文件用 notepad 打开,你会看到:

        Hello  world!...

排版结果完全正确。


将 XSL-FO 文件排版生成 .pdf 文件
--------

我们的第二个例子是将 hello.fo 排版生成一个 .pdf 文件。请运行下面的指令:

run_fop -fo hello.fo -pdf hello.pdf

你会得到如下的信息:

[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser[INFO] FOP 0.20.5rc2[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser[INFO] building formatting object tree[INFO] setting up fonts[INFO] [1][INFO] Parsing of document complete, stopping renderer

然后请用 Adobe Reader 打开 hello.pdf,你会看到“Hello world!”被正确地排版在
页面的左上角。这个结果非常鼓舞人心,我对 FOP 的感觉越来越好了。


将 XML 文件转换排版生成 .pdf 文件
--------

在以上两个例子中,我们将原始文字资料已经和排版语句结合在一起了。在这个例子里,
我们将使用两个输入文件:一个是原始文字资料文件 hello_xsl.xml,一个是转换和排版
语句文件 hello_fo.xls。

hello_xsl.xml:

<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="hello.xsl"?><p>Hello world!</p>hello_fo.xsl:<?xml version="1.0"?><xsl:stylesheet version="1.0"   xmlns:xsl=" http://www.w3.org/1999/XSL/Transform">  <xsl:template match="p"><fo:root xmlns:fo=" http://www.w3.org/1999/XSL/Format">  <fo:layout-master-set>  <fo:simple-page-master master-name="my_page" margin="0.5in">   <fo:region-body/>  </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="my_page">  <fo:flow flow-name="xsl-region-body">   <fo:block>   -<xsl:value-of select="."/>-   </fo:block>  </fo:flow> </fo:page-sequence></fo:root> </xsl:template></xsl:stylesheet>

请注意:

- 排版指令“fo:*”被嵌入在转换指令“xsl:*”之中。

- 转换指令除了引入了排版指令以外,还将原文字资料作了简单的转换,在其首尾各加了
一字符:“-”。

现在请运行下面的指令:

run_fop -xml hello_xsl.xml -xsl hello_fo.xsl -pdf hello.pdf

如果你打开 hello.pdf,转换后的文字资料“-Hello world!-”被正确的排版在页面的左上角。


XML 文件的转换处理
--------

在 FOP 软件包里,还有一个 XML 文件处理软件:“xalan”。
它的功能是对 XML 文件作转换处理。下面是 xalan 的运行指令文件,run_xalan.bat:

/local/j2sdk1.4.1_01/bin/java    -cp /local/fop-0.20.5rc2/lib/xercesImpl-2.2.1.jar;   /local/fop-0.20.5rc2/lib/xalan-2.4.1.jar    org.apache.xalan.xslt.Process %1 %2 %3 %4 %5 %6

让我们借用上面最后一个例子来试验,使用 xalan,安照 hello_fo.xml 来转换 hello_xsl.xml:

run_xalan -in hello_xsl.xml -xsl hello_fo.xsl -out hello.out

下面是转换后的结果 hello.out:

<?xml version="1.0" encoding="UTF-8"?><fo:root xmlns:fo=" http://www.w3.org/1999/XSL/Format"> <fo:layout...   -Hello world!-   </fo:block></fo:flow></fo:page-sequence></fo:root>

这个结果和我们的预计是一致的。排版语句被完整地保留下来了,原文字资料也被作过转换。

结论一:XML 文件用于组织原始文字资料,XSL 文件用于定义资料转换规则。如果需要,
转换规则内部还可以嵌入排版规则,用以控制资料的显示和打印。

结论二:FOP 软件可以用于资料转换处理,可以用于资料排版处理,还可以用于资料转换和
排版的一次性处理。

其它有关文章:
http://www.geocities.com/herong_yang  

版权声明  本篇文章对您是否有帮助?  投票: 是    否     投票结果:     1       0
 
 
 
 

 

  评论人:itjoe    参与分: 66    专家分: 0  发表时间: 2003-7-1 上午10:19  
补充一点:
配置使用内嵌字体

配置中文字体
1. 制作font metric文件
a.如果是ttc类型的集合字库
java org.apache.fop.fonts.apps.TTFReader -ttcname "SimSun" c:/winnt/fonts/simsun.ttc simsun.xml
注意大小写敏感。

b.如果是ttf类型的字体文件
java org.apache.fop.fonts.apps.TTFReader C:/WINNT/Fonts/msgothic.ttf
msgothic.xml

2. 配置userconfig.xml文件的font部分。
<font metrics-file="msgothic.xml" kerning="yes"
embed-file="C:/WINNT/Fonts/msgothic.ttf">
<font-triplet name="MSGothic" style="normal" weight="normal"/>
</font>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值