




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、用C#制作PDF文件全攻略麗水市汽車運輸集團有限公司信息中心 茍安廷目 錄前 言3第一部分 iText的簡單應用4第一章 創(chuàng)建一個Document4第一步 創(chuàng)建一個Document實例:5第二步 創(chuàng)建Writer實例6第三步 打開Document6第四步 添加內(nèi)容10第五步,關閉 document11第二章 塊、短句和段落11塊11短句12段落12字體的延續(xù)13第三章 錨點、列表和注釋14錨點14列表14注釋15第四章 頁眉頁腳、章節(jié)、區(qū)域和繪圖對象16頁眉頁腳16章節(jié)和區(qū)域17圖形17第五章 表格18一些簡單的表格18一些表格參數(shù)18大表格20內(nèi)存管理20嵌套表格21表格偏移21表格的絕對位
2、置21第六章 圖片21Image對象21圖片的位置22縮放和旋轉圖片23原始圖片數(shù)據(jù)23System.Drawing.Bitmap23TIFF和CCITT24圖片和其他對象24第二部分 其他文檔格式25第七章 XML和 (X)HTML25第八章 RTF文件25RTF包25創(chuàng)建一個RTF文檔25不支持的特性26RTF中擴展的頁眉和頁腳26第三部分 iText的高級應用27第九章 字體27TrueType字體應用27TruType字體集合的應用28第十章 圖象和文本的絕對位置28pdfContentByte28簡單圖形29文本29模板(Form xObjects)30分欄31PdfTable32顏
3、色(SpotColors)和圖案(Patterns)33第十一章 本地和異地轉向、目標和概要33本地轉向33異地轉向33第十二章 頁面和表格事件34前 言PDF文件是目前比較流行的電子文檔格式,在辦公自動化(OA)等軟件的開發(fā)中,經(jīng)常要用到該格式,但介紹如何制作PDF格式文件的資料非常少,在網(wǎng)上搜來搜去,都轉貼的是同一段“暴力”破解的方法,代碼片斷如下:StreamWriter pPDF=new StreamWriter(filePath);ArrayList xRefs=new ArrayList();float yPos =0f;long streamStart=0;long stream
4、End=0;long streamLen =0;string strPDFMessage=null;/PDF文檔頭信息strPDFMessage=%PDF-1.1n;ConvertToByteAndAddtoStream(strPDFMessage);xRefs.Add(mPDF.Length);strPDFMessage=1 0 objn;ConvertToByteAndAddtoStream(strPDFMessage);strPDFMessage=n;ConvertToByteAndAddtoStream(strPDFMessage);strPDFMessage=streamn;Conv
5、ertToByteAndAddtoStream(strPDFMessage);看了上面的制作辦法,我眼鏡都摔壞了三幅,如果用上面這樣原始的辦法能制作出滿意的PDF文件,那一定是天才所為。后來,我從一個網(wǎng)站(網(wǎng)址:要用本文的方法生成PDF文件,需要兩個控件:itextsharp.dll和ICSharpCode.SharpZipLib.dll,由于示例代碼實在太多,我將代碼全部整理出來,放在另外一個文件“示例代碼.doc”中,所有這些資源,我均放在了本人的ftp站點(6)上的“Pdf文件制作全攻略”文件夾中(文件夾中另外兩個rar壓縮文件為兩個控件的源代碼,供大
6、家學習研究使用),你可以到這里下載相應的資源,或者直接到原網(wǎng)站下載。為便于調(diào)試和敘述,所有例子均為DOS控制臺程序,windows程序使用方法完全一樣,按照下面的步驟創(chuàng)建一個可調(diào)試的項目:1、 打開VS2003;2、 單擊菜單“文件”“新建”“項目”,在項目類型中選擇“Visual C#項目”,在模板中選擇“控制臺應用程序”,輸入文件名稱如“MakePdf”,指定好存放路徑,然后點確定按鈕;3、 在“解決方案資源管理器”中右鍵單擊“引用”,從彈出的菜單中選擇“添加引用”,在“.NET”選項夾中選擇“瀏覽”,添加前面提到的兩個應用,如下圖:4、 在代碼窗口頂部添加兩個引用:using iText
7、Sharp.text;using iTextSharp.text.pdf;至此,準備工作完畢。第一部分 iText的簡單應用第一章 創(chuàng)建一個Document利用iText五步創(chuàng)建一個PDF文件:helloword。第一步,創(chuàng)建一個 iTextSharp.text.Document對象的實例:Document document = new Document();第二步,為該Document創(chuàng)建一個Writer實例:PdfWriter.getInstance(document, new FileStream(Chap0101.pdf, FileMode.Create);第三步,打開當前Docume
8、ntdocument.Open();第四步,為當前Document添加內(nèi)容:document.Add(new Paragraph(Hello World);第五步,關閉Documentdocument.Close();完整的代碼見示例代碼0101。在例中,不難看出,制作一個PDF文件是非常簡單的。注:如果你將例中“document.Add(new Paragraph(Hello World);”中的字符串“Hello Word”換成中文,如“這是我的第一個PDF文件”,產(chǎn)生的結果一定讓你大失所望,因為生成的PDF文件中并沒有將中文顯示出來,不要擔心,在第9章中要專門講解字體問題,中文顯示也就迎
9、刃而解了,如果不能正確顯示中文,也就沒有必要翻譯本文了。下面對這幾步做詳細介紹。第一步 創(chuàng)建一個Document實例:iTextSharp.text.Document-object共有三個構造函數(shù):public Document();public Document(Rectangle pageSize);public Document(Rectangle pageSize,int marginLeft,int marginRight,int marginTop,int marginBottom);第一個構造函數(shù)以A4頁面作為參數(shù)調(diào)用第二個構造函數(shù),第二個構造函數(shù)以每邊36磅頁邊距為參數(shù)調(diào)用第三
10、個構造函數(shù)u 頁面尺寸:你可以通過指定的顏色和大小創(chuàng)建你自己的頁面,示例代碼0102創(chuàng)建一個細長的淺黃色背景的頁面:Rectangle pageSize = new Rectangle(144, 720);pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);Document document = new Document(pageSize);通常,你不必創(chuàng)建這樣的頁面,而可以從下面頁面尺寸中選擇:A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-
11、ARCH_E, FLSA 和 FLSE大多數(shù)情況下使用縱向頁面,如果希望使用橫向頁面,你只須使用rotate()函數(shù):Document document = new Document(PageSize.A4.rotate();詳細代碼見示例代碼0103。u 頁邊距:當創(chuàng)建一個文件時,你還可以定義上、下、左、右頁邊距:Document document = new Document(PageSize.A5, 36, 72, 108, 180); 在示例代碼0104中你可以看到該文檔有一個0.5英寸的左邊距和1英寸的右邊距,上邊距為1.5英寸,下邊距為2.5英寸。說明:當創(chuàng)建一個矩形或設置邊距時,
12、你可能希望知道該用什么度量單位:厘米、英寸或象素,事實上,默認的度量系統(tǒng)以排版單位磅為基礎得出其他單位的近似值,如1英寸=72磅,如果你想在A4頁面的PDF中創(chuàng)建一個矩形,你需要計算以下數(shù)據(jù):21 厘米 / 2.54 = 8.2677 英寸8.2677英寸* 72 = 595 磅29.7 厘米 / 2.54 = 11.6929 英寸11.6929英寸* 72 = 842 磅默認邊距為36磅即半英寸。如果你修改了頁面尺寸,僅僅影響到下一頁,如果你修改了頁邊距,則影響到全部,故慎用。關于頁面的初始值,請參考第三步。第二步 創(chuàng)建Writer實例一旦創(chuàng)建了document,我們可以創(chuàng)建該文檔的多個Wr
13、iter的實例,所有這些Writer實例均繼承自抽象類“iTextSharp.text.DocWriter”。同時還有另外一種情況,你可以用iTextSharp.text.pdf.PdfWriter產(chǎn)生文檔PDF文件,如果你想創(chuàng)建一個TeX文檔,你可以使用iTextSharp.text.TeX.TeXWriter包。Writer類的構造函數(shù)是私有的,你只能通過下面的方法創(chuàng)建一個實例:public static xxxWriter getInstance(Document document, Stream os);(xxx 是 Pdf 或 Xml)你可以通過下面的方法創(chuàng)建一個實例:PdfWrit
14、er writer = PdfWriter.getInstance(document, new FileStream(Chap01xx.pdf);但是你幾乎永遠不會用到Writer實例(除非你想創(chuàng)建高級PDF或者希望用一些非常特殊的函數(shù),如ViewerPreferences 或 Encryption)。所以通過下面的辦法得到實例已經(jīng)足夠了: PdfWriter.getInstance(document, new FileStream(Chap01xx.pdf);在第一步中創(chuàng)建一個文檔時,第一個參數(shù)意義不大,第二個參數(shù)可以是任何一種流,到目前為止我們一直使用System.IO.FileStrea
15、m將Document寫入文件中,示例代碼0105用到了System.IO.MemoryStream(這不是一個獨立的例子,你必須在Servlet Engine中測試這些代碼。第三步 打開Documentu 摘要在你寫入任何實際數(shù)據(jù)之前,你可能希望通過以下幾種方法寫入一些關于本文檔的摘要:public boolean addTitle(String title)public boolean addSubject(String subject)public boolean addKeywords(String keywords)public boolean addAuthor(String aut
16、hor)public boolean addCreator(String creator)public boolean addProducer()public boolean addCreationDate()public boolean addHeader(String name, String content)你可以選擇自己的標題、主題、關鍵字、作者、創(chuàng)建程序,但以下產(chǎn)品信息將始終被添加:iTextSharp (或者iTextSharp的引用)和創(chuàng)建時間(實際上這兩種方法是自動調(diào)用的)。你還可以將自定義的名稱添加為“報頭信息”,但是這對于PdfWriter沒有任何作用,如果看看實例代碼01
17、01產(chǎn)生的pdf文件的“文檔屬性”,我們可以看到僅僅有PDF創(chuàng)建程序和產(chǎn)品日期,而示例代碼0106的“文檔屬性”框中有更多的信息。打開document前要做的事:你只能在Open方法調(diào)用之前添加摘要,這是iText開發(fā)工具提供的一個選擇。在HTML中,報頭信息被放在文檔前面報頭標識中間,調(diào)用Open方法將導致報頭信息寫入流,因而在Document被打開后無法更改這些數(shù)據(jù)。PDF報頭信息不包括摘要,看起來有類似于:%PDF-1.2該行顯示生成的文檔是一個版本為1.2的PDF格式的文件,在PDF中,摘要保存在PdfInfo對象中,當文檔關閉時已經(jīng)寫入PdfWriter中了,因此,沒有關于為什么不能
18、修改庫來滿足任何時候添加或更改摘要的技術原因u 頁面初始化Open方法在不同的Witer中同時會產(chǎn)生初始化事件,舉例來說,如果你需要一個水印或者頁眉頁角對象出現(xiàn)在文檔第一頁的開始處,你需要在打開文檔前添加這些,同樣的用于設置該文檔其他頁水印、頁眉、頁角、頁數(shù)和尺寸。當調(diào)用下列方法:public bool setPageSize(Rectangle pageSize)public bool Add(Watermark watermark)public void removeWatermark()setting Header propertypublic void resetHeader()set
19、ting Footer propertypublic void resetFooter()public void resetPageCount()setting PageCount property產(chǎn)生的結果只能在下一個新頁中看到(當在本頁調(diào)用初始化方法時),代碼見示例代碼0107,你必須要準備一張名為watermark.jpg的圖片,如下圖:u 閱讀器參數(shù):你可以通過下面的辦法為PDF文件指定一些閱讀器 (如Adobe Reader) 參數(shù):public void setViewerPreferences(int preferences)在示例代碼0108中,指定了下面一些參數(shù):writer
20、A.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);writerB.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar);writerC.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseThumbs);正如你所看到的,參數(shù)可以使用以下一些常量:l 文件被打開
21、時,頁面布局用到下面的其中一個 :o PdfWriter.PageLayoutSinglePage 同時只顯示一個頁面o PdfWriter.PageLayoutOneColumn 單列顯示 o PdfWriter.PageLayoutTwoColumnLeft 雙列顯示,奇數(shù)頁在左o PdfWriter.PageLayoutTwoColumnRight -雙列顯示,奇數(shù)頁在右l 文件打開時,頁面模式用到下面其中之一: o PdfWriter.PageModeUseNone 既不顯示大鋼也不顯示縮略圖o PdfWriter.PageModeUseOutlines 顯示大綱 o PdfWrite
22、r.PageModeUseThumbs 顯示縮略圖 o PdfWriter.PageModeFullScreen 全屏模式,沒有菜單、windows控件或者其他任何windows可見控件l PdfWriter.HideToolbar 當文檔激活時,是否隱藏閱讀程序(如Adobe Reader)的工具條 l PdfWriter.HideMenubar -當文檔激活時,是否隱藏閱讀程序的菜單. l PdfWriter.HideWindowUI -當文檔激活時,是否隱藏閱讀程序的界面元素,如滾動條、導航條等,而僅僅保留文檔顯示 l PdfWriter.FitWindow 是否調(diào)整文檔窗口尺寸以適合顯
23、示第一頁。l PdfWriter.CenterWindow 是否將文檔窗口放到屏幕中央 l 在全屏模式下,指定如何顯示界面元素(選擇一個) o PdfWriter.NonFullScreenPageModeUseNone -既不顯示大鋼也不顯示縮略圖o PdfWriter.NonFullScreenPageModeUseOutlines 顯示大鋼 o PdfWriter.NonFullScreenPageModeUseThumbs 顯示縮略圖 說明:你只能在類PdfWriter中調(diào)用這些方法。u 加密打開文檔之前還要做的一件事情就是加密(如果你希望該文檔加密),要達到這個目的,你可以使用下面的
24、方法:public void setEncryption(boolean strength, String userPassword, String ownerPassword, int permissions); strength 是下面兩個常量之一: o PdfWriter.STRENGTH40BITS: 40 位 o PdfWriter.STRENGTH128BITS: 128位 (Acrobat Reader 5.0及以上版本支持) UserPassword和ownerPassword 可以為空或零長度, 這種情況下, ownerPassword 將被隨機的字符串代替 Permissi
25、ons 為下列常量之一: o PdfWriter.AllowPrinting o PdfWriter.AllowModifyContents o PdfWriter.AllowCopy o PdfWriter.AllowModifyAnnotations o PdfWriter.AllowFillIn o PdfWriter.AllowScreenReaders o PdfWriter.AllowAssembly o PdfWriter.AllowDegradedPrinting 該功能參見示例代碼0109和示例代碼0110。writer.setEncryption(PdfWriter.STR
26、ENGTH40BITS, null, null, PdfWriter.AllowCopy);示例代碼0109產(chǎn)生的文件能夠被打開而無須密碼,但用戶不能打印、修改本文檔。writer.setEncryption(PdfWriter.STRENGTH128BITS, userpass, ownerpass, PdfWriter.AllowCopy | PdfWriter.AllowPrinting);打你試圖打開示例代碼0110產(chǎn)生的文件時,將要求輸入密碼(userpass),因為添加了AllowPrinting參數(shù),你可以打印該文檔而不會發(fā)生任何問題。第四步 添加內(nèi)容在解釋第一步到第三步的不同示
27、例中,你可能已經(jīng)遇到了一些對象如Phrase, Paragraph等 在接下來的幾章中,所有這些問題都將得到詳細解釋。有時你可能想一個writer故意忽略document產(chǎn)生的行為,如示例代碼0111:當我們創(chuàng)建了兩個writer: writerA 和 writerB:PdfWriter writerA = PdfWriter.getInstance(document, new FileStream(Chap0111a.pdf, FileMode.Create);PdfWriter writerB = PdfWriter.getInstance(document, new FileStream
28、(Chap0111b.pdf, FileMode.Create);我們可以創(chuàng)建兩個有細微差別的文檔:writerA.Pause();document.add(new Paragraph(This paragraph will only be added to Chap0111b.pdf, not to Chap0111a.pdf);writerA.resume();你可以比較文件: Chap0111a.pdf和Chap0111b.pdf的區(qū)別第五步,關閉 document關閉 document 非常重要, 因為它將關閉正在運行的Writer并將內(nèi)容寫入文件,該方法在最后被調(diào)用,你應該總是要關閉
29、文檔。高級話題:閱讀PDF文件該部分內(nèi)容介紹了iText只能產(chǎn)生PDF格式的文件而不能解析PDF格式文件,不再翻譯。第二章 塊、短句和段落塊塊(Chunk)是能被添加到文檔的文本的最小單位,塊可以用于構建其他基礎元素如短句、段落、錨點等,塊是一個有確定字體的字符串,要添加塊到文檔中時,其他所有布局變量均要被定義。下面一行中,我們創(chuàng)建了一個內(nèi)容為“hello World”、紅色、斜體、COURIER字體、尺寸20的一個塊:Chunk chunk = new Chunk(Hello world, FontFactory.getFont(FontFactory.COURIER, 20, Font.I
30、TALIC, new Color(255, 0, 0);u 典型字體1:在本指南中,除了第九章外(你可以在這里學會使用其他字體),我們將始終使用典型字體1,這些是不同的典型字體1: Courier (該字體定寬) Helvetica Times Roman Symbol ZapfDingbats u 下劃線/刪除線如果你希望一些塊有下劃線或刪除線,你可以通過改變字體風格簡單做到:Chunk chunk1 = new Chunk(This text is underlined, FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLI
31、NE);Chunk chunk2 = new Chunk(This font is of type ITALIC | STRIKETHRU, FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC | Font.STRIKETHRU);u 上標/下標在塊中有幾個方法可以調(diào)用,其中大部分將在接下來的章節(jié)中介紹,本章中只介紹一個方法 setTextRise(float f). 你可以使用該方法在上標或下標中寫塊。u 塊的背景如果你想改變塊的背景,你可以使用方法setBackground(Color color). 這將在塊文本的下面添加
32、一個彩色矩形:ck.setBackground(new Color(0xFF, 0xFF, 0x00);在示例代碼0101中,你可以概覽典型字體1和一個使用setTextRise, setBackground等方法的的例子。短句短句(Phrases)是一系列以特定間距(兩行之間的距離)作為參數(shù)的塊,一個短句有一個主字體,但短句中的一些塊具有不同于主字體的字體,你有更多的選擇去創(chuàng)建短句,一些具體使用參見代碼0202。u 古希臘語因為古希臘語經(jīng)常使用,在類Phrase的構造函數(shù)中有一個特征:將一個字符串作為參數(shù)(如果你想避免這種情況,你只能使用塊工作而不能使用字符串),正如你在示例代碼0203中看
33、到的,這個特征自動地將913至937(除903)和945至969(古希臘的ASCII值)范圍內(nèi)的所有字體改為希臘符號。u 非主要性與其說這是一個特征,不如說是一個缺陷,但無論如何,這使創(chuàng)建一個非主要性的短句或段落成為可能,這將產(chǎn)生一個由下向上書寫的臨時作用(參見示例代碼0204)。如果你想在一頁中將一些位置移動到上面時可能有用。說明,當你穿越上邊屆時無法檢查,也沒有辦法讓你回到前一頁。段落段落是一系列塊和(或)短句。同短句一樣,段落有確定的間距。用戶還可以指定縮排;在邊和(或)右邊保留一定空白,段落可以左對齊、右對齊和居中對齊。添加到文檔中的每一個段落將自動另起一行。有幾種辦法建立一個段落,如
34、:Paragraph p1 = new Paragraph(new Chunk(This is my first paragraph., FontFactory.getFont(FontFactory.HELVETICA, 12);Paragraph p2 = new Paragraph(new Phrase(This is my second paragraph., FontFactory.getFont(FontFactory.HELVETICA, 12);Paragraph p3 = new Paragraph(This is my third paragraph., FontFacto
35、ry.getFont(FontFactory.HELVETICA, 12); 所有有些對象將被添加到段落中:p1.add(you can add strings, ); p1.add(new Chunk(you can add chunks ); p1.add(new Phrase(or you can add phrases.);說明:一個段落有一個且僅有一個間距,如果你添加了一個不同字體的短句或塊,原來的間距仍然有效,你可以通過SetLeading來改變間距,但是段落中所有內(nèi)容將使用新的中的間距。見示例代碼0205。u 保持段落的整體性在示例代碼0206中,我們使用了setKeepToge
36、ther(true)方法來試圖將一個段落放在同一頁中,該方法并不是始終有效,舉個例子,第一段不能剛好在一頁中,于是被分成了兩部分。第二段被放置在第二頁,但第三段順沿到了第三頁上。字體的延續(xù)你應該掌握字體延續(xù)的一些規(guī)則,這些規(guī)則的應用見示例代碼0207,當我們將一些內(nèi)容用指定的字體(非默認字體)創(chuàng)建一個短句或者段落后再添加更多內(nèi)容時,初始對象的字體風格將被延續(xù),請看“Hello 1!”和“Hello 2”:Phrase myPhrase = new Phrase(Hello 2! , new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD);myPhrase.Ad
37、d(new Phrase(some other font , new Font(Font.HELVETICA, 8, Font.ITALIC);myPhrase.Add(new Phrase(This is the end of the sentence.n, new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC);document.Add(myPhrase);我們由Times New Roman 粗體字開始,添加一些文本使用Helvetica字體而不指定風格,我們發(fā)現(xiàn)文本被改變成了粗體,當我們再加一些文本使用Times New Roman字體和斜體風格,
38、結果變成了粗斜體。如果我們使用FontFactory來創(chuàng)建字體,字體風格不會被延續(xù),因為FontFactory使用了另外的技術構建一個字體:myPhrase = new Phrase(Hello 1bis! , FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.BOLD);myPhrase.Add(new Phrase(some other font , FontFactory.getFont(FontFactory.HELVETICA, 8, Font.ITALIC);myPhrase.Add(new Phrase(This i
39、s the end of the sentence.n, FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.ITALIC);document.Add(myPhrase);在上面的代碼中,使用Helvetica字體的文本風字體沒有指定(既不是粗體也不是斜體)。采用Times New Roman的額外文本僅僅顯示為斜體。你也看到我們添加了一個段落,添加該段落就如同一個短句。Paragraph myParagraph = new Paragraph(Hello 1! , new Font(Font.TIMES_NEW_ROMAN, 8,
40、 Font.BOLD);myParagraph.Add(new Paragraph(This is the end of the sentence.,FontFactory.getFont(new Font.TIMES_NEW_ROMAN, 8);document.Add(myParagraph);你可以不這樣做,但將失去字體風格的延續(xù),首先不用任何字體創(chuàng)建段落(例中我們僅僅給字體出間距為1.5倍),然后添加內(nèi)容的不同部分。myParagraph = new Paragraph(12);myParagraph.Add(new Paragraph(Hello 3! , new Font(Font
41、.TIMES_NEW_ROMAN, 8, Font.BOLD);myParagraph.Add(new Paragraph(This is the end of the sentence., new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC);document.Add(myParagraph);如果你使用了Phrase對象,你同樣會失去字體風格的延續(xù):myPhrase = new Phrase(12);myPhrase.Add(new Phrase(Hello 4! , new Font(Font.TIMES_NEW_ROMAN, 8, Font.BO
42、LD);myPhrase.Add(new Phrase(This is the end of the sentence., newFont(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC);document.Add(myPhrase);u 更改分割符通常,當文本不能放在一行時,文本將被分割成不同的部分,iText首先會查找分割符,如果沒有找到,文本將在行尾被截斷。有一些預定的分割符如“ ”空格和“-”連字符,但是你可以使用setSplitCharacter方法來覆蓋這些默認值。在示例代碼0208中,你可以看到當?shù)竭_行尾時一個塊是如何被分割的。然后分隔符被改成點“.”,
43、該行在該字符處被分割。第三章 錨點、列表和注釋錨點我們都知道HTML中的超文本鏈接,當我們點擊某些語句,你能夠跳轉到網(wǎng)上的其他頁。在PDF中也可以實現(xiàn)這種功能。事實上,在第十一章整個章節(jié)中有關于PDF鏈接的介紹,但這是iText的更高級的應用,本章中我們處理簡單的iText。如果你想在文檔中添加一個外部鏈接(例如使用URL鏈接到WEB上的其他文檔),你可以簡單地使用Anchor對象,它派生于Phrase對象,使用方法相同。只有兩種額外方法定義兩種額外變量:setName和 setReference。外部鏈接示例:Anchor anchor = new Anchor(website, FontF
44、actory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE, new Color(0, 0, 255);anchor.Reference = ;anchor.Name = website; 如果你想添加內(nèi)部鏈接,你需要選擇該鏈接不同的名稱,就象你相位在HTML中利用名稱作為錨點一樣。為達到該目的,你需要添加一個“#”。內(nèi)部鏈接示例:Anchor anchor1 = new Anchor(This is an internal link);anchor1.Name = link1;Anchor anchor2 = new Anchor(Cli
45、ck here to jump to the internal link);anchor.Reference = #link1;這兩個鏈接的例子請見示例代碼0301。列表通過類List 和ListItem,你可以添加列表到PDF文件中,對于列表你還可以選擇是否排序。排序列表示例:List list = new List(true, 20);list.Add(new ListItem(First line);list.Add(new ListItem(The second line is longer to see what happens once the end of the line is
46、 reached. Will it start on a new line?);list.Add(new ListItem(Third line);結果如下:1. First line 2. The second line is longer to see what happens once the end of the line is reached. Will it start on a new line? 3. Third line 不排序示例如下:List overview = new List(false, 10);overview.Add(new ListItem(This is
47、an item);overview.Add(This is another item);結果如下: This is an item This is another item 你可以通過setListSymbol方法更改列表符號:/ 用字符串作為列表符號list1.ListSymbol = *;/ 用Chunk 作為列表符號(包含“”字符)list2.ListSymbol = new Chunk(u2022, FontFactory.getFont(FontFactory.HELVETICA, 20);/用圖片作為列表符號list3.ListSymbol = new Chunk(Image.ge
48、tInstance(myBullet.gif), 0, 0);還可以使用setIndentationLeft和setIndentationRight方法設置縮排,列表符號的縮排在構造函數(shù)中設置。更多的例子請參見示例代碼0302。注釋iText支持不同風格的注釋。u 文本注釋:你可以添加一小段文本到你的文檔中,但它并非文檔內(nèi)容的一部分,注釋有標題和內(nèi)容:Annotation a = new Annotation(authors,Maybe its because I wanted to be an author myself that I wrote iText.);u 外部鏈接注釋:你需要指定
49、一個可點擊的矩形和一個字符串(URL描述)或URL對象:Annotation annot = new Annotation(100f, 700f, 200f, 800f, new URL();Annotation annot = new Annotation(100f, 700f, 200f, 800f, );u 外部PDF文件鏈接注釋:你需要指定一個可點擊的矩形和一個字符串(文件名稱)和目的文件或頁碼。Annotation annot = new Annotation(100f, 700f, 200f, 800f, other.pdf, mark);Annotation annot = ne
50、w Annotation(100f, 700f, 200f, 800f, other.pdf, 2);u 指定行為鏈接注釋你需要指定一個可點擊的矩形和一個指定的行為:Annotation annot = new Annotation(100f, 700f, 200f, 800f, PdfAction.FIRSTPAGE);u 應用程序鏈接注釋:你需要指定一個可點擊的矩形和一個應用程序:Annotation annot = new Annotation(300f, 700f, 400f, 800f, C:/winnt/notepad.exe, null, null, null);我們無須在頁面上
51、指定一個位置,iText會內(nèi)部處理。你能夠看到iText添加文本注釋在頁面上當前位置下面,第一個在段后第一行下面,第二個在短句結束處的下面。所有其他注釋需要指定想匹配的矩形區(qū)域,在示例代碼0304中,我們畫了一些正方形(使用的函數(shù)將在第十章中介紹),為每個正方形添加了一些鏈接注釋。第四章 頁眉頁腳、章節(jié)、區(qū)域和繪圖對象使用在第三至第五章中描述的大量簡單iText對象可以避免更多的高級話題(第九至十二章),緊記這些簡單對象限制的功能,大量復雜的功能在第三部分。頁眉頁腳HeaderFooter對象可以于為文檔每頁添加頁眉和頁腳。這樣一個頁眉或頁腳包含一個標準的短句(如果需要)和當前頁碼,如果你需要
52、更多復雜的頁眉和頁腳(使用表格或者第幾頁共幾頁),請閱讀第十二章。在示例代碼0401中,你可以看到我們首先添加了一個包含頁碼沒有任何邊框的頁腳。HeaderFooter footer = new HeaderFooter(new Phrase(This is page: ), true);footer.Border = Rectangle.NO_BORDER;document.Footer = footer我們還可以使用下面的構造函數(shù):HeaderFooter footer = new HeaderFooter(new Phrase(This is page ), new Phrase(.);
53、構造函數(shù)知道你希望添加一個頁碼和將其放置在兩個短句間,如果你只是設置一個HeaderFooter而不改變邊框,頁眉或頁腳的文本上下各有一條直線。HeaderFooter header = new HeaderFooter(new Phrase(This is a header without a page number), false);document.Header = header;章節(jié)和區(qū)域在第十一章中將描述如何構建一個樹的外觀,如果你只需要一個簡單的章節(jié)和(子)區(qū)域,你可以用Chapter對象和Section對象自動構建一個樹:Paragraph cTitle = new Paragr
54、aph(This is chapter 1, chapterFont);Chapter chapter = new Chapter(cTitle, 1);Paragraph sTitle = new Paragraph(This is section 1 in chapter 1, sectionFont);Section section = chapter.addSection(sTitle, 1);在示例代碼0402中,我們添加了一系列的章節(jié)和子區(qū)域,你可以看到完整的樹形,樹形結構默認打開,如果你希望部分節(jié)點關閉,你必須使用用BookmarkOpen屬性其值為false,詳見示例代碼040
55、3。圖形如果你想添加圖形,如直線、圓、幾何窗體,你應該閱讀讀十章,但如果你只需要一些有限的功能,你可以使用Graphic對象Graphic grx = new Graphic();/添加一個矩形grx.rectangle(100, 700, 100, 100);/ 添加一條斜線grx.moveTo(100, 700);grx.lineTo(200, 800);/ 將圖形顯示出來grx.stroke();document.Add(grx);完整的代碼請見示例代碼0404,如果想看到全部的方法,請參見PdfContentByte對象API。當你想給頁面加一個邊框或者在文本當前位置畫一條水平線時,圖形對象非常有用。下面的方法用指定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告安裝委托合同7篇
- 過戶車輛轉讓協(xié)議與運動員參賽合同8篇
- 2025年南昌貨運從業(yè)資格證模擬考試試題題庫答案
- 項目啟動會議紀要與決策記錄
- 中秋福利采購合同
- 委托代理進口合同協(xié)議書
- 2025年天津貨運上崗證考試考哪些科目
- 2025年蚌埠駕??荚囏涍\從業(yè)資格證考試題庫
- f2025二手商鋪買賣合同8篇
- 《2.2分子結構與物質(zhì)的性質(zhì)》說課稿
- 2024-2025學年新教材高中化學 第三章 鐵 金屬材料 2.1 合金說課稿 新人教版必修1
- 浙江省杭州市2023-2024學年七年級上學期期末考試數(shù)學試題(含答案)
- 品牌全球化體育營銷趨勢洞察報告 2024
- 安徽省蕪湖市普通高中2025屆高考全國統(tǒng)考預測密卷物理試卷含解析
- 第2課++生涯規(guī)劃+筑夢未來(課時2)【中職專用】中職思想政治《心理健康與職業(yè)生涯》高效課堂 (高教版基礎模塊)
- 臨床診療指南(急診醫(yī)學)
- 人教PEP英語五年級下冊全冊教案(表格教學設計)
- DZ∕T 0219-2006 滑坡防治工程設計與施工技術規(guī)范(正式版)
- 密目網(wǎng)覆蓋施工方案
- 家族族譜資料收集表
- 放射科護士講課
評論
0/150
提交評論