日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XSL-FO 简介

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。