生活随笔
收集整理的這篇文章主要介紹了
XSL-FO 简介
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
| XSL-FO?簡(jiǎn)介 | | herong 原創(chuàng)? (參與分:13,專(zhuān)家分:10)?? 發(fā)表:2003-6-26 下午8:48 ??更新:2003-6-28 上午7:04 ??版本:1.0 ??閱讀:3351次 |
|
和榮筆記?-?XSL-FO?與?XHTML ========
楊和榮
版本?2.01,修改于2002年12月23日
XSL-FO?簡(jiǎn)介 ========
什么是?XSL-FO? --------
XSL-FO:一種建立在?XML?基礎(chǔ)之上的附加排版語(yǔ)言。它的工作原理是在原始文字資料之中 加入?XML?語(yǔ)句,其作用是控制原始文字資料的排版格式。XSL-FO?其實(shí)和?TeX?非常相似,而?TeX? 在十五年以前就廣泛用于各種科技文獻(xiàn)排版之中。
XSL-FO?主要特點(diǎn):
-?XSL-FO?采用?XML?語(yǔ)言格式。
-?XSL-FO?也可以和?XSL?轉(zhuǎn)換語(yǔ)言結(jié)合使用,對(duì)被處理的?XML?文件產(chǎn)生兩種效果: 一,內(nèi)容轉(zhuǎn)換;二,打印排版。
“世界你好!”實(shí)例 --------
下面是我的第一個(gè)?XSL-FO?實(shí)例,hello.fo: [pre] <?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> [/pre] 請(qǐng)注意:
-?這是一個(gè)完整的?XML?文件,其根元素名稱為“fo:root”。
-?文中所有元素的名稱都有“fo:”前墜,代表?XML?名稱空間:“http://www.w3.org/1999/XSL/Format”。
有了?XSL-FO?文件后的下一個(gè)問(wèn)題是用什么軟件來(lái)處理這樣的文件。為此我作了一些調(diào)查和測(cè)試:
-?我沒(méi)有什么方法可以用?MS?Internet?Explorer?6.0?顯示?XSL-FO?文件。
-?XML?Spy?可以用來(lái)編輯?XSL-FO?文件,但是我不知道怎樣用它顯示?XSL-FO?文件。
-?我在網(wǎng)絡(luò)上查找一番之后,發(fā)現(xiàn)了?FOP。試用效果不錯(cuò),而且能直接生成?PDF?文件。
安裝?FOP --------
經(jīng)過(guò)初步調(diào)查,我發(fā)現(xiàn)?FOP?(Formatting?Objects?Processor)?似乎是現(xiàn)在最常用的?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?解包,把內(nèi)容放入?\local\fop-0.20.5rc2
3。建立一份指令文件,run_fop.bat: [pre] \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 [/pre] 注意,這是一條指令,必須寫(xiě)成一行,而且?.jar?文件名之間不能有空格。由于顯示寬度的限制, 我不得不把這一條指令寫(xiě)成幾行。
如果你在一個(gè)指令窗口中運(yùn)行上述指令文件,得到下面的結(jié)果: [pre] run_fop USAGE Fop?[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 ... [/pre] 你的安裝便是成功的。
根據(jù)使用說(shuō)明,FOP?有兩個(gè)主要功能:
-?將?XSL-FO?文件排版生成?.txt,.pdf,或者?.ps?文件。
-?按照?XSLT?文件所給轉(zhuǎn)換和排版語(yǔ)句,將?XML?文件轉(zhuǎn)換并排版生成?.txt,.pdf,或者?.ps?文件。
將?XSL-FO?文件排版生成?.txt?文件 --------
首先讓我們作一個(gè)簡(jiǎn)單的例子,將?hello.fo?排版生成一個(gè)?.txt?文件。請(qǐng)運(yùn)行下面的指令: [pre] run_fop?-fo?hello.fo?-txt?hello.txt [/pre] 你會(huì)得到如下的信息: [pre] [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 [/pre] 從這些信息中,我們可以看出,FOP?使用了?Xerces?SAXParser?來(lái)閱讀?XSL-FO?文件。我們 還可以看出,排版后的結(jié)果只有一頁(yè)。
為了驗(yàn)證結(jié)果,請(qǐng)將?hello.txt?文件用?notepad?打開(kāi),你會(huì)看到: [pre]
????????Hello??world!
... [/pre] 排版結(jié)果完全正確。
將?XSL-FO?文件排版生成?.pdf?文件 --------
我們的第二個(gè)例子是將?hello.fo?排版生成一個(gè)?.pdf?文件。請(qǐng)運(yùn)行下面的指令: [pre] run_fop?-fo?hello.fo?-pdf?hello.pdf [/pre] 你會(huì)得到如下的信息: [pre] [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 [/pre] 然后請(qǐng)用?Adobe?Reader?打開(kāi)?hello.pdf,你會(huì)看到“Hello?world!”被正確地排版在 頁(yè)面的左上角。這個(gè)結(jié)果非常鼓舞人心,我對(duì)?FOP?的感覺(jué)越來(lái)越好了。
將?XML?文件轉(zhuǎn)換排版生成?.pdf?文件 --------
在以上兩個(gè)例子中,我們將原始文字資料已經(jīng)和排版語(yǔ)句結(jié)合在一起了。在這個(gè)例子里, 我們將使用兩個(gè)輸入文件:一個(gè)是原始文字資料文件?hello_xsl.xml,一個(gè)是轉(zhuǎn)換和排版 語(yǔ)句文件?hello_fo.xls。
hello_xsl.xml: [pre] <?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> [/pre] 請(qǐng)注意:
-?排版指令“fo:*”被嵌入在轉(zhuǎn)換指令“xsl:*”之中。
-?轉(zhuǎn)換指令除了引入了排版指令以外,還將原文字資料作了簡(jiǎn)單的轉(zhuǎn)換,在其首尾各加了 一字符:“-”。
現(xiàn)在請(qǐng)運(yùn)行下面的指令: [pre] run_fop?-xml?hello_xsl.xml?-xsl?hello_fo.xsl?-pdf?hello.pdf [/pre] 如果你打開(kāi)?hello.pdf,轉(zhuǎn)換后的文字資料“-Hello?world!-”被正確的排版在頁(yè)面的左上角。
XML?文件的轉(zhuǎn)換處理 --------
在?FOP?軟件包里,還有一個(gè)?XML?文件處理軟件:“xalan”。 它的功能是對(duì)?XML?文件作轉(zhuǎn)換處理。下面是?xalan?的運(yùn)行指令文件,run_xalan.bat: [pre] \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 [/pre] 讓我們借用上面最后一個(gè)例子來(lái)試驗(yàn),使用?xalan,安照?hello_fo.xml?來(lái)轉(zhuǎn)換?hello_xsl.xml: [pre] run_xalan?-in?hello_xsl.xml?-xsl?hello_fo.xsl?-out?hello.out [/pre] 下面是轉(zhuǎn)換后的結(jié)果?hello.out: [pre] <?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> [/pre] 這個(gè)結(jié)果和我們的預(yù)計(jì)是一致的。排版語(yǔ)句被完整地保留下來(lái)了,原文字資料也被作過(guò)轉(zhuǎn)換。
結(jié)論一:XML?文件用于組織原始文字資料,XSL?文件用于定義資料轉(zhuǎn)換規(guī)則。如果需要, 轉(zhuǎn)換規(guī)則內(nèi)部還可以嵌入排版規(guī)則,用以控制資料的顯示和打印。
結(jié)論二:FOP?軟件可以用于資料轉(zhuǎn)換處理,可以用于資料排版處理,還可以用于資料轉(zhuǎn)換和 排版的一次性處理。
其它有關(guān)文章: http://www.geocities.com/herong_yang
| 版權(quán)聲明 | 本篇文章對(duì)您是否有幫助???投票: 是 ???否 ????投票結(jié)果:?? ??1???????0
|
|
|
|
|
| ??評(píng)論人:itjoe ???參與分: 66 ???專(zhuān)家分: 0 | 發(fā)表時(shí)間: 2003-7-1 上午10:19 | 補(bǔ)充一點(diǎn): 配置使用內(nèi)嵌字體
配置中文字體 1.????制作font?metric文件 a.如果是ttc類(lèi)型的集合字庫(kù) ??java?org.apache.fop.fonts.apps.TTFReader?-ttcname?"SimSun"?c:\winnt\fonts\simsun.ttc?simsun.xml 注意大小寫(xiě)敏感。
b.如果是ttf類(lèi)型的字體文件 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> |
|
| ??評(píng)論人:llystar ???參與分: 33 ???專(zhuān)家分: 0 | 發(fā)表時(shí)間: 2004-4-7 下午1:30 | | 請(qǐng)問(wèn)FOP生成中文pdf中的拷貝問(wèn)題,不知如何解決?好像FOP沒(méi)有解決好字體編碼的映射問(wèn)題,我現(xiàn)在做的項(xiàng)目中要解決這這個(gè)問(wèn)題,郁悶啊... |
|
|
轉(zhuǎn)載于:https://www.cnblogs.com/sunsonbaby/archive/2004/09/10/41945.html
總結(jié)
以上是生活随笔為你收集整理的XSL-FO 简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。