http://gohands.javaeye.com/blog/160534
(注:一直以來想總結下項目中用到的itext,無意中發現了這篇<wbr></wbr>文章,總結的比較好,所以轉載http://www.china1024.com<wbr></wbr>/bytesoft/info_show.jsp?news<wbr></wbr>_id=968 ) 在企業的信息系統中,報表處理一直佔比較重要的作用<wbr></wbr>,本文將介紹一種生成PDF報表的Java組件--iText<wbr></wbr>。通過在服務器端使用Jsp或 JavaBean生成PDF報表,客戶端採用超級連接顯示或下載得<wbr></wbr>到生成的報表,這樣就很好的解決了B/S系統的報表處理問題。 二、iText簡介 iText是著名的開放源碼的站點sourceforge一個項目<wbr></wbr>,是用於生成PDF文檔的一個java類庫。通過iText不僅可<wbr></wbr>以生成PDF或rtf的文檔,而且可以將XML、Html文件轉化<wbr></wbr>爲PDF文件。 iText的安裝非常方便,在http://www.lowagie.com/iText<wbr></wbr>/download.html - download 網站上下載iText.jar文件後,只需要在系統的CLASSPATH中加入iText.jar的路徑,在程序中就可以使用iText類庫了。 三、建立第一個PDF文檔 用iText生成PDF文檔需要5個步驟: ①建立com.lowagie.text.Document對象的實例。
③打開文檔。
④向文檔中添加內容。
⑤關閉文檔。
通過上面的5個步驟,就能產生一個Helloworld.PDF的文件,文件內容爲"Hello World"。 建立com.lowagie.text.Document對象的實<wbr></wbr>例 com.lowagie.text.Document對象的構建函<wbr></wbr>數有三個,分別是:
構建函數的參數pageSize是文檔頁面的大小<wbr></wbr>,對於第一個構建函數,頁面的大小爲A4,同Document(PageSize.A4)的效 果一樣;對於第三個構建函數,參數marginLeft<wbr></wbr>、marginRight、marginTop、marginBo<wbr></wbr>ttom分別爲左、右、上、下的 頁邊距。 通過參數pageSize可以設定頁面大小、面背景色<wbr></wbr>、以及頁面橫向/縱向等屬性。iText定義了A0-A10 <script type="text/javascript"><!-- --></script><wbr></wbr>、AL、LETTER、 HALFLETTER、_11x17、LEDGER、NOTE<wbr></wbr>、B0-B5、ARCH_A-ARCH_E、FLSA 和FLSE等紙張類型,也可以通過Rectangle pageSize = new Rectangle(144, 720);自定義紙張。通過Rectangle方法rotate<wbr></wbr>()可以將頁面設置成橫向。 書寫器(Writer)對象 一旦文檔(document)對象建立好之後,需要建立一個或多個<wbr></wbr>書寫器(Writer)對象與之關聯。通過書寫器(Writer<wbr></wbr>)對象可以將 具體文檔存盤成需要的格式,如com.lowagie.text.PDF.PDFWriter<wbr></wbr>可以將文檔存成PDF文件, com.lowagie.text.html.HtmlWrite<wbr></wbr>r可以將文檔存成html文件。 設定文檔屬性 在文檔打開之前,可以設定文檔的標題、主題、作者、關鍵字<wbr></wbr>、裝訂方式、創建者、生產者、創建日期等屬性,調用的方法分別是:
其中方法addHeader對於PDF文檔無效,addHeade<wbr></wbr>r僅對html文檔有效,用於添加文檔的頭信息。
如果要設定第一頁的頁面屬性,這些方法必須在文檔打開之前調用。 對於PDF文檔,iText還提供了文檔的顯示屬性<wbr></wbr>,通過調用書寫器的setViewerPreferences方法<wbr></wbr>可以控制文檔打開時Acrobat Reader的顯示屬性,如是否單頁顯示、是否全屏顯示<wbr></wbr>、是否隱藏狀態條等屬性。 另外,iText也提供了對PDF文件的安全保護,通過書寫器<wbr></wbr>(Writer)的setEncryption方法<wbr></wbr>,可以設定文檔的用戶口令、只讀、可打印等屬性。 添加文檔內容 所有向文檔添加的內容都是以對象爲單位的,如Phrase<wbr></wbr>、Paragraph、Table、Graphic對象等<wbr></wbr>。比較常用的是段落(Paragraph)對象,用於向文檔中添加<wbr></wbr>一段文字。 iText中用文本塊(Chunk)、短語(Phrase<wbr></wbr>)和段落(paragraph)處理文本。
Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA <script type="text/javascript"><!-- --></script>, 12, Font.UNDERLINE));
段落(paragraph)由一個或多個文本塊(Chunk<wbr></wbr>)或短語(Phrase)組成,相當於WORD文檔中的段落概念<wbr></wbr>,同樣可以設定段落 的字體大小、顏色等屬性。另外也可以設定段落的首行縮進<wbr></wbr>、對齊方式(左對齊、右對齊、居中對齊)。通過函數setAlig<wbr></wbr>nment可以設定段落的對齊方 式,setAlignment的參數1爲居中對齊、2爲右對齊<wbr></wbr>、3爲左對齊,默認爲左對齊。 五、表格處理 iText中處理表格的類爲:com.lowagie.text.Table和 com.lowagie.text.PDF.PDFPTable,對於比較簡單的表格處理可以用com.lowagie.text<wbr></wbr>.Table,但是如果 要處理複雜的表格,這就需要com.lowagie.text.PDF<wbr></wbr>.PDFPTable進行處理。這裏就類 com.lowagie.text.Table進行說明。 類com.lowagie.text.Table的構造函數有三個<wbr></wbr>: ①Table (int columns) 參數columns、rows、attributes分別爲表格的<wbr></wbr>列數、行數、表格屬性。創建表格時必須指定表格的列數<wbr></wbr>,而對於行數可以不用指定。 建立表格之後,可以設定表格的屬性,如:邊框寬度、邊框顏色<wbr></wbr>、襯距(padding space 即單元格之間的間距)大小等屬性。下面通過一個簡單的例子說明如何<wbr></wbr>使用表格,代碼如下:
代碼6-10行用於設定表格的表頭,第7行cell.setHeader(true);是將該單元格作爲表頭信息顯示;第8行 cell.setColspan(3);指定了該單元格佔3列;爲表格添加表頭信息時<wbr></wbr>,要注意的是一旦表頭信息添加完了之後,必須調用 endHeaders()方法,如第10行,否則當表格跨頁後<wbr></wbr>,表頭信息不會再顯示。 代碼11-14行是向表格中添加一個寬度佔一列,長度佔二行的單元<wbr></wbr>格。 往表格中添加單元格(cell)時,按自左向右、從上而下的次序添<wbr></wbr>加。如執行完11行代碼後,表格的右下方出現2行2列的空白<wbr></wbr>,這是再往表格添加單元格時,先填滿這個空白,然後再另起一行<wbr></wbr>,15-24行代碼說明了這種添加順序。 六、圖像處理 iText中處理表格的類爲com.lowagie.text<wbr></wbr>.Image,目前iText支持的圖像格式有:GIF, Jpeg, PNG, wmf等格式,對於不同的圖像格式,iText用同樣的構造函數自<wbr></wbr>動識別圖像格式。通過下面的代碼分別獲得gif、jpg<wbr></wbr>、png圖像的實例。
圖像的位置主要是指圖像在文檔中的對齊方式、圖像和文本的位置關係<wbr></wbr>。IText中通過函數public void setAlignment(int alignment)進行處理,參數alignment爲Image.RIGHT、Image.MIDDLE、Image.LEFT分別指右對齊、居中、 左對齊;當參數alignment爲Image.TEXTWRAP、Image.UNDERLYING分別指文字繞圖形顯示、圖形作爲文字的背景顯示。這 兩種參數可以結合以達到預期的效果,如setAlignment( Image.RIGHT|Image.TEXTWRAP)顯示的效果爲圖像右對齊,文字 圍繞圖像顯示。 圖像的尺寸和旋轉 如果圖像在文檔中不按原尺寸顯示,可以通過下面的函數進行設定:
如果圖像需要旋轉一定角度之後在文檔中顯示,可以通過函數publ<wbr></wbr>ic void setRotation(double r)設定,參數r爲弧度,如果旋轉角度爲30度,則參數r= Math.PI / 6。 七、中文處理 默認的iText字體設置不支持中文字體,需要下載遠東字體包iTextAsian.jar,否則不能往PDF文檔中輸出中文字體。通過下面的代碼就可以在文檔<wbr></wbr>中使用中文了:
iText還有很多高級的功能,這裏就不一一介紹了<wbr></wbr>,具體開發時可參考發佈的文檔。總的來說,iText是一套jav<wbr></wbr>a環境下不錯的製作PDF 的組件。因爲iText支持jsp/javabean下的開發<wbr></wbr>,這使得B/S應用中的報表問題能得到很好的解決<wbr></wbr>。由於iText畢竟不是專門爲製作報表設 計,所有報表中的內容、格式都需要通過寫代碼實現<wbr></wbr>,相對於那些專業的支持可視化設計的報表軟件來說<wbr></wbr>,編程的工作量就有一定程度的增加。 |