XSL-FO学习笔记
第4章 样式语言-XSL

4.3.2 XSL 样式表的结构
样式表是格式良好的 XML 文档。 样式表的顶层元素如下所示:
样式表的根元素
<xsl:stylesheet xmlns:xsl=/1999/XSL/Transform/>
要使 XML 文档与 XSLT 规范相容,则需要将以下 元素添加到 XML 文档中:
③
FO主要元素
⑤
文本块 <fo:block>:用于格式化一个文本块,可以设置文本 块的格式、字体、行间距。
<fo:block font-size=”字体大小” line-height=”行距” text-align=”对齐方式” text-align-last=”对齐方式” space-before=”前面间距” space-after=”后面间距”…>
2. FO主要元素
①
②
layout-master-set:定义标准页面集合, 包含文档中使用到的所有标准页面 页面 simple-page-master:定义一个 标准页面模板,并定义有模板名称 “master-name”
FO主要元素
定义页面区域,页面布局(layout)主要设置与 纸有关的信息;页面则是指用以打印的区域
<fo:inline>:定义文本块中的文本属性,如字体风格、 字形
<fo:inline font-style=”字体风格” font-weight=”字体粗细” font-family=”字形”>
指明 XSL 样式表的位置
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="Example 1.xsl"?>
xsl,表格,换行

竭诚为您提供优质文档/双击可除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),如右图。
xsl入门.

二.XSL的转换
1.将XML转换成HTML XSL是如何将XML文档转换成HTML文件的呢?我们来பைடு நூலகம்一 个例子,下面是XML文档的一部分: <?xml version="1.0" encoding="ISO8859-1" ?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </CATALOG>
当XML文档被转换成HTML文件,索引应该 同时建立。简单的办法就是给你的for-each 元素增加一个order-by属性,就象这样: <xsl:for-each select="CATALOG/CD" order-by="+ ARTIST"> order-by属性带有一个"+"或者"-" 的符 号,用来定义索引的方式,是升序还是降序 排列。符号后面的名字就是要索引的关键字。 例如(cd_catalog_sort.xsl):
如果为XML文档加上XSL样式表,看下面代码第2行,你的浏 览器就可以精确的将XML 文档转换为HTML文件。 <?xml version="1.0" encoding="ISO8859-1" ?> <?xml-stylesheet type="text/xsl" href="cd_catalog.xsl"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </CATALOG>
《XML基础及开发实践》第八章

被转换的XML文件
<?xml version="1.0" encoding="UTF-8"?> <!--通过处理指令引入XSLT文档--> <?xml-stylesheet type="text/xsl" href="simple.xslt"?> <person> <name>田诗琪</name> <birthdate>2011-04-11</birthdate> <sex>女</sex> <high>83cm</high> </person>
第一个XSLT
<xsl:template match="/"> <html> <head><title>个人信息介绍</title></head> <body><h1>姓名:<xsl:value-of select="person/name"/></h1> <ul> <li>生日:<xsl:value-of select="person/birthdate"/></li> <li>性别:<xsl:value-of select="person/sex"/></li> <li>身高:<xsl:value-of select="person/high"/></li> </ul> </body> </html> </xsl:template> </xsl:stylesheet>
fop 字体相对路径 -回复

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(一)

跟我学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",也就是"简体中文"。
本章将学习以下内容

一、为什么需要样式单
W3C给出了两种样式单语言的推荐标准: 层叠样式单(表) CSS-- Cascading Style Sheets CSS最初是为HTML开发的,后来为XML进行了扩展。 可扩展样式单语言 XSL—eXtensible Stylesheet Language XSL本身是一个XML文档,遵守XML的语法规则,是XML的 一种应用。 XSL由两部分组成: 1) XSL Transformations(XSLT) 描述了如何将一个XML文档进行转换,转换为可浏览或可 输出的格式;XSLT是一种脚本语言。 2) Formatted Object(FO) FO和CSS在作用上是非常类似的,目前,W3C还未出台一个 得到多方认可的FO;
二、XSLT的基础知识
Xpath—XML路径语言
相对路径和绝对路径 从文档的根开始的路径(“/”)为绝对路径; 相对于当前元素开始的路径为相对路径; 属性匹配 从文档的根开始的路径(“/”)为绝对路径; 相对于当前元素开始的路径为相对路径; 如 /article/sect1/para/ulink/@url @字符表明url是一个属性而不是元素。 条件匹配 Xpath可以包含条件,条件为真时才匹配。 如 /article/sect1/para[ulink] 匹配含有ulink的段落。 元素之后包含应用条件,条件包含在方括号中。
模板的组成
1) match参数用于设定输入文档中的元素的路径, 表示该模板应用于该元素; 2) 模板的内容列出当模板匹配时要在输出文档中创建的元素;
XSL样式单包含两部分内容:XSLT和XPath。
二、XSLT的基础知识
Xpath—XML路径语言
Xpath可以定义某个模板是否应用到源XML文档中的某个节点。 它使得开发人员可以选择XML源文档中的哪一部分由具有适当模板的 应用程序来处理,以便产生需要的输出树。 Xpath可以从文档的根元素开始,列出文档中的所有元素, 元素之间使用“/”隔开; 如 文章的标题 /article/articleinfo/title 小节标题 /article/sect1/title “//”可以用于选择一个节点的全部后代; 如 /article//title 选择了文章中的全部标题。 “*”可以用于匹配所有的元素; 如/article/*匹配article的全部子元素。 “|”用于选择; 如 title|para可以匹配title或者para。
XSLT入门学习资料、XPath转换XML文件资料

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)、数字和字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
能够生成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属性可以将单元格合并起来,其值集是数值。