最近調(diào)查了一個(gè)新鮮東東。XSL-FO和FOP,用來將FO文件生成PDF文件,覺得它是個(gè)不錯(cuò)的東東,所以記下來,與大家分享。
相關(guān)術(shù)語:
XSL-FO(XML?Stylesheet?Language-Formatting?Objects)
XSL-T(XSL Transformations)
FOP?(Formatting?Objects?Processor)?
英文教程:
FOP下載地址:
注意:fop.jar要放在你的CLASSPATH中。
?
命令格式:
-------------------------------------------------------------------
至于XSL-FO的起源,特點(diǎn)和作用我就不多啰嗦了,祥細(xì)說明在網(wǎng)上到處都是,自已去看吧。我只想來點(diǎn)實(shí)用的。在這里只要了解一點(diǎn),XSL-FO他只是描述了頁面展現(xiàn)給用戶的時(shí)候它應(yīng)該是什么樣子的就行了。
?
1:直接將fo文件通過FOP命令轉(zhuǎn)換成pdf文件。
格式: fop test.fo test.pdf
?
2:將xml+xslt(樣式表文件)轉(zhuǎn)換成pdf文件。
格式:fop -xsl test.xsl -xml test.xml -pdf test.pdf
--------------------------------------------------------------------
?
對(duì)雙字節(jié)(中/日文)的支持:
--------------------------------------------------------------------
這里我只介紹日文的例子,中文照著做就行了。
實(shí)現(xiàn)步驟:
1.使用批處理生成字體文件(XML)
java -cp build\fop.jar;lib\avalon-framework-cvs-20020806.jar; org.apache.fop.fonts.apps.TTFReader -ttcname "MS Gothic" C:\WINNT\Fonts\MSGOTHIC.TTC msgothic.xml
注意:TTC文件和TTF文件的生成方式不同。
上面給出的是TTC字體文件的例子。
TTF命令格式是:
java -cp build\fop.jar;lib\avalon-framework-cvs-20020806.jar; org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\Cyberbit.ttf msmincho.xml
?
上面只用到了fop.jar和avalon-framework-cvs-20020806.jar,這因?yàn)槲业腇OP Ver是0.20.5,如果小于這個(gè)版本則要加上其他的包,這個(gè)在網(wǎng)上的教程沒有說,
結(jié)果我用他們給出的命令格式狂試,結(jié)果就是出錯(cuò),最后還是在apache網(wǎng)上找到了正解,
擦汗....
?
2.將生成的字體文件注冊(cè)到fop。
修改下面的配置文件conf/userconfig.xml
增加下面的內(nèi)容:
<!-- Example Japanese fonts -->
?<font metrics-file="D:\xslfo\fop-0.20.5\msgothic.xml" embed-file="c:\winnt\fonts\msgothic.ttc" kerning="yes">
??? <font-triplet name="Gothic" style="normal" weight="normal"/>
??? <font-triplet name="Gothic" style="normal" weight="bold"/>
??? <font-triplet name="Gothic" style="italic" weight="normal"/>
??? <font-triplet name="Gothic" style="italic" weight="bold"/>
?</font>
?
3.利用FOP再次生成PDF文件(FOP命令格式有變)
修改你的FOP.BAT批處理文件,將最后一行
java -cp "%LOCALCLASSPATH%" org.apache.fop.apps.Fop %1 %2 %3 %4 %5 %6 %7 %8
?
修改成
java -cp "%LOCALCLASSPATH%" org.apache.fop.apps.Fop -c conf/userconfig.xml %1 %2 %3 %4 %5 %6 %7 %8
也就是增加了-c conf/userconfig.xml參數(shù)。
網(wǎng)上很多地方這一點(diǎn)也沒說到,害得我注冊(cè)好字體后怎么試都不成功,生成的PDF就是不能正常顯示日文。后來想想修改后的配置文件沒有用到,到網(wǎng)上查了一下才知道那里要修改一下,增加-c參數(shù),我狂暈~~~~~。
?
要驗(yàn)證你的日文是否被正確顯示,針對(duì)FO文件需要修改以下地方有:
原:<fo:block font-size="20pt" font-family="serif"
??????????????? line-height="30pt">
??????? Hello~kaegunテスト
????? </fo:block>
現(xiàn):<fo:block font-size="20pt" font-family="Gothic"
??????????????? line-height="30pt">
??????? Hello~kaegunテスト
????? </fo:block>
?
如果你是用XML+XSLT的方式成生PDF,則要修改xsl文件
原:<xsl:template match="name">??????
?????? <fo:block font-size="18pt"
???????????? font-family="serif"
???????????? line-height="24pt"
???????????? space-after.optimum="15pt"
???????????? background-color="blue"
???????????? color="white"
???????????? text-align="center"
???????????? padding-top="3pt">
???????? <xsl:value-of select="."/>
?????? </fo:block>
?</xsl:template>
現(xiàn):<xsl:template match="name">??????
?????? <fo:block font-size="18pt"
???????????? font-family="Gothic"
???????????? line-height="24pt"
???????????? space-after.optimum="15pt"
???????????? background-color="blue"
???????????? color="white"
???????????? text-align="center"
???????????? padding-top="3pt">
???????? <xsl:value-of select="."/>
?????? </fo:block>
?</xsl:template>
經(jīng)過上述操作后,用新的批處理命令即可生成能正確顯示日文的PDF文件了。