XSL-FO学习笔记
- 格式:doc
- 大小:150.50 KB
- 文档页数:8
竭诚为您提供优质文档/双击可除xsl,表格,换行篇一:xsl-Fo学习笔记能够生成pdF文件,总是件让我感到很神秘的事情。
我以前用过的生成pdF的方法有1)将相关文件用相应的软件打开,“打印”到一个文件如ali.prn,然后手工将ali.prn 改为ali.ps,再用gostView打开ali.ps,最后用其convert 功能生成pdf文件,有一定比率的不成功;2)利用acrobatdistiller;3)利用acrobatpdFwriter。
现在,可以通过xsl-fo和apachefop编程实现,总让我感到兴奋。
1、下载安装及运行fop去fop主页下载fop,有两个版本一个是维护版一个是设计版,我下的维护版的0.20.5版binary包。
解压缩到$Fophome,此目录下有fop.cmd(forwindows)或fop.sh(for*nix)。
从这儿下载示例sample.fo文件,运行fop.cmdsample.fosample.pdf,ok生成sample.pdf了。
2、将xml文档转换为pdF文件需要两个基本步骤:1)用xslt样式表将xml文档转换为由xsl-Fo元素构成的文件。
要执行这一转换,只需用调用xslt处理器。
2)用某种显示引擎将xsl-Fo元素转换为pdF文件。
3、xsl-Fo文档定义了制作高质量可打印文档时非常重要的几件事情:1)有关页面的实际大小的信息(信纸和a4等等)2)有关页边距(顶部、左边、底部和右边)、页眉和页脚和页面其它特性的信息3)有关文本的字体、字体大小、颜色和其它特征的信息4)要打印的实际文本,由描述段落、突出显示、表等类似物的元素来标记4、xsl-Fo文档结构元素包含和。
通常包含关于页面布局的信息,而包含您正在格式化的实际内容。
5、示例讲解6、两个概念页面布局(layout)主要设置与纸有关的信息;页面则是指用以打印的区域。
页面又分为5个区域(region),如右图。
fop 字体相对路径-回复在计算机中,字体是一种用于显示文字的视觉样式。
每个操作系统和应用程序都有自己的默认字体,但有时我们需要使用特定的字体来满足我们的需求。
其中一种方法是使用FOP字体相对路径。
本文将介绍FOP字体相对路径的概念,并逐步解释如何使用它。
什么是FOP字体相对路径?FOP是一种基于XSL-FO(XSL Formatting Objects)标准的开源软件,用于将XML文档转换为各种输出格式,如PDF、PostScript、JPEG 等。
FOP字体相对路径是指FOP在转换过程中使用的字体文件的位置,通过相对于FOP配置文件的路径来定义。
首先,确保你已经安装了FOP。
在安装过程中,FOP会创建一个名为"fop.xconf"的配置文件,用于设置FOP的各种选项,包括字体。
第二步是选择适合你需求的字体。
你可以从字体文件提供商处购买字体,或者使用免费的开源字体。
将选好的字体文件保存在FOP的工作目录中,以便FOP能够找到它们。
在配置字体路径之前,你需要了解FOP字体的命名约定。
FOP要求字体文件具有特定的命名约定,以便在转换过程中正确识别和使用它们。
命名约定如下:1. 对于TrueType字体文件(.ttf),文件名应以"arial.ttf"或"Arial.ttf"的形式命名。
你可以根据需要自己命名,但确保文件扩展名是.tff。
2. 对于PostScript字体文件(.pfb和.pfm),文件名应以"arial.pfb"或"Arial.pfb"的形式命名。
确保.pfb文件和.pfm文件的文件名相同,并且扩展名是正确的。
接下来,你需要编辑"Fop.xconf"配置文件,以便FOP能够找到正确的字体文件路径。
找到以下行:<renderer mime="application/pdf"><fonts><directory recursive="true">fonts</directory></fonts></renderer>在`<directory>`标签中,将`fonts`替换为你字体文件所在的相对路径。
跟我学XSL(一)随着Internet的发展,越来越多的信息进入互联网,信息的交换、检索、保存及再利用等迫切的需求使HTML这种最常用的标记语言已越来越捉襟见肘。
HTML将数据内容与表现融为一体,可修改性、数据可检索性差,而XML借鉴了HTML与数据库、程序语言的优点,将内容与表现分开,不仅使检索更为方便,更主要的是用户之间数据的交换更加方便,可重用性更强。
XML是一种元标记语言,没有许多固定的标记,为WEB开发人员提供了更大的灵活性。
当我们使用HTML时,标记只是简单的表示内容的显示形式,而与表示的内容没有任何关联,为文档的进一步处理带来极大的不便。
比如要表示个人简历,用HTML的表示方式如下:<HTML><BODY><TABLE border=1 cellspacing=0><TH>姓名<TD>禹希初<TH>性别<TD>男<TH>生日<TD>1977.5<TR><TH>技能<TD colspan=5>数据库设计与维护、WEB开发</TABLE></BODY></HTML>在这里,我们无法从标记TH、TD得知其内容表示什么,如果用XML,相应的文档(文件名:个人简历.xml)就可写成如下形式:<?xml version="1.0" encoding="GB2312"?><resume><name>禹希初</name><sex>男</sex><birthday>1977.5</birthday><skill>数据库设计与维护、WEB开发</skill></resume>说明:version──规定了XML文档的版本,此处只能是1.0;encoding── 此处规定了XML文档的编码类型,此处取值为"GB2312",也就是"简体中文"。
8.2.2 XSLT简介XSLT提供一套规则,用于将一组元素描述的XML数据转换为另一组元素描述的文档,或者是将该数据转换为一种自定义的文本格式。
如员工的数据XML文件,通过XSLT转换,在公司的网站中会以HTML 的格式输出显示,而对于会计则只需要转换成自定义的文本格式员工数据就可以。
XSLT把XML文档转换为完全不同的输出。
这样可以把数据内容存储在XML文档中,然后通过各种媒体将其输出到各种介质中:无线电、打印、语音等格式。
当数据发生变化时,只需要修改源XML文档,不需要在多处重复相同的修改工作。
通常情况下,XSLT用于将XML文档转换为HTML,目的是可以在浏览器中进行显示。
最简单的XSLT应用情况首先涉及到两个文档:包含原始数据的XML文档和用来转换该文档的XSLT转换文档。
将XML原文档输入,处理器根据XSLT文档作为模板进行转换,最终输出需要的文档。
图8.1 使用XSL转换XML文档XSLT的一些可能的应用包括:∙以查看为目的添加元素。
如向XML格式的订单中添加公司标志或发送者的地址。
∙从现在内容创建新的内容。
如创建目录。
∙从XML文档中提取信息。
如向管理人员提供详细的信息,对普通员工提供有限的信息。
∙在不同的XML字典或模型之间进行转换。
如将公司专用的文档转换为符合业界标准的文档。
∙将XML文档转换为HTML,用以实现与现有浏览器之间的兼容。
有关XSLT的语法规则,将在本章后续部分详细介绍。
8.2.3 XPath简介XPath是XSLT的重要组成部分。
它是一种专门用来在XML文档中查找信息的语言。
XPath隶属XSLT,因此通常会将XSLT语法和XPath 语法混在一起阐述。
可以这样来解释:如果将XML文档看作一个数据库,XPath就是SQL查询语言;如果将XML文档看成DOS目录结构,XPath就是cd,dir等目录操作命令的集合。
在XSLT中, XPath表达式返回4种类型值:节点集合(node-set)、布尔值(Boolean)、数字和字符串。
XSL-FOXML数据表现技术XML数据表现技术不但使得内容的展现能够得到统一的处理,更重要的是这些技术与XSLT的共同控制为重复出现的数据的排版和显示带来了操作上的极大便利。
在数字信息产业飞速发展的今天,作为信息载体的数据格式的互通性、标准化显得日益重要。
人们希望从不同渠道、不同方式得到的信息能够得到统一的处理,而不是从各种不同的数据格式中漫无目的地查找。
于是,基于XML的数据表现技术得到了很大的发展。
这些技术不但使得内容的展现能够得到统一的处理,更重要的是这些技术与XSLT的共同控制为重复出现的数据的排版和显示带来了操作上的极大便利。
XSL-FOXSL-FO全称是XSL格式化对象(XSL Formatting Objects),它可以看作是一种排版格式。
2001年10月,W3C 组织发布了XSL-FO的1.0版本。
XSL-FO提供了一个比HTML+CSS更为高级的可视化布局模型: 一个完整的XSL-FO文档包含了信息内容及控制信息显示方式的版式,其对信息描述方法的多样性可完全媲美于目前常用的文档格式如PDF、DOC等。
它的目的之一就是在网络上进行复杂文档的分页处理、大文档和复杂排版格式的处理,以及网络打印等。
XSL-FO更重要的功能是与XSLT共同控制XML数据的显示方式。
这里,XSLT通常用于描述怎样转换XML元素,而XSL-FO通常用来描述怎样表示XML文档内容。
设计良好的XSL(这里指符合XSL-FO规范的XSLT)可以作为模板用于修饰功能相近的多个XML文档,这给重复性数据给数据库等的排版显示带来了操作上的方便。
作为一种排版格式,XSL-FO提供了强大的版式控制功能。
页面控制XSL-FO提供丰富的页面控制功能,使用者可以通过这些特性实现封面、封底、奇偶页等的分别控制,对页眉、页脚、页边距进行精确控制,并实现目录、自动页码编排等复杂功能。
这为书式、报刊、文章等的排版提供了强大而灵活的操作方式,使得XSL-FO可以适用于这方面的排版。
XML和XSL-FO(Extensible Stylesheet Language Formatting Objects)是两种不同的标记语言,用于描述和格式化文档内容。
XML是一种通用的标记语言,用于表示数据结构和信息的层次关系。
XSL-FO则是一种专门用于格式化文档的标记语言,它定义了如何将XML文档转换为可打印或可视化的格式。
使用XML和XSL-FO可以实现以下功能:1. 定义文档结构:使用XML可以创建自定义的文档结构,通过嵌套元素和属性来描述数据和信息的层次关系。
2. 数据存储和交换:XML被广泛用于数据的存储和交换,可以将结构化数据转换为XML格式,以便在不同系统之间进行传输和共享。
3. 格式化文档:XSL-FO定义了一组标记,用于指定文档的布局、样式和格式。
通过编写XSL-FO样式表,可以将XML文档转换为各种输出格式,如PDF、HTML 等。
使用XML和XSL-FO的一般步骤如下:1. 创建XML文档:使用XML语法定义文档结构和数据。
2. 编写XSL-FO样式表:使用XSL-FO语法定义文档的布局、样式和格式。
3. 转换XML文档:使用XSLT(XSL Transformations)将XML文档和XSL-FO 样式表进行转换,生成格式化的输出。
4. 输出结果:将转换后的XSL-FO文档输出为所需的格式,如PDF、HTML等。
需要注意的是,使用XML和XSL-FO进行文档格式化通常需要借助相关的工具或库来实现。
例如,Apache FOP(Formatting Objects Processor)是一个常用的开源工具,用于将XSL-FO文档转换为PDF等格式。
在使用XML和XSL-FO之前,建议先熟悉它们的语法和相关工具的用法。
能够生成PDF文件,总是件让我感到很神秘的事情。
我以前用过的生成PDF的方法有1)将相关文件用相应的软件打开,“打印”到一个文件如ali.prn,然后手工将ali.prn改为ali.ps,再用GostView打开ali.ps,最后用其convert功能生成pdf文件,有一定比率的不成功;2)利用Acrobat Distiller;3)利用Acrobat PDFWriter。
现在,可以通过xsl-fo和apache fop编程实现,总让我感到兴奋。
1、下载安装及运行fop去fop主页下载fop,有两个版本一个是维护版一个是设计版,我下的维护版的0.20.5版binary 包。
解压缩到$FOPHOME,此目录下有fop.cmd(for windows)或fop.sh(for *nix)。
从这儿下载示例sample.fo文件,运行fop.cmd sample.fo sample.pdf,OK生成sample.pdf了。
2、将XML 文档转换为PDF 文件需要两个基本步骤:1)用XSLT 样式表将XML 文档转换为由XSL-FO 元素构成的文件。
要执行这一转换,只需用调用XSLT 处理器。
2)用某种显示引擎将XSL-FO 元素转换为PDF 文件。
3、XSL-FO 文档定义了制作高质量可打印文档时非常重要的几件事情:1)有关页面的实际大小的信息(信纸和A4 等等)2)有关页边距(顶部、左边、底部和右边)、页眉和页脚和页面其它特性的信息3)有关文本的字体、字体大小、颜色和其它特征的信息4)要打印的实际文本,由描述段落、突出显示、表等类似物的元素来标记4、XSL-FO文档结构<fo:root> 元素包含<fo:layout-master-set> 和<fo:page-sequence>。
<fo:layout-master-set> 通常包含关于页面布局的信息,而<fo:page-sequence> 包含您正在格式化的实际内容。
5、示例讲解6、两个概念页面布局(layout)主要设置与纸有关的信息;页面则是指用以打印的区域。
页面又分为5个区域(region),如右图。
上例中只用到了region-body区域。
7、xsl-fo中关于距离的单位8、<fo:inline>元素设置粗体用font-weight="bold",斜体字用font-style="italic",字体如等宽字体font-family="monospace".9、<fo:block>元素text-align/text-align-last定义文本行/最后一行文本如何对齐,两者的值集都是start、center、end 和justify,分别指左、中、右和左右对齐。
space-before 和space-after用来指定块前块后的间距。
可以再附以.minimum、.maximum、.optimum 和 .precedence 等后缀,由此可得10个属性。
keep-with-next、keep-with-previous 和keep-together用来设置与前块、与后块及块内的显示控制,可赋之以.within-line、.within-column 和 .within-page 等后缀,可得12种属性。
值集为auto/数值/always,优先级由低到高。
break-before和break-after分别定义块前块后放置分隔符,值有五个,如表widows 特性定义了当一个块在页面底部开始显示时,必须一起出现的最小行数;缺省值是2。
orphans 特性定义了当一个块在当前页面显示不下时其最后几行在下页顶部显示时必须一起出现的最小行数。
其缺省值也是2。
10、图形外部的gif/jpg/svg文件,可以用<fo:external-graphic src="...">来指定。
svg文件可以嵌入fo文件本身,用<fo:instream-foreign-object>.只有把这些元素单独放到block中才能有换行的效果。
11、水平线用<fo:leader>来实现,有属性leader-pattern,可取值space/rule/dots分别表空白/实线/虚线,有属性leader-length指明长度,默认忹列等宽。
这次主要学习列表(list)、表格(table)、多页布局、页脚页眉、页编码、链接(link)等在FO的定义。
1、列表主体结构如下:<fo:block/></fo:list-item-body><fo-listblock>元素的provisional-distance-between-starts 特性定义<fo:list-item-label> 的开始部分与<fo:list-item-body> 的开始部分之间的距离。
provisional-label-separation 特性定义<fo:list-item-label> 的结束部分与<fo:list-item-block> 的开始部分之间的距离。
<fo:list-item-label> 和<fo:list-item-block> 元素的start-indent 特性分别定义了从正常的起始页边距(列表之上段落的起始位置)到<fo:list-item-label> 或<fo:list-item-body> 的开始部分的距离。
<fo:list-item-label> 和<fo:list-item-body> 元素的end-indent 特性定义从正常的结束页边距(列表之上段落的结束位置)和<fo:list-item-body> 元素的结束之间的距离。
编号列表<OL><fo:list-item-label end-indent="label-end()><fo:block><xsl:number value="position()" format="1."/></fo:block></fo:list-item-label>符号列表<UL>,用UTF-8定义字符<fo:list-item-label end-indent="label-end()><fo:block>•</block></fo:list-item-label>对自定义列表,最简单的办法是将术语(label)放在单个行上并以黑体字显示它,接着在下一行开始该术语(label)的定义.2、表格(table)xsl-fo与html对照有例如下:<fo:table table-layout="fixed"><fo:table-column column-width="150pt"/><fo:table-column column-width="150pt"/><fo:table-body><fo:table-row><fo:table-cell border-style="solid"border-color="black" border-width="1pt"padding-before="3pt" padding-after="3pt"padding-start="3pt" padding-end="3pt"><fo:block>Some text</fo:block></fo:table-cell><fo:table-cell border-style="solid"border-color="black" border-width="1pt"padding-before="3pt" padding-after="3pt"padding-start="3pt" padding-end="3pt"><fo:block>Some more text</fo:block></fo:table-cell></fo:table-row><fo:table-row><fo:table-cell border-style="solid"border-color="black" border-width="1pt"padding-before="3pt" padding-after="3pt"padding-start="3pt" padding-end="3pt"><fo:block>First cell, last row</fo:block></fo:table-cell><fo:table-cell border-style="solid"border-color="black" border-width="1pt"padding-before="3pt" padding-after="3pt"padding-start="3pt" padding-end="3pt"><fo:block>Last cell, last row</fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table>合并单元格<fo:table-cell>的number-columns-spanned 和number-rows-spanned属性可以将单元格合并起来,其值集是数值。