iText中文幫助文檔_第1頁
iText中文幫助文檔_第2頁
iText中文幫助文檔_第3頁
iText中文幫助文檔_第4頁
iText中文幫助文檔_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余28頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第一部分 iText 的簡(jiǎn)單應(yīng)用第一章創(chuàng)建一個(gè) Document利用 iText 五步創(chuàng)建一個(gè) PDFdt 件:helloword。第一步,創(chuàng)建一個(gè) iTextSharp.text.Document 對(duì)象的實(shí)例:Documentdocument=newDocument。;第二步,為該 Document 創(chuàng)建一個(gè) Writer 實(shí)例:PdfWriter.getInstance(document,newFileStream(Chap0101.pdf,FileMode.Create);第三步,打開當(dāng)前 Documentdocument.Open();第四步,為當(dāng)前 Document 添力口內(nèi)容:do

2、cument.Add(newParagraph(HelloWorld);第五步,關(guān)閉 Documentdocument.Close();完整的代碼見示例代碼 0101。在例中,不難看出,制作一個(gè) PDFi 件是非常簡(jiǎn)單的。注:如果你將例中“document.Add(newParagraph(HelloWorld);中的字符串“HelloWord換成中文,如“這是我的第一個(gè) PDFi 件”,產(chǎn)生的結(jié)果一定讓你大失所望,因?yàn)樯傻?PDFi 件中并沒有將中文顯示出來,不要擔(dān)心,在第 9 章中要專門講解字體問題,中文顯示也就迎刃而解了,如果不能正確顯示中文,也就沒有必要翻譯本文了。下面對(duì)這幾步做詳細(xì)

3、介紹。第一步創(chuàng)建一個(gè) Document 實(shí)例:iTextSharp.text.Document-object 共有三個(gè)構(gòu)造函數(shù):publicDocument();publicDocument(RectanglepageSize);publicDocument(RectanglepageSize,intmarginLeft,intmarginRight,intmarginTop,intmarginBottom);第一個(gè)構(gòu)造函數(shù)以 A4 頁面作為參數(shù)調(diào)用第二個(gè)構(gòu)造函數(shù),第二個(gè)構(gòu)造函數(shù)以每邊 36 磅頁邊距為參數(shù)調(diào)用第三個(gè)構(gòu)造函數(shù)頁面尺寸:你可以通過指定的顏色和大小創(chuàng)建你自己的頁面,示例代碼 010

4、2 創(chuàng)建一個(gè)細(xì)長(zhǎng)的淺黃色背景的頁面:RectanglepageSize=newRectangle(144,720);pageSize.BackgroundC010r=newColor(0 xFF,0 xFF,0 xDE);Documentdocument=newDocument(pageSize);通常,你不必創(chuàng)建這樣的頁面,而可以從下面頁面尺寸中選擇:A0-A10,LEGAL,LETTER,HALFLETTER,_11x17,LEDGER,NOTE,B0-B5,ARCH_A-ARCH_E,FLSAFLSE大多數(shù)情況下使用縱向頁面,如果希望使用橫向頁面,你只須使用 rotate()函數(shù):Doc

5、umentdocument=newDocument(PageSize.A4.rotate();詳細(xì)代碼見示例代碼 0103。頁邊距:當(dāng)創(chuàng)建一個(gè)文件時(shí),你還可以定義上、下、左、右頁邊距:Documentdocument=newDocument(PageSize.A5,36,72,108,180);在示例代碼 0104 中你可以看到該文檔有一個(gè) 0.5 英寸的左邊距和 1 英寸的右邊距,上邊距為 1.5 英寸,下邊距為 2.5 英寸。說明:當(dāng)創(chuàng)建一個(gè)矩形或設(shè)置邊距時(shí),你可能希望知道該用什么度量單位:厘米、英寸或象素,事實(shí)上,默認(rèn)的度量系統(tǒng)以排版單位磅為基礎(chǔ)得出其他單位的近似值,如 1英寸=72 磅

6、,如果你想在 A4 頁面的 PDF 中創(chuàng)建一個(gè)矩形,你需要計(jì)算以下數(shù)據(jù):21 厘米/2.54=8.2677 英寸8.2677 英寸*72=595 磅29.7 厘米/2.54=11.6929 英寸11.6929 英寸*72=842 磅默認(rèn)邊距為 36 磅即半英寸。如果你修改了頁面尺寸,僅僅影響到下一頁,如果你修改了頁邊距,則影響到全部,故慎用。關(guān)于頁面的初始值,請(qǐng)參考第三步。第二步創(chuàng)建 Writer 實(shí)例一旦創(chuàng)建了 document,我們可以創(chuàng)建該文檔的多個(gè) Writer的實(shí)例, 所有這些 Writer實(shí)例均繼承自抽象類“iTextSharp.text.DocWriter”。同時(shí)還有另外一種情況

7、,你可以用 iTextSharp.text.pdf.PdfWhter 產(chǎn)生文檔 PDFt 件,如果你想創(chuàng)建一個(gè) TeX 文檔,你可以使用iTextSharp.text.TeX.TeXWriter 包。Writer 類的構(gòu)造函數(shù)是私有的,你只能通過下面的方法創(chuàng)建一個(gè)實(shí)例:publicstaticxxxWritergetInstance(Documentdocument,Streamos);(xxx 是 Pdf 或 Xml)你可以通過下面的方法創(chuàng)建一個(gè)實(shí)例:PdfWriterwriter=PdfWriter.getInstance(document,newFileStream(Chap01xx.p

8、df);但是你幾乎永遠(yuǎn)不會(huì)用到 Writer 實(shí)例(除非你想創(chuàng)建高級(jí) PDF 或者希望用一些非常特殊的函數(shù),如 ViewerPreferences 或 Encryption)。所以通過下面的辦法得到實(shí)例已經(jīng)足夠了:PdfWriter.getInstance(document,newFileStream(Chap01xx.pdf);在第一步中創(chuàng)建一個(gè)文檔時(shí),第一個(gè)參數(shù)意義不大,第二個(gè)參數(shù)可以是任何一種流,到目前為止我們一直使用 System.IO.FileStream 將 Document 寫入文件中,示例代碼 0105 用到了 System.IO.MemoryStream(這不是一個(gè)獨(dú)立的例子

9、,你必須在ServletEngine 中測(cè)試這些代碼。第三步打開 Document摘要在你寫入任何實(shí)際數(shù)據(jù)之前,你可能希望通過以下幾種方法寫入一些關(guān)于本文檔的摘要:publicbooleanaddTitle(Stringtitle)publicbooleanaddSubject(Stringsubject)publicbooleanaddKeywords(Stringkeywords)publicbooleanaddAuthor(Stringauthor)publicbooleanaddCreator(Stringcreator)publicbooleanaddProducer()public

10、booleanaddCreationDate()publicbooleanaddHeader(Stringname,Stringcontent)你可以選擇自己的標(biāo)題、主題、關(guān)鍵字、作者、創(chuàng)建程序,但以下產(chǎn)品信息將始終被添加:iTextSharp(或者 iTextSharp 的引用)和創(chuàng)建時(shí)間(實(shí)際上這兩種方法是自動(dòng)調(diào)用的)。你還可以將自定義的名稱添加為“報(bào)頭信息”,但是這對(duì)于 PdfWriter 沒有任何作用,如果看看實(shí)例代碼 0101 產(chǎn)生的 pdf 文件的“文檔屬性”,我們可以看到僅僅有 PDF 創(chuàng)建程序和產(chǎn)品日期,而示例代碼 0106 的“文檔屬性”框中有更多的信息。安全性高然說明文件大

11、小:頁面大小:信息PDF 加工程序:PDF 版本:路徑:ilext#byGerAjHenson(rO,basedonversion1.4(Acrobat5.x)C:DocumentsandSetting$W.2hi$erl 桌面Chap0106.pdf1.17 字節(jié))8.26X1L69 英寸頁數(shù):快速 web 查看:否僮標(biāo)答的 POF:幫財(cái)|打開 document 前要做的事:你只能在 Open 方法調(diào)用之前添加摘要, 這是 iText 開發(fā)工具提供的一個(gè)選擇。在 HTM 葉,報(bào)頭信息被放在文檔前面報(bào)頭標(biāo)識(shí)中間,調(diào)用 Open 方法將導(dǎo)致報(bào)頭信息寫入流,因而在 Document 被打開后無法更

12、改這些數(shù)據(jù)。PDF 報(bào)頭信息不包括摘要,看起來有類似于:%PDF-1.2該行顯示生成的文檔是一個(gè)版本為 1.2 的 PDF 格式的文件, 在 PDF 中, 摘要保存在 PdfInfo 對(duì)象中,當(dāng)文檔關(guān)閉時(shí)已經(jīng)寫入 PdfWriter 中了,因此,沒有關(guān)于為什么不能修改庫(kù)來滿足任何時(shí)候添加或更改摘要的技術(shù)原因頁面初始化Open 方法在不同的 Witer 中同時(shí)會(huì)產(chǎn)生初始化事件,舉例來說,如果你需要一個(gè)水印或者頁眉頁角對(duì)象出現(xiàn)在文檔第一頁的開始處,你需要在打開文檔前添加這些,同樣的用于設(shè)置該文檔其他頁水印、頁眉、頁角、頁數(shù)和尺寸。當(dāng)調(diào)用下列方法:publicboolsetPageSize(Rect

13、anglepageSize)publicboolAdd(Watermarkwatermark)publicvoidremoveWatermark()settingHeaderpropertypublicvoidresetHeader()settingFooterpropertypublicvoidresetFooter()publicvoidresetPageCount()settingPageCountproperty產(chǎn)生的結(jié)果只能在下一個(gè)新頁中看到(當(dāng)在本頁調(diào)用初始化方法時(shí)),代碼見示例代碼 0107,你必須要準(zhǔn)備一張名為 watermark.jpg 的圖片,如下圖:閱讀器參數(shù):你可以通過

14、下面的辦法為 PDFt 件指定一些閱讀器(如 AdobeReader)參數(shù):publicvoidsetViewerPreferences(intpreferences)在示例代碼 0108 中,指定了下面一些參數(shù):writerA.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);writerB.setViewerPreferences(PdfWriter.HideMenubar|PdfWriter.HideToolbar);writerC.setViewerPreferences(PdfWriter.PageLayoutTwoCol

15、umnLeft|PdfWriter.PageModeFullScreen|PdfWriter.NonFullScreenPageModeUseThumbs正如你所看到的,參數(shù)可以使用以下一些常量:文件被打開時(shí),頁面布局用到下面的其中一個(gè):oPdfWriter.PageLayoutSinglePage-同時(shí)只顯示一個(gè)頁面oPdfWriter.PageLayoutOneColumn 一單列顯示oPdfWriter.PageLayoutTwoColumnLeft 或歹 U 顯示,奇數(shù)頁在左oPdfWriter.PageLayoutTwoColumnRight-雙歹 U 顯示,奇數(shù)頁在右文件打開時(shí),頁

16、面模式用到下面其中之一:oPdfWriter.PageModeUseNone-既不顯示大鋼也不顯示縮略圖0PdfWriter.PageModeUseThumbs 一顯示縮略圖0PdfWriter.PageModeFullScreen-全屏模式,沒有菜單、windows 控件或者其他任何windows 可見控件PdfWriter.HideToolbar-當(dāng)文檔激活時(shí),是否隱藏閱讀程序(如AdobeReader)的工具條PdfWriter.HideMenubar-當(dāng)文檔激活時(shí),是否隱藏閱讀程序的菜單.PdfWriter.HideWindowUI-當(dāng)文檔激活時(shí),是否隱藏閱讀程序的界面元素,如滾動(dòng)條、

17、導(dǎo)航條等,而僅僅保留文檔顯示PdfWriter.FitWindow-是否調(diào)整文檔窗口尺寸以適合顯示第一頁。PdfWriter.CenterWindow-是否將文檔窗口放到屏幕中央在全屏模式下,指定如何顯示界面元素(選擇一個(gè))oPdfWriter.NonFullScreenPageModeUseNone-既不顯示大鋼也不顯示縮略圖oPdfWriter.NonFullScreenPageModeUseOutlines 一顯示大鋼oPdfWriter.NonFullScreenPageModeUseThumbs 一顯示縮略圖說明:你只能在類 PdfWriter 中調(diào)用這些方法。加密打開文檔之前還要做

18、的一件事情就是加密(如果你希望該文檔加密),要達(dá)到這個(gè)目的,你可以使用下面的方法:publicvoidsetEncryption(booleanstrength,StringuserPassword,StringownerPassword,intpermissions);strength 是下面兩個(gè)常量之一:oPdfWriter.STRENGTH40BITS:40 位oPdfWriter.STRENGTH128BITS:128 位(AcrobatReader5.0 及以上版本支持)UserPassword 和 ownerPassword 可以為空或零長(zhǎng)度,這種情況下,ownerPassword

19、 將被隨機(jī)的字符串代替Permissions 為下列常量之一:oPdfWriter.AllowPrinting0PdfWriter.AllowCopy0PdfWriter.AllowModifyAnnotations0PdfWriter.AllowFillInoPdfWriter.AllowScreenReadersoPdfWriter.AllowAssemblyoPdfWriter.AllowDegradedPrinting該功能參見示例代碼 0109 和示例代碼 0110。writer.setEncryption(PdfWriter.STRENGTH40BITS,null,null,Pdf

20、Writer.AllowCopy);示例代碼 0109 產(chǎn)生的文件能夠被打開而無須密碼,但用戶不能打印、修改本文檔。writer.setEncryption(PdfWriter.STRENGTH128BITS,userpass,ownerpass,PdfWriter.AllowCopy|PdfWriter.AllowPrinting);打你試圖打開示例代碼 0110 產(chǎn)生的文件時(shí),將要求輸入密碼(userpass),因?yàn)樘砑恿?AllowPrinting 參數(shù),你可以打印該文檔而不會(huì)發(fā)生任何問題。第四步添加內(nèi)容在解釋第一步到第三步的不同示例中,你可能已經(jīng)遇到了一些對(duì)象如Phrase,Parag

21、raph 等在接下來的幾章中,所有這些問題都將得到詳細(xì)解釋。有時(shí)你可能想一個(gè) writer 故意忽略 document 產(chǎn)生的行為, 如示例代碼 0111:當(dāng)我們創(chuàng)建了兩個(gè) writer:writerA 和 writerB:PdfWriterwriterA=PdfWriter.getInstance(document,newFileStream(Chap0111a.pdf,FileMode.Create);PdfWriterwriterB=PdfWriter.getInstance(document,newFileStream(Chap0111b.pdf,FileMode.Create);我們

22、可以創(chuàng)建兩個(gè)有細(xì)微差別的文檔:writerA.Pause();document.add(newParagraph(ThisparagraphwillonlybeaddedtoChap0111b.pdf,nottoChap0111a.pdf);writerA.resume();你可以比較文件:Chap0111a.pdf和Chap0111b.pdf的區(qū)別第五步,關(guān)閉 document關(guān)閉 document 非常重要,因?yàn)樗鼘㈥P(guān)閉正在運(yùn)行的 Writer 并將內(nèi)容寫入文件,該方法在最后被調(diào)用,你應(yīng)該總是要關(guān)閉文檔。高級(jí)話題:閱讀 PDFt 件該部分內(nèi)容介紹了 iText只能產(chǎn)生 PDF式的文件而不能

23、解析 PDF式文件,不再翻譯。第二章塊、短句和段落塊塊(Chunk)是能被添加到文檔的文本的最小單位, 塊可以用于構(gòu)建其他基礎(chǔ)元素如短句、段落、錨點(diǎn)等,塊是一個(gè)有確定字體的字符串,要添加塊到文檔中時(shí),其他所有布局變量均要被定義。 下面一行中, 我們創(chuàng)建了一個(gè)內(nèi)容為“helloWorld、紅色、斜體、COURIERS 體、尺寸 20 的一個(gè)塊:Chunkchunk=newChunk(Helloworld,FontFactory.getFont(FontFactory.COURIER,20,Font.ITALIC,newColor(255,0,0);典型字體1:在本指南中,除了第九章外(你可以在這

24、里學(xué)會(huì)使用其他字體),我們將始終使用典型字體 1,這些是不同的典型字體 1:Courier(該字體定寬)HelveticaTimesRomanSymbolZapfDingbats下劃線/刪除線如果你希望一些塊有下劃線或刪除線,你可以通過改變字體風(fēng)格簡(jiǎn)單做到:Chunkchunkl=newChunk(Thistextisunderlined,FontFactory.getFont(FontFactory.HELVETICA,12,Font.UNDERLINE);Chunkchunk2=newChunk(ThisfontisoftypeITALIC|STRIKETHRU,FontFactory.g

25、etFont(FontFactory.HELVETICA,12,Font.ITALIC|Font.STRIKETHRU);上標(biāo)/下標(biāo)在塊中有幾個(gè)方法可以調(diào)用,其中大部分將在接下來的章節(jié)中介紹,本章中只介紹一個(gè)方法 setTextRise(floatf).你可以使用該方法在上標(biāo)或下標(biāo)中寫塊。塊的背景如果你想改變塊的背景,你可以使用方法 setBackground(Colorcolor).這將在塊文本的下面添加一個(gè)彩色矩形:ck.setBackground(newColor(0 xFF,0 xFF,0 x00);在示例代碼 0101 中,你可以概覽典型字體 1 和一個(gè)使用setTextRise,s

26、etBackground 等方法的的例子。短句短句(Phrases)是一系列以特定間距(兩行之間的距離)作為參數(shù)的塊,一個(gè)短句有一個(gè)主字體,但短句中的一些塊具有不同于主字體的字體,你有更多的選擇去創(chuàng)建短句,一些具體使用參見代碼 0202。古希臘語因?yàn)楣畔ED語經(jīng)常使用,在類 Phrase 的構(gòu)造函數(shù)中有一個(gè)特征:將一個(gè)字符用作為參數(shù)(如果你想避免這種情況,你只能使用塊工作而不能使用字符串),正如你在示例代碼 0203 中看到的,這個(gè)特征自動(dòng)地將 913 至 937(除 903)和 945至 969(古希臘的 ASCII 值)范圍內(nèi)的所有字體改為希臘符號(hào)。非主要性與其說這是一個(gè)特征,不如說是一個(gè)缺

27、陷,但無論如何,這使創(chuàng)建一個(gè)非主要性的短句或段落成為可能,這將產(chǎn)生一個(gè)由下向上書寫的臨時(shí)作用(參見示例代碼 0204)。如果你想在一頁中將一些位置移動(dòng)到上面時(shí)可能有用。說明,當(dāng)你穿越上邊屆時(shí)無法檢查,也沒有辦法讓你回到前一頁。段落段落是一系列塊和(或)短句。同短句一樣,段落有確定的間距。用戶還可以指定縮排;在邊和(或)右邊保留一定空白,段落可以左對(duì)齊、右對(duì)齊和居中對(duì)齊。添加到文檔中的每一個(gè)段落將自動(dòng)另起一行。有幾種辦法建立一個(gè)段落,如:Paragraphpl=newParagraph(newChunk(Thisismyfirstparagraph.,FontFactory.getFont(Fo

28、ntFactory.HELVETICA,12);Paragraphp2=newParagraph(newPhrase(Thisismysecondparagraph.,FontFactory.getFont(FontFactory.HELVETICA,12);Paragraphp3=newParagraph(Thisismythirdparagraph.,FontFactory.getFont(FontFactory.HELVETICA,12);所有有些對(duì)象將被添加到段落中:p1.add(youcanaddstrings,);p1.add(newChunk(youcanaddchunks);p

29、1.add(newPhrase(oryoucanaddphrases.);說明:一個(gè)段落有一個(gè)且僅有一個(gè)問距,如果你添加了一個(gè)不同字體的短句或塊,原來的間距仍然有效,你可以通過 SetLeading 來改變間距,但是段落中所有內(nèi)容將使用新的中白間距。見示例代碼 0205。保持段落的整體性在示例代碼 0206 中,我們使用了 setKeepTogether(true)方法來試圖將一個(gè)段落放在同一頁中,該方法并不是始終有效,舉個(gè)例子,第一段不能剛好在一頁中,于是被分成了兩部分。第二段被放置在第二頁,但第三段順沿到了第三頁上。字體的延續(xù)你應(yīng)該掌握字體延續(xù)的一些規(guī)則,這些規(guī)則的應(yīng)用見示例代碼 0207

30、,當(dāng)我們將一些內(nèi)容用指定的字體(非默認(rèn)字體)創(chuàng)建一個(gè)短句或者段落后再添加更多內(nèi)容時(shí),初始對(duì)象的字體風(fēng)格將被延續(xù),請(qǐng)看“Hello1!”和“Hello2”:PhrasemyPhrase=newPhrase(Hello2!,newFont(Font.TIMES_NEW_ROMAN,8,Font.BOLD);myPhrase.Add(newPhrase(someotherfont,newFont(Font.HELVETICA,8,Font.ITALIC);myPhrase.Add(newPhrase(Thisistheendofthesentence.n,newFont(Font.TIMES_NEW

31、_ROMAN,8,Font.ITALIC);document.Add(myPhrase);我們由 TimesNewRoman 粗體字開始,添加一些文本使用 Helvetica 字體而不指定風(fēng)格,我們發(fā)現(xiàn)文本被改變成了粗體,當(dāng)我們?cè)偌右恍┪谋臼褂肨imesNewRoman?體和斜體風(fēng)格,結(jié)果變成了粗斜體。如果我們使用 FontFactory 來創(chuàng)建字體,字體風(fēng)格不會(huì)被延續(xù),因?yàn)镕ontFactory 使用了另外的技術(shù)構(gòu)建一個(gè)字體:myPhrase=newPhrase(HelloIbis!,FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN,8,Font

32、.BOLD);myPhrase.Add(newPhrase(someotherfont,FontFactory.getFont(FontFactory.HELVETICA,8,Font.ITALIC);myPhrase.Add(newPhrase(Thisistheendofthesentence.n”,FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN,8,Font.ITALIC);document.Add(myPhrase);在上面的代碼中,使用 Helvetica 字體的文本風(fēng)字體沒有指定(既不是粗體也不是斜體)。采用 TimesNewRoma

33、n 的額外文本僅僅顯示為斜體。你也看到我們添加了一個(gè)段落,添加該段落就如同一個(gè)短句。ParagraphmyParagraph=newParagraph(Hello1!,newFont(Font.TIMES_NEW_ROMAN,8,Font.BOLD);myParagraph.Add(newParagraph(Thisistheendofthesentence.,FontFactory.getFont(newFont.TIMES_NEW_ROMAN,8);document.Add(myParagraph);你可以不這樣做,但將失去字體風(fēng)格的延續(xù),首先不用任何字體創(chuàng)建段落(例中我們僅僅給字體出間距

34、為 1.5 倍),然后添加內(nèi)容的不同部分。myParagraph=newParagraph(12);myParagraph.Add(newParagraph(Hello3!,newFont(Font.TIMES_NEW_ROMAN,8,Font.BOLD);myParagraph.Add(newParagraph(Thisistheendofthesentence.,newFont(Font.TIMES_NEW_ROMAN,8,Font.ITALIC);document.Add(myParagraph);如果你使用了 Phrase 對(duì)象,你同樣會(huì)失去字體風(fēng)格的延續(xù):myPhrase=newPh

35、rase(12);myPhrase.Add(newPhrase(Hello4!,newFont(Font.TIMES_NEW_ROMAN,8,Font.BOLD);myPhrase.Add(newPhrase(Thisistheendofthesentence.,newFont(Font.TIMES_NEW_ROMAN,8,Font.ITALIC);document.Add(myPhrase);更改分割符通常,當(dāng)文本不能放在一行時(shí),文本將被分割成不同的部分,iText 首先會(huì)查找分割符,如果沒有找到,文本將在行尾被截?cái)唷S幸恍╊A(yù)定的分割符如“”空格和“-”連字符,但是你可以使用 setSpli

36、tCharacter 方法來覆蓋這些默認(rèn)值。在示例代碼 0208 中,你可以看到當(dāng)?shù)竭_(dá)行尾時(shí)一個(gè)塊是如何被分割的。然后分隔符被改成點(diǎn)”.”,該行在該字符處被分割。第三章錨點(diǎn)、列表和注釋錨點(diǎn)我們都知道 HTM 葉的超文本鏈接,當(dāng)我們點(diǎn)擊某些語句,你能夠跳轉(zhuǎn)到網(wǎng)上的其他頁。在 PDF 中也可以實(shí)現(xiàn)這種功能。事實(shí)上,在第十一章整個(gè)章節(jié)中有關(guān)于 PDF 鏈接的介紹, 但這是 iText 的更高級(jí)的應(yīng)用, 本章中我們處理簡(jiǎn)單的 iTexto如果你想在文檔中添加一個(gè)外部鏈接(例如使用 URL 鏈接到 WEBt 的其他文檔),你可以簡(jiǎn)單地使用 Anchor 對(duì)象,它派生于 Phrase 對(duì)象,使用方法相同。

37、只有兩種額外方法定義兩種額外變量:setName 和 setReference。外部鏈接示例:Anchoranchor=newAnchor(website,FontFactory.getFont(FontFactory.HELVETICA,12,Font.UNDERLINE,newColor(0,0,255);anchor.Reference=http:/;anchor.Name=website;如果你想添加內(nèi)部鏈接, 你需要選擇該鏈接不同的名稱, 就象你相位在 HTML中利用名稱作為錨點(diǎn)一樣。為達(dá)到該目的,你需要添加一個(gè)“#。內(nèi)部鏈接示例:Anchoranchor1=newAnchor(Th

38、isisaninternallink);anchorl.Name=linkl;Anchoranchor2=newAnchor(Clickheretojumptotheinternallink);anchor.Reference=#link1;這兩個(gè)鏈接的例子請(qǐng)見示例代碼 0301。列表通過類 List 和 ListItem,你可以添加列表到 PDFt 件中,對(duì)于列表你還可以選擇是否排序。排序列表示例:Listlist=newList(true,20);list.Add(newListItem(Firstline);list.Add(newListItem(Thesecondlineislong

39、ertoseewhathappensoncetheendofthelineisreached.W 川 itstartonanewline?);list.Add(newListItem(Thirdline);結(jié)果如下:1.Firstline2.Thesecondlineislongertoseewhathappensoncetheendofthelineisreached.Willitstartonanewline?3.Thirdline不排序示例如下:Listoverview=newList(false,10);overview.Add(newListItem(Thisisanitem);ov

40、erview.Add(Thisisanotheritem);結(jié)果如下:ThisisanitemThisisanotheritem你可以通過 setListSymbol 方法更改列表符號(hào):/用字符串作為列表符號(hào)listl.ListSymbol=*;/用 Chunk 作為列表符號(hào)(包含“?”字符)list2.ListSymbol=newChunk(u2022,FontFactory.getFont(FontFactory.HELVETICA,20);/用圖片作為列表符號(hào)list3.ListSymbol=newChunk(Image.getInstance(myBullet.gif),0,0);還可

41、以使用 setIndentationLeft 和 setIndentationRight 方法設(shè)置縮排,列表符號(hào)的縮排在構(gòu)造函數(shù)中設(shè)置。更多的例子請(qǐng)參見示例代碼 0302。注釋iText 支持不同風(fēng)格的注釋。文本注釋:你可以添加一小段文本到你的文檔中,但它并非文檔內(nèi)容的一部分,注釋有標(biāo)題和內(nèi)容:Annotationa=newAnnotation(authors,MaybeitsbecauseIwantedtobeanauthormyselfthatIwroteiText.);外部鏈接注釋:你需要指定一個(gè)可點(diǎn)擊的矩形和一個(gè)字符串(URLffi 述)或 URLM 象:Annotationannot

42、=newAnnotation(100f,700f,200f,800f,newURL(http:/);Annotationannot=newAnnotation(100f,700f,200f,800f,http:/);外部 PDF 文件鏈接注釋:你需要指定一個(gè)可點(diǎn)擊的矩形和一個(gè)字符串(文件名稱)和目的文件或頁碼。Annotationannot=newAnnotation(100f,700f,200f,800f,other.pdf,mark);Annotationannot=newAnnotation(100f,700f,200f,800f,other.pdf,2);指定行為鏈接注釋你需要指定一個(gè)

43、可點(diǎn)擊的矩形和一個(gè)指定的行為:Annotationannot=newAnnotation(100f,700f,200f,800f,PdfAction.FIRSTPAGE);應(yīng)用程序鏈接注釋:你需要指定一個(gè)可點(diǎn)擊的矩形和一個(gè)應(yīng)用程序:Annotationannot=newAnnotation(300f,700f,400f,800f,C:winnt/notepad.exe,null,null,null);我們無須在頁面上指定一個(gè)位置,iText 會(huì)內(nèi)部處理。你能夠看到 iText 添加文本注釋在頁面上當(dāng)前位置下面,第一個(gè)在段后第一行下面,第二個(gè)在短句結(jié)束處的下面。所有其他注釋需要指定想匹配的矩形區(qū)

44、域,在示例代碼 0304 中,我們畫了一些正方形(使用的函數(shù)將在第十章中介紹),為每個(gè)正方形添加了一些鏈接注釋。第四章頁眉頁腳、章節(jié)、區(qū)域和繪圖對(duì)象使用在第三至第五章中描述的大量簡(jiǎn)單 iText 對(duì)象可以避免更多的高級(jí)話題(第九至十二章) , 緊記這些簡(jiǎn)單對(duì)象限制的功能, 大量復(fù)雜的功能在第三部分。頁眉頁腳HeaderFooter 對(duì)象可以于為文檔每頁添加頁眉和頁腳。這樣一個(gè)頁眉或頁腳包含一個(gè)標(biāo)準(zhǔn)的短句(如果需要)和當(dāng)前頁碼,如果你需要更多復(fù)雜的頁眉和頁腳(使用表格或者第幾頁共幾頁),請(qǐng)閱讀第十二章。在示例代碼 0401 中, 你可以看到我們首先添加了一個(gè)包含頁碼沒有任何邊框的頁腳。Heade

45、rFooterfooter=newHeaderFooter(newPhrase(Thisispage:),true);footer.Border=Rectangle.NO_BORDER;document.Footer=footer我們還可以使用下面的構(gòu)造函數(shù):HeaderFooterfooter=newHeaderFooter(newPhrase(Thisispage),newPhrase(.);構(gòu)造函數(shù)知道你希望添加一個(gè)頁碼和將其放置在兩個(gè)短句問,如果你只是設(shè)置一個(gè) HeaderFooter 而不改變邊框,頁眉或頁腳的文本上下各有一條直線。HeaderFooterheader=newHead

46、erFooter(newPhrase(Thisisaheaderwithoutapagenumber),false);document.Header=header;章節(jié)和區(qū)域在第十一章中將描述如何構(gòu)建一個(gè)樹的外觀,如果你只需要一個(gè)簡(jiǎn)單的章節(jié)和(子)區(qū)域,你可以用 Chapter 對(duì)象和 Section 對(duì)象自動(dòng)構(gòu)建一個(gè)樹:ParagraphcTitle=newParagraph(Thisischapter1,chapterFont);Chapterchapter=newChapter(cTitle,1);ParagraphsTitle=newParagraph(Thisissection1in

47、chapter1,sectionFont);Sectionsection=chapter.addSection(sTitle,1);在示例代碼 0402 中,我們添加了一系列的章節(jié)和子區(qū)域,你可以看到完整的樹形,樹形結(jié)構(gòu)默認(rèn)打開,如果你希望部分節(jié)點(diǎn)關(guān)閉,你必須使用用BookmarkOperfli 性其值為 false,詳見示例代碼 0403。圖形如果你想添加圖形,如直線、圓、幾何窗體,你應(yīng)該閱讀讀十章,但如果你只需要一些有限的功能,你可以使用 Graphic 對(duì)象Graphicgrx=newGraphic();/添加一個(gè)矩形grx.rectangle(100,700,100,100);/添加一

48、條斜線grx.moveT100,700);grx.lineTo(200,800);/將圖形顯示出來grx.stroke();document.Add(grx);完整的代碼請(qǐng)見示例代碼 0404,如果想看到全部的方法,請(qǐng)參見PdfContentByte 對(duì)象 API。當(dāng)你想給頁面加一個(gè)邊框或者在文本當(dāng)前位置畫一條水平線時(shí),圖形對(duì)象非常有用。下面的方法用指定的寬度、問距(如果需要)和顏色畫一個(gè)邊框。publicvoidsetBorder(floatlinewidth,floatextraSpace);publicvoidsetBorder(floatlinewidth,floatextraSpac

49、e,Colorcolor);下面的方法用指定的寬度(如果需要)和顏色畫一條水平線,線的長(zhǎng)度是指定兩邊緣間可用面積的的百分比。publicvoidsetHorizontalLine(floatlinewidth,floatpercentage)publicvoidsetHorizontalLine(floatlinewidth,floatpercentage,Colorcolor)示例代碼 5 中,有一個(gè)離邊界 5 磅,線寬 3 磅的邊框,還有兩條水平線,一條為黑色,5 磅寬,可用空間的 100%,另外一條為紅色,線寬 3 磅,可用空間的80%。第五章表格重點(diǎn):如果你僅僅生成 PDFt 件(沒有

50、 XMLHTMLRTF,),使用類 pdfPTable 代替類 Table 更好。一些簡(jiǎn)單的表格一個(gè)表格是包含單元格排列成矩陣的矩形區(qū)域。表格的距陣并不要求是 mxn的,它可以有空洞或者單元格比單個(gè)的要大。創(chuàng)建一個(gè)表格最通用的辦法是預(yù)先知道有幾行幾列:publicTable(intcolumns,introws);在示例代碼 0501 中,我們構(gòu)建了一個(gè)簡(jiǎn)單的表:TableaTable=newTable(2,2);aTable.addCell(0.0);aTable.addCell(0.1);aTable.addCell(1.0);aTable.addCell(1.1);該表格有兩行兩列,單兀

51、格被自動(dòng)添加,從第一行第一列開始,然后是第二列,當(dāng)一行滿后,下一單元格自動(dòng)添加到下一行的第一列中。也可以將單元格添加到表中指定的位置,如示例代碼 0502,別了要添加System.Drawing.dll 引用,以獲得 Point 對(duì)象,我們創(chuàng)建了一個(gè) 4 行 4 列的表格然后添加一些單元格到隨機(jī)的位置上:TableaTable=newTable(4,4);aTable.AutoFillEmptyCells=true;aTable.addCell(2.2,newPoint(2,2);aTable.addCell(3.3,newPoint(3,3);aTable.addCell(2.1,newPo

52、int(2,1);aTable.addCell(1.3,newPoint(1,3);你可以看到我們將 AutoFillEmptyCells 屬性設(shè)置為 true,這將自動(dòng)、默認(rèn)的單元格布局填充空的單元格, 如果我們忘記了這樣做(就象本例中第二個(gè)表格),將沒有額外的單元格添加,不包含任何單格的行也將被忽略,在本例中,第一行將不顯示,因?yàn)樵撔惺强招?。?jīng)常用數(shù)據(jù)庫(kù)查詢結(jié)果來填充表格,大多數(shù)情況下,你預(yù)先并不知道到底需要多少行,這就是為什么還有第二個(gè)構(gòu)造函數(shù)的原因:publicTable(intcolumns);iText 根據(jù)需要自動(dòng)添加行,在示例代碼 0503 中,初始化了 4 行 4 歹當(dāng)我們添

53、加第 6 行和第 7 行的單元格時(shí),iText 自動(dòng)增加行數(shù)到 7。增加列數(shù)也是可能的,但是有點(diǎn)麻煩,它不能自動(dòng)生成,你必須使用addColumns 方法并設(shè)置列寬,詳見示例代碼 0504。一些表格參數(shù)前面例子中的表格并不美觀,我們可以設(shè)置大量的參數(shù)來改變表格外觀。類Table和類 Cell派生于類Rectangle,我們可以用大量典型的Rectangle方法,讓我們來看看小例代碼 0505。Tabletable=newTable(3);table.BorderWidth=1;table.BorderColor=newColor(0,0,255);table.Cellpadding=5;5.t

54、able.Cellspacing=5;Cellcell=newCell(header);cell.Header=true;cell.Colspan=3;table.addCell(cell);10.cell=newCell(examplecellwithcolspan1androwspan2);cell.Rowspan=2;cell.BorderColor=newColor(255,0,0);table.addCell(cell);table.addCell(1.T);15.table.addCell(2.1);table.addCell(1.2);table.addCell(22);tabl

55、e.addCell(celltest1);cell=newCell(bigcell);20.cell.Rowspan=2;cell.Colspan=2;cell.BackgroundColor=newColor(0 xC0,0 xC0,0 xC0);table.addCell(cell);table.addCell(celltest2);25.document.Add(table);單元格間距和填距在第 4 行中,我們?cè)O(shè)置了表格的填距,就是單元格邊界和內(nèi)容間一定數(shù)量的空間,在前面的示例中,我們看到文本緊貼邊界,通過使用用特定的填距,就可以避免。在第 5 行中,我們?cè)O(shè)置了表格的間距,就是單元格和

56、表格邊界間的一定數(shù)量的空間,不同的單元格間使用了半數(shù)空間,具體代碼見示例代碼 0506。對(duì)齊方式在示例代碼 0506 中,我們也改變了單元格“bigcell”的對(duì)齊方式:cell.HorizontalAlignment=Element.ALIGN_CENTER;cell.VerticalAlignment=Element.ALIGN_MIDDLE;注:不能總是相信垂直對(duì)齊方式。邊框如果我們象在第 14 行中那樣添加了一個(gè)單元格,將使用默認(rèn)的單元格布局(默認(rèn)的布局可以 SetDefalut 方法改變),如果我們使用了 Cell 對(duì)象,我們可以控制每一個(gè)單元格的布局。在第 2 和第三中,我們?cè)O(shè)置整

57、個(gè)表格的邊框?qū)挾群瓦吙蝾伾覀冊(cè)趩卧裆峡梢允褂玫姆椒ǎ?在 12 行中, 每個(gè)單元格用“box”作為邊界繪制 (就象在 HTM葉),但是示例代碼 0507 顯示,我們?cè)?PDF 中有大量更多可能。顏色在第 22 行中,你也能定義單元格的背景色,在示例代碼 0507 中,我們不使用顏色只是用一定灰度填充。行跨和列跨最后,你也能設(shè)置單元格的行跨(11/20 行)和列跨(8/21 歹 1)。通過這種方法可以將幾個(gè)單元格合并成一個(gè)大的單元格。備注第 7 行在 PDF 中沒有意義, 用于生成 HTML 在 HTM 中并不是總能產(chǎn)生同樣的布局,PDFS 格有點(diǎn)象:header1.12.1example

58、cellwithcolspan1androwspan21.22.2celltest1bigcellcelltest2表格分割如果一個(gè)表格不能放在一頁中,將自動(dòng)被分割,示例代碼 0508 顯示了當(dāng)一個(gè)表格到達(dá)頁邊時(shí)發(fā)生的情況,這將在下一節(jié)中解釋。大表格跨越幾頁的表格將自動(dòng)被分割成不同的部分。 示例代碼 0509 顯示了一個(gè)跨越多頁的報(bào)表。該報(bào)表有一個(gè)表頭,如果你希望這個(gè)表頭在每頁都出現(xiàn),你可以用endHeaders()方法標(biāo)記表頭區(qū)域的結(jié)束點(diǎn),見示例代碼 0510。為做這樣的報(bào)表,建議設(shè)置單元格間距為 0 和僅使用指定的填距。你可能已經(jīng)注意到了,當(dāng)一個(gè)表格被分割時(shí),一些邊界好象丟失了。這是因?yàn)閱?/p>

59、元格在前一頁被完整地繪制了而不會(huì)傳遞給下一頁。強(qiáng)行將一個(gè)表格或單元格布置到一頁上有有些情況下,你可能希望避免單元格或者整個(gè)表被拆分成兩個(gè)部分,示例代碼 0511 差不多和示例代碼 0508 完全一樣,但我們?cè)O(shè)置了參數(shù) TableHasToFit為 true,看看示例代碼 0508 和示例代碼 0511 結(jié)果區(qū)別。在示例代碼 0512 中我們修改了示例代碼 0510 的 CellsHaveToFit 屬性為 true,比較兩個(gè)示例產(chǎn)生結(jié)果的區(qū)別。內(nèi)存管理當(dāng)我們添加一個(gè)對(duì)象到文檔時(shí),該對(duì)象一有可能就寫入了輸出流,但當(dāng)創(chuàng)建一個(gè)表格時(shí),該 Table 對(duì)象一直保存著,對(duì)于真正的大表格,這將成為一個(gè)問題

60、。同樣, 當(dāng)你正寫一個(gè) HttpServletResponse 對(duì)象到輸出流時(shí), 瀏覽器也可能超時(shí)。這就是為什么你自己用 fitsPage()方法控制表分割是有用的,示例代碼 0513告訴你如何做。嵌套表格有兩種方法嵌套表格,第一種是利用 insertTable 方法明確地將一個(gè)表格插入到另外一個(gè)表格,示例代碼 0514 顯示了通過插入到其他表格的辦法創(chuàng)建的 5 個(gè)表格。正如你看到的在前面兩個(gè)表中,所有空的單元格自動(dòng)得到分割,因?yàn)楦淖兞嗽瓉淼谋砀?。如果一個(gè)單元格不空,列跨度和(或)行跨度將自動(dòng)調(diào)整到新的位置,頁面上第三個(gè)表格顯示所有原表中列的相關(guān)寬度都得到了保護(hù),第四個(gè)表格顯示我們可以在插入了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論