PDF 馬達啓動(iText in action翻譯第2章第1節)(2)

 
頁面顏色
如果你使用一個Rectangle作爲PageSize的參數,你也可以改變這個頁面的背景顏色
在接下來的例子裏面,你可以調用RectanglesetBackgroundColor()方法來將背景改成淺藍色:
/* chapter02/HelloWorldBlue.java */
Rectangle pagesize 
= new Rectangle(612792);
pagesize.setBackgroundColor(
new Color(0x640x950xed));
Document document 
= new Document(pagesize);
 
 
在這個例子裏面,你使用的是java.awt.Color這個顏色是用RGB的方式來設置的如果你習慣於使用CMYK的顏色來設置你可以使用com.lowagie.text.pdf.ExtendedColor對象。你可以在附錄A的第8節瞭解iText的類結構,在11章你可以閱讀有關顏色的內容, iTextAPI包含了第3種的Document對象的構建函數,不僅包含了一個Rectangle, 4Float的參數,我們在這裏不再詳述了。
頁邊距
在例子的第4步,我們讓Document對象增加了一個段落:Paragraph,這個段落包含一段文字:hello world,但是,iText怎麼知道把這個文字放在頁面的那個地方呢?這個答案相當簡單:當我們增加段落,短語或者區塊到Document對象的時候,iText設定相同的上下左右空間,這個就是頁邊距,你之前創建的“Hello World”例子裏面,iText使用默認的頁邊距,半英寸,讓我們來改變這個數字:
/* chapter02/HelloWorldMargins.java */
Document document 
= new Document(PageSize.A5, 3672108180);

PDF文檔的左邊距是36PT,右邊距是72PT上邊距是108PT,下邊距是180PT

你也可以這樣設置奇偶頁面邊距的對稱性:
/* chapter02/HelloWorldMirroredMargins.java */
document.setMarginMirroring(
true);
在這個例子裏面,所有的奇數頁面的左邊距是36PT右邊距是72pt,而偶數頁面,剛好相反。
2.1.2獲取一個 DocWriter 實例
一旦你獲取了一個Document對象,你就得決定將這個文件寫到一個文件裏面,還是內存,還是一個Java Servlet得輸出流。你也要決定你是生成PDF格式還是其他得HTML或者RTF格式.
2步裏面我們做了兩件事情:
 
它告訴DocWriter 那個流是用來寫入和生成文件的.
它和一個DocWriter的實例協作在本書裏面,我們專注於PdfWriter 實例,因爲我們的興趣點在於創建PDF文件,但是你要知道,你也可以創建一個RtfWriter2實例或者HtmlWriter實例來生成RTFHTML
 
這些Writers對象決定了你將要寫入Document的內容的最後文件格式:PDF, HTML或者RTF.
這些類的圖例可以從附錄AA.1章獲取,裏面展示了他們之間的關係,在該頁的左上部分,你可以看到Document對象有一個ListenersArrayList屬性,這些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"));
 
你使用PDF, RTF, HTML的格式的Writer對象,所以你可以獲得3個不同格式的文件。但是注意,不是所有的內容都可以添加到這三種格式的。
 
選擇一個輸出流
當你向文檔裏面增加內容的時候,實際上是把一些PDF, RTF, HTML語法寫入到輸出流裏面,到目前爲止,你用的是java.io.FileOutputStream.,本書採用的例子之所以使用這個流,是因爲這樣你可以嘗試PDF的操作,而又不用安裝一些額外的軟件,如:web服務器或者J2EE容器等等。
在實際的應用程序裏面,你可能會把PDF的字節流寫入到一個瀏覽器(ServletOutputStream)或者內存裏面(ByteArrayOutputStream),iText可以寫入字節到任何的java.io.OutputStream和他的子類裏面。如果你想把PDF寫入到System.out然後看看PDF會是什麼樣子,你可以這樣做:
/* chapter02/HelloWorldSystemOut.java */
PdfWriter.getInstance(document, System.out);
如果你去嘗試這個例子,你可以識別出“Hello World”,但是你也會發現,對象用object來表示,還有一些奇怪的2進紙代碼。在18章,我們將可以看到iTextPDF的內幕,你將可以看到PDF的文件構成,這些是爲想深入理解PDF格式的人準備的,你要是感興趣如何在web應用裏面創建一個PDF你可以使用javax.servlet.ServletOutputStream來作爲PDFWriter的參數。java.io.OutputStream你也可以用response.getOutputStream()來作爲創建PdfWriter的第2個參數,但是這樣可以在一些瀏覽器裏面運行,但是很不幸,有些是不行的。17章將告訴你如何規避在web應用中使用iText的缺陷,這些缺陷是瀏覽器相關的,不是和iText相關的。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章