版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
17.1完全用iText編程生成含報表的PDF文檔17.1.1用iText通過直接編程生成PDF文檔步驟(1)建立com.lowagie.text.Document對象。例如:
Documentdocument=newDocument();(2)建立一個與document對象關(guān)聯(lián)的書寫器(Writer)。例如:
PDFWriter.getInstance(document,newFileOutputStream("Helloworld.PDF"));(3)打開文檔。document.open();(4)向文檔中添加內(nèi)容。document.add(newParagraph("HelloWorld"));//添加一個段落(5)關(guān)閉文檔。
document.close();17.1.2Document對象簡介Document有三種構(gòu)造函數(shù):Document():生成的文檔將自動采用A4大小的紙張。Document(RectanglepageSize):可以定義紙張的大小。Document(RectanglepageSize,floatmarginLeft,floatmarginRight,floatmarginTop,floatmarginBottom):該構(gòu)造方法不僅可以定義紙張大小,而且還能定義頁面的左右上下邊距。以下定義一個Document對象,頁面大小為A4,四周邊距均為50。
Documentdocument=newDocument(PageSize.A4,50,50,50,50);如果頁面需要采用橫排模式,只要修改第一個參數(shù)就行:
Documentdoc=newDocument(PageSize.A4.rotate(),50,50,50,50);document對象的方法newPage():換頁booleanaddTitle(Stringtitle)//標題booleanaddSubject(Stringsubject)//主題booleanaddKeywords(Stringkeywords)//關(guān)鍵字booleanaddAuthor(Stringauthor)//作者booleanaddCreationDate()//創(chuàng)建日期booleansetPageSize(RectanglepageSize)//頁面大小booleanadd(Watermarkwatermark)//增加水印voidremoveWatermark()//刪除水印voidsetHeader(HeaderFooterheader)//頁面頭部標注voidsetFooter(HeaderFooterfooter)//腳注voidsetPageCount(intpageN)//頁數(shù)17.1.3書寫器(Writer)對象通過書寫器(Writer)對象可以將具體文檔存盤成需要的格式,PDFWriter可以將文檔存成PDF文件,HtmlWriter可以將文檔存成html文件。例如:
PdfWriterwriter=PdfWriter.getInstance(document,
newFileOutputStream("d:/user/記錄表1.pdf"));17.1.4文本處理所有向文檔添加的內(nèi)容都是以對象為單位的,iText中用文本塊(Chunk)、短語(Phrase)和段落(paragraph)處理文本。值得注意的是文本中漢字的顯示,默認的iText字體設(shè)置不支持中文字體,需要下載遠東字體包iTextAsian.jar,否則不能往PDF文檔中輸出中文字體。有的網(wǎng)站提供的iTextAsian.jar包中使用的是以前iText-2.1.3.jar一樣的包名,與現(xiàn)在iText5.0包名不符,要解開進行處理,將其中包路徑com.lowagie.text.Font改為com.itextpdf.text.Font,然后,重新打包即可。1.文本塊(Chunk)文本塊(Chunk)是處理文本的最小單位,可以為Chunk對象指定顏色,字體。例如,以下產(chǎn)生一個字體為HELVETICA、大小為10、帶下劃線的字符串:
Chunkchunk1=newChunk("ZipCode",FontFactory.getFont(FontFactory.HELVETICA,12,Font.UNDERLINE));2.短語(Phrase)短語(Phrase)由一個或多個文本塊(Chunk)組成,短語(Phrase)也可以設(shè)定字體,但對于其中已經(jīng)設(shè)定過字體的文本塊(Chunk)無效。以下為Phrase的構(gòu)造方法:Phrase(Stringstring)Phrase(Stringstring,Fontfont)Phrase(floatleading,Stringstring)其中,參數(shù)leading設(shè)置的是Phrase對象的行間距。通過短語(Phrase)的add方法可以將一個文本塊(Chunk)加到短語(Phrase)中。3.段落(paragraph)段落(paragraph)由一個或多個文本塊(Chunk)或短語(Phrase)組成,相當于WORD文檔中的段落概念,同樣可以設(shè)定段落的字體大小、顏色等屬性。定義好一個Paragraph對象之后,將其加入文檔中。例如:
Paragraphp=newParagraph();Chunkchunk=newChunk("Title");
p.add(chunk);
document.add(p);另外也可以設(shè)定段落的首行縮進、對齊方式(左對齊、右對齊、居中對齊)。通過方法setAlignment可以設(shè)定段落的對齊方式,例如:
p.setAlignment(Element.ALIGN_JUSTIFIED);//對齊方式
p.setIndentationLeft(15f);//左側(cè)縮進距離
p.setSpacingBefore(15f);//段前間距
p.setSpacingAfter(5f);//段后間距4.List類文檔中可加入List對象,List類實現(xiàn)的效果類似于Word中的“項目符號和編號”。以下通過List的構(gòu)造方法創(chuàng)建一個List對象。
Listmy=newList(true,false,10);
【說明】構(gòu)造方法的第1個參數(shù)指明是否為有編號的列表,true表示創(chuàng)建的是有編號的列表;第2個參數(shù)表示是否采用字母進行編號,true為字母,false為數(shù)字;第3個參數(shù)是列表的縮進量。列表由列表項(ListItem)組成,通過List的add()方法可將列表項加入列表中。
my.add(newListItem("Firstitemoflist"));
my.add(newListItem("Seconditemoflist"));也可以直接將一個字符串加入List列表,或者在列表中加入另一個列表對象。17.1.5表格處理類com.lowagie.text.Table的構(gòu)造方法有3個:Table(intcolumns)Table(intcolumns,introws)Table(Propertiesattributes)其中,參數(shù)columns、rows、attributes分別為表格的列數(shù)、行數(shù)、表格屬性。創(chuàng)建表格時必須指定表格的列數(shù),而對于行數(shù)可以不用指定。建立表格后,可以設(shè)定表格的屬性,例如:
Tablet=newTable(3,2);//創(chuàng)建3列2行的表格
t.setBorderColor(Color.white);//設(shè)置邊框顏色
t.setPadding(5);//設(shè)置填充間隙
t.setBorderWidth(1);//設(shè)置邊框?qū)挾?/p>
表格是有一個個單元格組成的。以下為單元格的創(chuàng)建以及將其加入表格的方法。
Cellc1=newCell("Header1");t.addCell(c1);它將在表格的第1行第1列中寫入了內(nèi)容“Header1”。默認加入順序是按從左到右、從上到下的順序。用以下方法可指定單元格的加入位置。addCell(CellaCell,introw,intcolumn)addCell(CellaCell,PointaLocation)用insertTable(Tabletable)方法可以將一個表格加入另一個表格中,實現(xiàn)表格嵌套。2.使用PdfPTable類生成表格創(chuàng)建PdfPTable對象只需要指定列數(shù),不用指定行數(shù)。例如:
PdfPTabletable=newPdfPTable(3);//創(chuàng)建一個3列的表格。(1)設(shè)定表格寬度通常生成的表格默認以80%的比例顯示在頁面上,用setWidthPercentage(floatwidthPercentage)方法可設(shè)置表格的按百分比的寬度。而用setTotalWidth則可設(shè)置表格按像素計算的寬度。例如:以下設(shè)定寬度為300px,如果表格的內(nèi)容超過了300px,表格的寬度會自動加長。
table.setTotalWidth(300);創(chuàng)建表格時也可指定每一列的寬度。例如,以下定義含3列的表格,每列的寬度分別為15%、25%、60%。float[]widths={15f,25f,60f};PdfPTabletable=newPdfPTable(widths);如果要鎖定表格寬度可使用如下方法:
table.setLockedWidth(true)獲取表格列和行相關(guān)的信息getTotalHeight():獲取高度;getTotalWidth():獲取寬度;getRowHeight(idx):獲取某行高度;getRows();獲取所有行,返回一個ArrayList<PRow>的列表;getNumberOfColumns():獲取欄數(shù)。設(shè)置表格的邊界以及對齊、填充方式table.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);//水平居左
table.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中
table.setAutoFillEmptyCells(true);//自動填滿
table.setPadding(1);//數(shù)據(jù)內(nèi)容與邊框的間隙
table.setBorder(0);//表格邊界(2)添加單元格使用表格對象的addCell(Objectobject)方法插入元素,其中,Object對象可以是PdfPCell(單元格)、String、Phrase、Image,也可以是PdfPTable對象,實現(xiàn)表格嵌套。單元格的常用方法包括:setColspan(intn):設(shè)置單元格的列跨度。setBorder(intn):設(shè)置單元格的邊框粗細。setVerticalAlignment(intv):設(shè)置單元格的垂直對齊方式。setHorizontalAlignment(inth):設(shè)置單元格的水平對齊方式。setPadding(floatpadding):設(shè)置單元格的填充間隙。setFixedHeight(floatheight):設(shè)置單元格的絕對高度。【程序清單17-1】繪制簡易檢測記錄表importjava.io.FileOutputStream;importcom.itextpdf.text.*;importcom.itextpdf.text.pdf.*;publicclassItextPrint{
publicstaticvoidmain(Stringa[]){
Documentdocument=newDocument();
try{
PdfWriter.getInstance(document,
newFileOutputStream("d:/score.pdf"));
document.open();
document.addAuthor("丁振凡");
BaseFontbfChinese=BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//字體定義
FontFontChinese=newFont(bfChinese,10,Font.BOLD);
FontFontChinese1=newFont(bfChinese,20,Font.BOLD);
float[]widths={60f,60f,60f};
PdfPTablet=newPdfPTable(widths);
//以下設(shè)置表格單元格的水平對齊方式為居中對齊
t.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
Paragraphtitle1=newParagraph("檢測記錄表",FontChinese1);
title1.setSpacingAfter(5f);//段后間距
title1.setAlignment(Element.ALIGN_CENTER);
document.add(title1);
t.addCell(newPhrase("Ⅰ低速",FontChinese));
t.addCell(newPhrase("1U1K",FontChinese));
t.addCell("");
t.addCell(newPhrase("Ⅰ高速",FontChinese));
t.addCell(newPhrase("2U1K",FontChinese));
t.addCell("");
……
document.add(t);
}catch(Exceptionde){ }
document.close();
}}(3)合并單元格
PdfPCell類提供了setColspan(intcolspan)方法用于合并橫向單元格,參數(shù)colspan為合并的單元格數(shù)。但要合并縱向單元格需要使用嵌套表格的方法。將某個子表加入單元格,且安排單元格所占列數(shù)為子表中列數(shù),則其行跨度也就是子表中的行數(shù)。(4)表頭處理通常的表格都需要一個表頭,定義表格的每一列所代表的含義。表頭的內(nèi)容也是通過table.addCell()方法添加到表格中的,完成之后調(diào)用table.setHeaderRows(1)方法告訴程序這一行是表頭。當表內(nèi)容很大,一頁無法顯示時,程序會自動將表格進行分頁,并且會在每一頁的表格頭部都加上表頭。17.1.6圖像處理iText中處理圖像的類為com.lowagie.text.Image,目前iText支持的圖像格式有:GIF、JPEG、PNG、WMF等格式,iText將自動識別圖像格式。用以下方法獲取圖像實例。Imageimg=Image.getInstance("sun.gif");圖像對象的常用方法有:
voidsetAlignment(intalignment):設(shè)置圖像的對齊方式。當參數(shù)alignment為Image.TEXTWRAP、Image.UNDERLYING分別指文字繞圖形顯示、圖形作為文字的背景顯示。voidscaleAbsolute(intnewWidth,intnewHeight):設(shè)定顯示絕對尺寸voidscalePercent(intpercent):設(shè)定顯示比例。voidscalePercent(intpercentX,intpercentY):設(shè)定圖像高寬的顯示比例。voidsetRotation(doubler):旋轉(zhuǎn)一定角度,參數(shù)r為弧度。17.2基于PDF報表模板的報表填寫處理基于報表模板的報表處理步驟如下:(1)利用Word制作打印報表;(2)利用AdobeAcrobat7.0Professional將Word文檔轉(zhuǎn)換為PDF格式;(3)利用AdobeDesigner7.0對PDF進行設(shè)計,定義數(shù)據(jù)域;(4)利用iText組件實現(xiàn)對報表數(shù)據(jù)字段的寫入?!境绦蚯鍐?7-2】給PDF報表模板填寫數(shù)據(jù)PdfReaderr=newPdfReader("d:\\預(yù)檢模板(DC600V方式).pdf");PdfStampers=newPdfStamper(r,newFileOutputStream("d:\\結(jié)果.pdf"));AcroFieldsform=s.getAcroFields();Stringx[]=detectlog.getYjdata(date,cheNumber,code);//讀取數(shù)據(jù)庫數(shù)據(jù)form.setField("日期",x[1]);form.setField("修程",x[2]);form.setField("工長",x[3]);form.setField("檢測員",x[4]);form.setField("相對濕度",x[5]);17.3在Spring3.1中使用PDF視圖在Web應(yīng)用開發(fā)中,有時需要動態(tài)生成PDF視圖作為報表輸出。Spring3.1提供了AbstractPdfView抽象類用于生成PDF格式視圖,通過編寫覆蓋buildPdfDocument方法可將產(chǎn)生的PDF文檔送客戶端。該方法形態(tài)如下:buildPdfDocument(Mapmap,Documentdoc,PdfWriterwriter,
HttpServletRequestreq,HttpServletResponseresp)其中,Map代表模型,Document代表要生成的文檔,PdfWriter為書寫器。以打印某班的學生名單為例publicclassPdfViewextendsAbstractPdfView{publicvoidbuildPdfDocument(Mapmap,Documentdoc,PdfWriterwriter,
H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢校外合同范例
- 出售電腦分切機合同范例
- 天津濱海汽車工程職業(yè)學院《有機合成化學》2023-2024學年第一學期期末試卷
- 新型叉車采購合同范例
- 天府新區(qū)信息職業(yè)學院《體育-拓展訓練》2023-2024學年第一學期期末試卷
- 合作拿提成合同范例
- 用車勞動合同范例
- 分期訂購房車合同范例
- 書出版合同范例 單位
- 園區(qū)總承包施工合同范例
- 教育機構(gòu)合作伙伴招募方案
- 高校實驗室安全基礎(chǔ)學習通超星期末考試答案章節(jié)答案2024年
- 大學生心理健康教育學習通超星期末考試答案章節(jié)答案2024年
- 2022年農(nóng)業(yè)銀行法人信貸理論知識考試題庫(含答案)
- 2024年秋國家開放大學會計信息系統(tǒng)(本)客觀題及答案
- 在線招聘平臺人才匹配算法優(yōu)化與應(yīng)用推廣
- 重慶B卷歷年中考語文現(xiàn)代文閱讀之非連續(xù)性文本閱讀5篇(含答案)(2003-2023)
- 干部任免審批表樣表
- DB62T 4872-2024 養(yǎng)老護理員培訓基地建設(shè)規(guī)范
- 2024年大學班主任工作總結(jié)經(jīng)典版(4篇)
- 冬季防凍防滑防火安全教育主題班會市公開課一等獎省賽課微課金獎?wù)n件
評論
0/150
提交評論