java itext 页边距_iText的用法
一直以來想總結下項目中用到的itext,無意中發現了這篇文章,總結的比較好,所以
一、前言
在企業的信息系統中,報表處理一直占比較重要的作用,本文將介紹一種生成PDF報表的Java組件--iText。通過在服務器端使用Jsp或JavaBean生成PDF報表,客戶端采用超級連接顯示或下載得到生成的報表,這樣就很好的解決了B/S系統的報表處理問題。
二、iText簡介
iText是著名的開放源碼的站點sourceforge一個項目,是用于生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉化為PDF文件。
iText的安裝非常方便,在http://www.lowagie.com/iText/download.html?-?download網站上下載iText.jar文件后,只需要在系統的CLASSPATH中加入iText.jar的路徑,在程序中就可以使用iText類庫了。
三、建立第一個PDF文檔
用iText生成PDF文檔需要5個步驟:
①建立com.lowagie.text.Document對象的實例。
Document?document?=?new?Document();
②建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁盤中。
PDFWriter.getInstance(document,?new?FileOutputStream("Helloworld.PDF"));
③打開文檔。
document.open();
④向文檔中添加內容。
document.add(new?Paragraph("Hello?World"));
⑤關閉文檔。
document.close();
通過上面的5個步驟,就能產生一個Helloworld.PDF的文件,文件內容為"Hello?World"。
建立com.lowagie.text.Document對象的實例
com.lowagie.text.Document對象的構建函數有三個,分別是:
public?Document();
public?Document(Rectangle?pageSize);
public?Document(Rectangle?pageSize,
int?marginLeft,
int?marginRight,
int?marginTop,
int?marginBottom);
構建函數的參數pageSize是文檔頁面的大小,對于第一個構建函數,頁面的大小為A4,同Document(PageSize.A4)的效果一樣;對于第三個構建函數,參數marginLeft、marginRight、marginTop、marginBottom分別為左、右、上、下的頁邊距。
通過參數pageSize可以設定頁面大小、面背景色、以及頁面橫向/縱向等屬性。iText定義了A0-A10、AL、LETTER、HALFLETTER、_11x17、LEDGER、NOTE、B0-B5、ARCH_A-ARCH_E、FLSA和FLSE等紙張類型,也可以通過Rectangle?pageSize?=?new?Rectangle(144,?720);自定義紙張。通過Rectangle方法rotate()可以將頁面設置成橫向。
書寫器(Writer)對象
一旦文檔(document)對象建立好之后,需要建立一個或多個書寫器(Writer)對象與之關聯。通過書寫器(Writer)對象可以將具體文檔存盤成需要的格式,如com.lowagie.text.PDF.PDFWriter可以將文檔存成PDF文件,com.lowagie.text.html.HtmlWriter可以將文檔存成html文件。
設定文檔屬性
在文檔打開之前,可以設定文檔的標題、主題、作者、關鍵字、裝訂方式、創建者、生產者、創建日期等屬性,調用的方法分別是:
public?boolean?addTitle(String?title)
public?boolean?addSubject(String?subject)
public?boolean?addKeywords(String?keywords)
public?boolean?addAuthor(String?author)
public?boolean?addCreator(String?creator)
public?boolean?addProducer()
public?boolean?addCreationDate()
public?boolean?addHeader(String?name,?String?content)
其中方法addHeader對于PDF文檔無效,addHeader僅對html文檔有效,用于添加文檔的頭信息。
當新的頁面產生之前,可以設定頁面的大小、書簽、腳注(HeaderFooter)等信息,調用的方法是:
public?boolean?setPageSize(Rectangle?pageSize)
public?boolean?add(Watermark?watermark)
public?void?removeWatermark()
public?void?setHeader(HeaderFooter?header)
public?void?resetHeader()
public?void?setFooter(HeaderFooter?footer)
public?void?resetFooter()
public?void?resetPageCount()
public?void?setPageCount(int?pageN)
如果要設定第一頁的頁面屬性,這些方法必須在文檔打開之前調用。
對于PDF文檔,iText還提供了文檔的顯示屬性,通過調用書寫器的setViewerPreferences方法可以控制文檔打開時Acrobat?Reader的顯示屬性,如是否單頁顯示、是否全屏顯示、是否隱藏狀態條等屬性。
另外,iText也提供了對PDF文件的安全保護,通過書寫器(Writer)的setEncryption方法,可以設定文檔的用戶口令、只讀、可打印等屬性。
添加文檔內容
所有向文檔添加的內容都是以對象為單位的,如Phrase、Paragraph、Table、Graphic對象等。比較常用的是段落(Paragraph)對象,用于向文檔中添加一段文字。
四、文本處理
iText中用文本塊(Chunk)、短語(Phrase)和段落(paragraph)處理文本。
文本塊(Chunk)是處理文本的最小單位,有一串帶格式(包括字體、顏色、大小)的字符串組成。如以下代碼就是產生一個字體為HELVETICA、大小為10、帶下劃線的字符串:
Chunk?chunk1?=?new?Chunk("This?text?is?underlined",?FontFactory.getFont(FontFactory.HELVETICA,?12,?Font.UNDERLINE));
短語(Phrase)由一個或多個文本塊(Chunk)組成,短語(Phrase)也可以設定字體,但對于其中以設定過字體的文本塊(Chunk)無效。通過短語(Phrase)成員函數add可以將一個文本塊(Chunk)加到短語(Phrase)中,如:phrase6.add(chunk);
段落(paragraph)由一個或多個文本塊(Chunk)或短語(Phrase)組成,相當于WORD文檔中的段落概念,同樣可以設定段落的字體大小、顏色等屬性。另外也可以設定段落的首行縮進、對齊方式(左對齊、右對齊、居中對齊)。通過函數setAlignment可以設定段落的對齊方式,setAlignment的參數1為居中對齊、2為右對齊、3為左對齊,默認為左對齊。
五、表格處理
iText中處理表格的類為:com.lowagie.text.Table和com.lowagie.text.PDF.PDFPTable,對于比較簡單的表格處理可以用com.lowagie.text.Table,但是如果要處理復雜的表格,這就需要com.lowagie.text.PDF.PDFPTable進行處理。這里就類com.lowagie.text.Table進行說明。
類com.lowagie.text.Table的構造函數有三個:
①Table?(int?columns)
②Table(int?columns,?int?rows)
③Table(Properties?attributes)
參數columns、rows、attributes分別為表格的列數、行數、表格屬性。創建表格時必須指定表格的列數,而對于行數可以不用指定。
建立表格之后,可以設定表格的屬性,如:邊框寬度、邊框顏色、襯距(padding?space即單元格之間的間距)大小等屬性。下面通過一個簡單的例子說明如何使用表格,代碼如下:
1:Table?table?=?new?Table(3);
2:table.setBorderWidth(1);
3:table.setBorderColor(new?Color(0,?0,?255));
4:table.setPadding(5);
5:table.setSpacing(5);
6:Cell?cell?=?new?Cell("header");
7:cell.setHeader(true);
8:cell.setColspan(3);
9:table.addCell(cell);
10:table.endHeaders();
11:cell?=?new?Cell("example?cell?with?colspan?1?and?rowspan?2");
12:cell.setRowspan(2);
13:cell.setBorderColor(new?Color(255,?0,?0));
14:table.addCell(cell);
15:table.addCell("1.1");
16:table.addCell("2.1");
17:table.addCell("1.2");
18:table.addCell("2.2");
19:table.addCell("cell?test1");
20:cell?=?new?Cell("big?cell");
21:cell.setRowspan(2);
22:cell.setColspan(2);
23:table.addCell(cell);
24:table.addCell("cell?test2");
運行結果如下:
header
example?cell?with?colspan?1?and?rowspan?2???1.1?2.1
1.2?2.2
cell?test1?big?cell
cell?test2
代碼1-5行用于新建一個表格,如代碼所示,建立了一個列數為3的表格,并將邊框寬度設為1,顏色為藍色,襯距為5。
代碼6-10行用于設定表格的表頭,第7行cell.setHeader(true);是將該單元格作為表頭信息顯示;第8行cell.setColspan(3);指定了該單元格占3列;為表格添加表頭信息時,要注意的是一旦表頭信息添加完了之后,必須調用endHeaders()方法,如第10行,否則當表格跨頁后,表頭信息不會再顯示。
代碼11-14行是向表格中添加一個寬度占一列,長度占二行的單元格。
往表格中添加單元格(cell)時,按自左向右、從上而下的次序添加。如執行完11行代碼后,表格的右下方出現2行2列的空白,這是再往表格添加單元格時,先填滿這個空白,然后再另起一行,15-24行代碼說明了這種添加順序。
六、圖像處理
iText中處理表格的類為com.lowagie.text.Image,目前iText支持的圖像格式有:GIF,?Jpeg,?PNG,?wmf等格式,對于不同的圖像格式,iText用同樣的構造函數自動識別圖像格式。通過下面的代碼分別獲得gif、jpg、png圖像的實例。
Image?gif?=?Image.getInstance("vonnegut.gif");
Image?jpeg?=?Image.getInstance("myKids.jpg");
Image?png?=?Image.getInstance("hitchcock.png");
圖像的位置
圖像的位置主要是指圖像在文檔中的對齊方式、圖像和文本的位置關系。IText中通過函數public?void?setAlignment(int?alignment)進行處理,參數alignment為Image.RIGHT、Image.MIDDLE、Image.LEFT分別指右對齊、居中、左對齊;當參數alignment為Image.TEXTWRAP、Image.UNDERLYING分別指文字繞圖形顯示、圖形作為文字的背景顯示。這兩種參數可以結合以達到預期的效果,如setAlignment(Image.RIGHT|Image.TEXTWRAP)顯示的效果為圖像右對齊,文字圍繞圖像顯示。
圖像的尺寸和旋轉
如果圖像在文檔中不按原尺寸顯示,可以通過下面的函數進行設定:
public?void?scaleAbsolute(int?newWidth,?int?newHeight)
public?void?scalePercent(int?percent)
public?void?scalePercent(int?percentX,?int?percentY)
函數public?void?scaleAbsolute(int?newWidth,?int?newHeight)直接設定顯示尺寸;函數public?void?scalePercent(int?percent)設定顯示比例,如scalePercent(50)表示顯示的大小為原尺寸的50%;而函數scalePercent(int?percentX,?int?percentY)則圖像高寬的顯示比例。
如果圖像需要旋轉一定角度之后在文檔中顯示,可以通過函數public?void?setRotation(double?r)設定,參數r為弧度,如果旋轉角度為30度,則參數r=?Math.PI?/?6。
七、中文處理
默認的iText字體設置不支持中文字體,需要下載遠東字體包iTextAsian.jar,否則不能往PDF文檔中輸出中文字體。通過下面的代碼就可以在文檔中使用中文了:
BaseFont?bfChinese?=?BaseFont.createFont("STSong-Light",?"UniGB-UCS2-H",?BaseFont.NOT_EMBEDDED);
com.lowagie.text.Font?FontChinese?=?new?com.lowagie.text.Font(bfChinese,?12,?com.lowagie.text.Font.NORMAL);
Paragraph?pragraph=new?Paragraph("你好",?FontChinese);
八、后計
iText還有很多高級的功能,這里就不一一介紹了,具體開發時可參考發布的文檔??偟膩碚f,iText是一套java環境下不錯的制作PDF的組件。因為iText支持jsp/javabean下的開發,這使得B/S應用中的報表問題能得到很好的解決。由于iText畢竟不是專門為制作報表設計,所有報表中的內容、格式都需要通過寫代碼實現,相對于那些專業的支持可視化設計的報表軟件來說,編程的工作量就有一定程度的增加。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
總結
以上是生活随笔為你收集整理的java itext 页边距_iText的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 脚本入门教程
- 下一篇: VLC视频帧处理