来源:远方网络 | 2006-2-28 | (有1758人读过)
World Wide Web 联盟的规范书将可扩展样式语言(XSL)规划成两个部分: ■XSLT用来转换XML文件 ■XSL对象格式(XSL FO) 用来详细说明格式语句的 XML函数库。 XSLT 非常容易学习和使用。只需要花费很少的时间,开发者就能将XML 文档转换成可以在用户自己浏览器上看到的HTML 文档。这也是开发者喜欢使用XSLT的原因。 XSL对象格式是一个以XML为基础的扩展函数库,能详细定义标记页数、版面和字体等网页内容信息。XSL FO 扩展语言非常复杂,也很冗长;但只有通过XSL FO 才能快速把XSLT 转换成文档源文件。 除了完全介绍XSL FO,这篇文章还将提供足够的信息和例子来说明怎样使用XSL FO。我们将通过XSL FO学习制作一个西班牙语的评论手册并将它打印出来。我们将使用Apache Software Foundation 的 FOP 工具软件使FO 文件转换成PDF 文件。 初始化 把XSL FO 文件转换成XML 文档,先需要基本的XML处理指令和FO 根元素: <?xml version="1.0" encoding="utf-8"?> <fo:root> 文档的结构为: ●主要的版面设计,由以下组成 ○文档可能出现的各种页面 ○安排这些页面的格式序列 ●页面和它们的内容 页面规划 在FO 文档的开始<fo:root> 标签后,我们必须描述文档所拥有的页面类型。文档拥有下面图表中的三种页面。按照空白区域分类为封面、左边页和右边页。封面和左边页在左面有较多的空白区域。每个页面都有页眉和页脚。 让我们从定位页面长度、宽度及空白空间开始。在文章里单位都使用厘米,也可以使用任何CSS 单位,如象素 (pixel)、毫米、英寸等。这些规格被命名为simple-page-master 并用 master-name语句指定。请看代码示例。需要注意的是页面空白区域不能有任何需要印刷出来的内容。 内容区 在所有的印刷品的图表中都会有零星的线条。那是页面的内容区(正式上被称作页面参照区), 在下面可以看出内容区被分成五个区域。 说明 我们必须先了解一些术语。当我们设定页面边的空白时,我们会使用top, bottom, left, and right这样的词汇。因为每个人都认为纸张的一块边缘就是纸张的左边、顶部、底部和右边。当我们谈到内容区域时会使用不同的词汇,因为不是所有的语言都能描述左到右或顶部到底部。 FO 认为一个页面由两种元素构成: block elements (例如文章的段落)它由新的一行起头。inline elements (例如字体的粗体和斜体)。FO的block-progress-direction 决定了段落在页面的位置。before-edge表示在段落之前,after-edge 表示在段落之后。 inline-progress-direction 决定了在一行话中每个字符的位置。start-edge 表示位置在一行话之前, end-edge表示位置在一行话之后。 对于希伯莱语来说,象以下所示:开头和结尾中文字位置与英语习惯是互相对应的。(阿拉伯语的写法也相似) 日语写法有时象下面一样写,下面是XSL 规范手册中的图片: 这种新函数库最大的优势是它使用的语言不受约束。如果你希望页面的标题出现在和普通文本相对应的位置,你可以象下面一样设定 text-align="end" 一个有趣的标题 标题一般在最上方,这样才能吸引读者的注意 如果文档最后要翻译成阿拉伯语或日语,你仍然能确定标题仍然出现在文本相对应的位置。就不需要来回调整文档的左右和上下。 指定区域的尺寸 封面页不需要页眉和页脚,所以我们只需要象以下所示的用粗体指定region-body信息。 <fo:simple-page-master master-name="cover" page-height="12cm" page-width="12cm" margin-top="0.5cm" margin-bottom="0.5cm" margin-left="1cm" margin-right="0.5cm"> <fo:region-body margin-top="3cm" /> </fo:simple-page-master> 左边页和右边页拥有页眉和页脚,所以我们需要指定region-before 和 region-after的范围。 要点:你得给region-body 指定范围,相当于指定region-before 和region-after 的范围 (FOP 现在不支持region-start 和region-end)。如果你象下面这样做 : <fo:region-before extent="1cm"/> <fo:region-after extent="1cm"/> <fo:region-body margin-top="0.20cm" margin-bottom="0.20cm" /> 结果会是:
|