国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

試試看把XML轉成PDF的有效工具:FOP

2019-11-18 12:49:43
字體:
來源:轉載
供稿:網友

  格式對象處理器 (FOP) 是一個源碼開放的java API,可以把xml數據轉換成PDF格式,同樣的,也可以轉成其他相關的格式,象TXT, SVG, AWT, MIF, 和 PS. 該軟件是在Apache XML項目下開發的,可以免費使用。
  這篇文章展示了如何開始使用FOP。FOP的主要優點是它轉換XML數據到PDF格式報告的性能,使用的了格式化樹結構。我們提供的絕大多數的例子將會集中展示這個非凡的轉換,但也會把XML數據轉成Java AWT格式.
  這篇文章的面向于精通XML和XSLT的開發者的。要獲取更多的關于XML的信息,可以到XML.com。
  
  安裝
  FOP 可以從FOP 發布目錄上面下載。下載文件是一個gzip 文件包,它包括兩個發行包。其中fop-0.20.4-src 發行包包含源代碼,使用它可以自己用Ant 進行編譯。fop-0.20.4-bin 發行包包含了運行部分, 里面沒有源代碼和Java文檔。
  把源碼包解壓到你選擇的一個目錄下。你會得到程序解壓生成的fop-0.20.4主目錄 和一系列子目錄:build, conf, docs, hyph, lib 和 src.
  • build 包含最新的FOP運行文件fop.jar, 這個文件應該被放在應用程序的CLASSPATH 中。
  • conf 包含了確定的配置文件,這個我們將在后面進行討論。
  • docs 包含了各種各樣的例子,文檔,和一些圖形圖片。
  • hyph 包含了不同語言的連字符信息。
  • lib 包含了所有的外部.jar 文件,這些文件對于FOP自己的運行是必需的。他們包括Avalon, Batik, Xalan, 和 Xerces。 由于這篇文章
  • 是著重介紹FOP的, 我們不會深入討論這些API。只需要知道FOP使用這些API就夠了。在配置的時候我們需要把這些庫放到應用程序的CLASSPATH 中。
  • src 包含了所有源代碼。
  
  FOP 簡介
   圖形1. FOP 架構.
  FOP 是一個被3W組織在XSL 說明書 中指定的用于理解格式化對象的工具。說明書的第一部分說明了XSLT的轉化處理。我們感愛好的是第二部分, 里面說明了我們所說的格式化對象(FO)的處理。 說明書中的這一部分定義了獨立輸出的格式化對象, 它由一系列的文檔風格以及布局的詞表組成。舉個例子來說, 其中的一個格式化對象是fo:simple-page-master, 它用來說明一個頁面模板,它包含一些相關的屬性 (邊界,頁頭, 等等)。就這樣,象FOP這樣的工具可以讀吃這些信息并且把這些信息轉化成想要的格式輸出(PDF/TXT)。很重要的一點是相同的風格信息可以產生不同的輸出。
  一篇FO 文檔簡單的說就是一篇XML文檔。 它的命名空間由W3C 站點 定義。它 可以包含任何在這個命名空間中元素。你能夠手工的創建這樣的文檔并且為每一個元素指定確切的值,每一個元素應該被輸出。然而,更為通用的方法是寫一個XSLT的樣式表,來治理你的XML數據文件, 根據你的樣式標的規則來進行轉換, 從而產生最終的FO文檔。動態生成的數據能夠跟一個存在的樣式表綁定來產生FO 文檔。
  
  雖然FOP的主要意圖是處理FO文檔, 但是他也能夠通過一個樣式表完成已存在數據文件(XML)的轉換。我們假定在一XSL文件的表中有你的以XML個是存放的商務數據以及樣式表信息。假如你把這兩者提供給FOP, FOP 將會把這些信息轉換成一篇臨時的FO文檔并且最終生成你期望的輸出。
  
  一個簡單的例子
  例子文件
  下載這篇文章中的例子文件 。這個 .zip 文件包含了下列文件:
  krusty.fo, krusty.pdf, krusty.xml, and krusty.xsl.
  了解了原理以后,讓我們實際運行一下FOP。 打開一個命令窗口并且定位到你的FOP安裝目錄下。FOP 的根目錄下面包含了兩個運行體:一部分是可運行在Unix系統上的shell腳本,另一部分是用于windows環境的一系列文件,通過這些文件FOP能夠通過命令行來運行。根據你的系統情況來運行相關的腳本。FOP將會報沒有輸入參數的提示,從而輸出一系列的運行例子。好的—這意味著你現在可以開始使用FOP了。
  讓我們從創建一個簡單的FO 文件開始。假如你想要看到最終結果, 可以點擊這里krusty.fo.
  就像我前面所講到過的,一個FO文件是一個簡單的類似表的Xml文件。因此開開你的文本編輯器并輸入第一行:
  
  所有的FO文件必須有這個外層元素作為根
  http://www.w3.org/1999/XSL/Format">.
  這個 根 元素的后面跟著元素,它表明了我們文檔的頁面布局。
  
  page-height="29.7cm"
  page-width="21cm"
  margin-top="1cm"
  margin-bottom="2cm"
  margin-left="2.5cm"
  margin-right="2.5cm">
  
  就像你看到的, 主要的布局設置包括不同的簡單的可以放在里面的頁面布局定義。在我們的例子中,已經定義了一個單獨的簡單頁面治理者,在里面,我們可以看到簡單頁面的屬性,我們給它起的名字simple (這個名字以后我們會用到), 這個頁面的高度是29.7 厘米, 寬度是21 厘米, 頂端空白為1 厘米, 等等。我們可以定義許多我們想要的簡單頁面并且賦給他們不同的名字,這些名字我們會在后面飲用這些頁面的時候用到。
  現在我們已經定義了頁面隊列術語和大小與它們將來看上去模樣的對應,進而我們需要定義實際的目錄持有者。下面是我們使用 標記的位置:
  
  注重在定義頁面順序的時候,我們引用到了簡單的頁面治理者, 之所以稱為簡單, 是因為我們在前面已經定義了。這意味著我們的內容將被簡單頁面治理者限定在一個頁面之內。 實際的內容被放在 元素中。在元素中的 元素,開始一個段落并定義這個段落的每個屬性。就此出來說我們設開頭文字"Krusty the Clown,"的字體為sans serif 字體, 背景色為藍色,文字排序方式為居中。簡單的, 對于下一個塊,我們設定字體大小為12 磅。文字排序方式根據具體情況而定。
  
  font-family="sans-serif"
  line-height="24pt"
  space-after.optimum="15pt"
  background-color="blue"
  color="white"
  text-align="center"
  padding-top="3pt">
  Krusty the Clown
  
  font-family="sans-serif"
  line-height="15pt"
  space-after.optimum="3pt"
  text-align="justify">
  這個備忘錄解釋了為什末Krusty the Clown 是我們做好的客戶。我們需要從現在開始關心他的需求,從而確保他的寵物猴子有足夠的香蕉可以吃。
  
  最后, 關閉所有打開的標記并且保存為文件krusty.fo,這個文件存放在FOP根目錄下。
  現在是看FOP運作的時候了。在FOP的根目錄下,敲入如下的命令:
  fop krusty.fo krusty.pdf
  
  FOP 將會運行并且在相同的目錄下將我們的krusty.fo 文件轉化為一個krusty.pdf 文檔。通過雙擊打開文件,檢查最終的輸出是否真的符合我們的要求。 對FO 文件進行一點改變,然后看看在輸出中有什末影響。 從改變內容中的文字開始,繼而試著改變風格,邊界, 顏色, 字體, 等等, 然后看所有的變化是怎樣的。
  XSL + XML
  通過運行簡單的例子, 你將會注重到手工的產生一個FO文檔是很難的。直接的修改和改變FO文件實在是令人討厭的,我們正在失去內容獨立性的優越性。因此通常地, 你將會換用一個XSLT樣式表來把你的XML數據轉化成為一篇XSL-FO 文件。你不需要在外部或者為這個轉換明確地做什末事情來轉換到FOP。你可以為FOP指定樣式表和XML文件,這樣FOP就可以自己進行轉化了。讓我們看看下面的例子,它會告訴我們這些是怎樣實現的。
  我們將從前面的例子中把數據提取出來放到一個XML 文件 中。因此我們的XML 數據文件看書去就會使這個樣子的:
  
  Krusty the Clown
  
  這個備忘錄解釋了為什末Krusty the Clown 是我們做好的客戶。我們需要從現在開始關心他的需求,從而確保他的寵物猴子有足夠的香蕉可以吃。
  
  把這個文件保存在FOP的根目錄下。
  我們現在需要生成一個樣式表,然后用它來轉化這個數據文件為FO文件。要想察看最后的結果,可以下載最后的XSL 文件 (這個文件也在FOP.zip 例子文件中)。
  
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fo="http://www.w3.org/1999/XSL/Format">
  像期望的那樣, XSL文檔的開頭是XML聲明, 緊跟著是命名空間的聲明。
  
  假如你以前曾經用過XSLT, 你會注重到現在我們試圖做的是對我們的XML中的標記進行匹配,替換并使用它們來轉化為另一個XML文件,也就是我們的FO文件。因此上面的文本行尋找和匹配根 標記并使用它后面的內容來替換它。這個內容, 下面是它的概要, 基本來說,它是我們簡單布局治理者的定義,正如我們上面對FO文件所描述的那樣。
  http://www.w3.org/1999/XSL/Format">
  
  page-height="29.7cm"
  page-width="21cm"
  margin-top="1cm"
  margin-bottom="2cm"
  margin-left="2.5cm"
  margin-right="2.5cm">
  
  用實際的格式化信息替換數據標記從而形成我們的XSL 文件。
  
  font-family="sans-serif"
  line-height="24pt"
  space-after.optimum="15pt"
  background-color="blue"
  color="white"
  text-align="center"
  padding-top="3pt">
  
  font-family="sans-serif"
  line-height="15pt"
  space-after.optimum="3pt"
  text-align="justify">
  
  正如你所看到的, 在FO標記術語中的模板匹配項被相應的格式化信息替換了。樣式表包括樣式表的結束標記。把這個文件保存為krusty.xsl文件,并存放在 FOP根目錄下。
  下面通過運行來看看我們努力的結果, 在FOP的根目錄下輸入下面的命令行:
  fop -xml krusty.xml -xsl krusty.xsl -pdf krusty.pdf
  因而, 你正在指定輸入的XSL 和 XML

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 名山县| 施秉县| 平泉县| 衡东县| 菏泽市| 桃园市| 六枝特区| 晋中市| 抚州市| 景洪市| 阜新| 花莲市| 宽甸| 江永县| 建德市| SHOW| 竹北市| 安乡县| 灯塔市| 松潘县| 新民市| 重庆市| 天台县| 南郑县| 渭源县| 乌兰浩特市| 育儿| 蚌埠市| 三亚市| 河西区| 淮北市| 清苑县| 青龙| 黄龙县| 富民县| 通河县| 腾冲县| 宜黄县| 常德市| 历史| 敖汉旗|