頁面顏色
如果你使用一個Rectangle作爲PageSize的參數,你也可以改變這個頁面的背景顏色
在接下來的例子裏面,你可以調用Rectangle的setBackgroundColor()方法來將背景改成淺藍色:
/* chapter02/HelloWorldBlue.java */
Rectangle pagesize = new Rectangle(612, 792);
pagesize.setBackgroundColor(new Color(0x64, 0x95, 0xed));
Document document = new Document(pagesize);
Rectangle pagesize = new Rectangle(612, 792);
pagesize.setBackgroundColor(new Color(0x64, 0x95, 0xed));
Document document = new Document(pagesize);
在這個例子裏面,你使用的是java.awt.Color,這個顏色是用RGB的方式來設置的,如果你習慣於使用CMYK的顏色來設置,你可以使用com.lowagie.text.pdf.ExtendedColor對象。你可以在附錄A的第8節瞭解iText的類結構,在11章你可以閱讀有關顏色的內容, iText的API包含了第3種的Document對象的構建函數,不僅包含了一個Rectangle, 是4個Float的參數,我們在這裏不再詳述了。
頁邊距
在例子的第4步,我們讓Document對象增加了一個段落:Paragraph,這個段落包含一段文字:hello world,但是,iText怎麼知道把這個文字放在頁面的那個地方呢?這個答案相當簡單:當我們增加段落,短語或者區塊到Document對象的時候,iText設定相同的上下左右空間,這個就是頁邊距,你之前創建的“Hello World”例子裏面,iText使用默認的頁邊距,半英寸,讓我們來改變這個數字:
/* chapter02/HelloWorldMargins.java */
Document document = new Document(PageSize.A5, 36, 72, 108, 180);
Document document = new Document(PageSize.A5, 36, 72, 108, 180);
樣PDF文檔的左邊距是36PT,右邊距是72PT,上邊距是108PT,下邊距是180PT
你也可以這樣設置奇偶頁面邊距的對稱性:
/* chapter02/HelloWorldMirroredMargins.java */
document.setMarginMirroring(true);
document.setMarginMirroring(true);
在這個例子裏面,所有的奇數頁面的左邊距是36PT,右邊距是72pt,而偶數頁面,剛好相反。
2.1.2獲取一個 DocWriter 實例
一旦你獲取了一個Document對象,你就得決定將這個文件寫到一個文件裏面,還是內存,還是一個Java Servlet得輸出流。你也要決定你是生成PDF格式還是其他得HTML或者RTF格式。.
第
第2步裏面我們做了兩件事情:
■ 它告訴DocWriter 那個流是用來寫入和生成文件的.
■ 它和一個DocWriter的實例協作,在本書裏面,我們專注於PdfWriter 實例,因爲我們的興趣點在於創建PDF文件,但是你要知道,你也可以創建一個RtfWriter2實例或者HtmlWriter實例來生成RTF和HTML。
這些Writers對象決定了你將要寫入Document的內容的最後文件格式:PDF, HTML或者RTF.
這些類的圖例可以從附錄A的A.1章獲取,裏面展示了他們之間的關係,在該頁的左上部分,你可以看到Document對象有一個Listeners的ArrayList屬性,這些Listener擴展了DocListener接口,作爲一個實例,如果你想這些Document對象增加內容,它將把這些方法轉交給Listener,而這個Listener的接口都是由DocWriter的子類來實現的。
你可以從這些類圖上發現,這些類的構造函數是protected的,你只能通過getInstance()方法來獲取,這個getInstance()方法創建了一個writer對象給Document,同時增加了listener接口給Document.例如PdfDocument 或RtfDocument 對象.
創建內容相同格式不同的文檔
我們在代碼中加入一下語句,來看看會發生什麼:
/* chapter02/HelloWorldMultiple.java */
PdfWriter.getInstance(document,
new FileOutputStream("HelloWorldMultiple.pdf"));
RtfWriter2.getInstance(document,
new FileOutputStream("HelloWorldMultiple.rtf"));
HtmlWriter.getInstance(document,
new FileOutputStream("HelloWorldMultiple.htm"));
PdfWriter.getInstance(document,
new FileOutputStream("HelloWorldMultiple.pdf"));
RtfWriter2.getInstance(document,
new FileOutputStream("HelloWorldMultiple.rtf"));
HtmlWriter.getInstance(document,
new FileOutputStream("HelloWorldMultiple.htm"));
你使用PDF, RTF, 和HTML的格式的Writer對象,所以你可以獲得3個不同格式的文件。但是注意,不是所有的內容都可以添加到這三種格式的。
選擇一個輸出流
當你向文檔裏面增加內容的時候,實際上是把一些PDF, RTF, 或HTML語法寫入到輸出流裏面,到目前爲止,你用的是java.io.FileOutputStream.,本書採用的例子之所以使用這個流,是因爲這樣你可以嘗試PDF的操作,而又不用安裝一些額外的軟件,如:web服務器或者J2EE容器等等。
在實際的應用程序裏面,你可能會把PDF的字節流寫入到一個瀏覽器(Servlet-OutputStream)或者內存裏面(ByteArrayOutputStream),iText可以寫入字節到任何的java.io.OutputStream和他的子類裏面。如果你想把PDF寫入到System.out,然後看看PDF會是什麼樣子,你可以這樣做:
/* chapter02/HelloWorldSystemOut.java */
PdfWriter.getInstance(document, System.out);
PdfWriter.getInstance(document, System.out);
如果你去嘗試這個例子,你可以識別出“Hello World”,但是你也會發現,對象用object來表示,還有一些奇怪的2進紙代碼。在18章,我們將可以看到iText和PDF的內幕,你將可以看到PDF的文件構成,這些是爲想深入理解PDF格式的人準備的,你要是感興趣如何在web應用裏面創建一個PDF你可以使用javax.servlet.ServletOutputStream來作爲PDFWriter的參數。java.io.OutputStream,你也可以用response.getOutputStream()來作爲創建PdfWriter的第2個參數,但是這樣可以在一些瀏覽器裏面運行,但是很不幸,有些是不行的。17章將告訴你如何規避在web應用中使用iText的缺陷,這些缺陷是瀏覽器相關的,不是和iText相關的。