生活随笔
收集整理的這篇文章主要介紹了
XSL-FO 简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| XSL-FO?簡介 | | herong 原創? (參與分:13,專家分:10)?? 發表:2003-6-26 下午8:48 ??更新:2003-6-28 上午7:04 ??版本:1.0 ??閱讀:3351次 |
|
和榮筆記?-?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: [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] 請注意:
-?這是一個完整的?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: [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] 注意,這是一條指令,必須寫成一行,而且?.jar?文件名之間不能有空格。由于顯示寬度的限制, 我不得不把這一條指令寫成幾行。
如果你在一個指令窗口中運行上述指令文件,得到下面的結果: [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] 你的安裝便是成功的。
根據使用說明,FOP?有兩個主要功能:
-?將?XSL-FO?文件排版生成?.txt,.pdf,或者?.ps?文件。
-?按照?XSLT?文件所給轉換和排版語句,將?XML?文件轉換并排版生成?.txt,.pdf,或者?.ps?文件。
將?XSL-FO?文件排版生成?.txt?文件 --------
首先讓我們作一個簡單的例子,將?hello.fo?排版生成一個?.txt?文件。請運行下面的指令: [pre] run_fop?-fo?hello.fo?-txt?hello.txt [/pre] 你會得到如下的信息: [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?來閱讀?XSL-FO?文件。我們 還可以看出,排版后的結果只有一頁。
為了驗證結果,請將?hello.txt?文件用?notepad?打開,你會看到: [pre]
????????Hello??world!
... [/pre] 排版結果完全正確。
將?XSL-FO?文件排版生成?.pdf?文件 --------
我們的第二個例子是將?hello.fo?排版生成一個?.pdf?文件。請運行下面的指令: [pre] run_fop?-fo?hello.fo?-pdf?hello.pdf [/pre] 你會得到如下的信息: [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] 然后請用?Adobe?Reader?打開?hello.pdf,你會看到“Hello?world!”被正確地排版在 頁面的左上角。這個結果非常鼓舞人心,我對?FOP?的感覺越來越好了。
將?XML?文件轉換排版生成?.pdf?文件 --------
在以上兩個例子中,我們將原始文字資料已經和排版語句結合在一起了。在這個例子里, 我們將使用兩個輸入文件:一個是原始文字資料文件?hello_xsl.xml,一個是轉換和排版 語句文件?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] 請注意:
-?排版指令“fo:*”被嵌入在轉換指令“xsl:*”之中。
-?轉換指令除了引入了排版指令以外,還將原文字資料作了簡單的轉換,在其首尾各加了 一字符:“-”。
現在請運行下面的指令: [pre] run_fop?-xml?hello_xsl.xml?-xsl?hello_fo.xsl?-pdf?hello.pdf [/pre] 如果你打開?hello.pdf,轉換后的文字資料“-Hello?world!-”被正確的排版在頁面的左上角。
XML?文件的轉換處理 --------
在?FOP?軟件包里,還有一個?XML?文件處理軟件:“xalan”。 它的功能是對?XML?文件作轉換處理。下面是?xalan?的運行指令文件,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] 讓我們借用上面最后一個例子來試驗,使用?xalan,安照?hello_fo.xml?來轉換?hello_xsl.xml: [pre] run_xalan?-in?hello_xsl.xml?-xsl?hello_fo.xsl?-out?hello.out [/pre] 下面是轉換后的結果?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] 這個結果和我們的預計是一致的。排版語句被完整地保留下來了,原文字資料也被作過轉換。
結論一: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> |
|
| ??評論人:llystar ???參與分: 33 ???專家分: 0 | 發表時間: 2004-4-7 下午1:30 | | 請問FOP生成中文pdf中的拷貝問題,不知如何解決?好像FOP沒有解決好字體編碼的映射問題,我現在做的項目中要解決這這個問題,郁悶啊... |
|
|
轉載于:https://www.cnblogs.com/sunsonbaby/archive/2004/09/10/41945.html
總結
以上是生活随笔為你收集整理的XSL-FO 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。