《Spring编程技术与应用》课件17_第1页
《Spring编程技术与应用》课件17_第2页
《Spring编程技术与应用》课件17_第3页
《Spring编程技术与应用》课件17_第4页
《Spring编程技术与应用》课件17_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

17.1完全用iText编程生成含报表的PDF文档17.1.1用iText通过直接编程生成PDF文档步骤(1)建立com.lowagie.text.Document对象。例如:

Documentdocument=newDocument();(2)建立一个与document对象关联的书写器(Writer)。例如:

PDFWriter.getInstance(document,newFileOutputStream("Helloworld.PDF"));(3)打开文档。document.open();(4)向文档中添加内容。document.add(newParagraph("HelloWorld"));//添加一个段落(5)关闭文档。

document.close();17.1.2Document对象简介Document有三种构造函数:Document():生成的文档将自动采用A4大小的纸张。Document(RectanglepageSize):可以定义纸张的大小。Document(RectanglepageSize,floatmarginLeft,floatmarginRight,floatmarginTop,floatmarginBottom):该构造方法不仅可以定义纸张大小,而且还能定义页面的左右上下边距。以下定义一个Document对象,页面大小为A4,四周边距均为50。

Documentdocument=newDocument(PageSize.A4,50,50,50,50);如果页面需要采用横排模式,只要修改第一个参数就行:

Documentdoc=newDocument(PageSize.A4.rotate(),50,50,50,50);document对象的方法newPage():换页booleanaddTitle(Stringtitle)//标题booleanaddSubject(Stringsubject)//主题booleanaddKeywords(Stringkeywords)//关键字booleanaddAuthor(Stringauthor)//作者booleanaddCreationDate()//创建日期booleansetPageSize(RectanglepageSize)//页面大小booleanadd(Watermarkwatermark)//增加水印voidremoveWatermark()//删除水印voidsetHeader(HeaderFooterheader)//页面头部标注voidsetFooter(HeaderFooterfooter)//脚注voidsetPageCount(intpageN)//页数17.1.3书写器(Writer)对象通过书写器(Writer)对象可以将具体文档存盘成需要的格式,PDFWriter可以将文档存成PDF文件,HtmlWriter可以将文档存成html文件。例如:

PdfWriterwriter=PdfWriter.getInstance(document,

newFileOutputStream("d:/user/记录表1.pdf"));17.1.4文本处理所有向文档添加的内容都是以对象为单位的,iText中用文本块(Chunk)、短语(Phrase)和段落(paragraph)处理文本。值得注意的是文本中汉字的显示,默认的iText字体设置不支持中文字体,需要下载远东字体包iTextAsian.jar,否则不能往PDF文档中输出中文字体。有的网站提供的iTextAsian.jar包中使用的是以前iText-2.1.3.jar一样的包名,与现在iText5.0包名不符,要解开进行处理,将其中包路径com.lowagie.text.Font改为com.itextpdf.text.Font,然后,重新打包即可。1.文本块(Chunk)文本块(Chunk)是处理文本的最小单位,可以为Chunk对象指定颜色,字体。例如,以下产生一个字体为HELVETICA、大小为10、带下划线的字符串:

Chunkchunk1=newChunk("ZipCode",FontFactory.getFont(FontFactory.HELVETICA,12,Font.UNDERLINE));2.短语(Phrase)短语(Phrase)由一个或多个文本块(Chunk)组成,短语(Phrase)也可以设定字体,但对于其中已经设定过字体的文本块(Chunk)无效。以下为Phrase的构造方法:Phrase(Stringstring)Phrase(Stringstring,Fontfont)Phrase(floatleading,Stringstring)其中,参数leading设置的是Phrase对象的行间距。通过短语(Phrase)的add方法可以将一个文本块(Chunk)加到短语(Phrase)中。3.段落(paragraph)段落(paragraph)由一个或多个文本块(Chunk)或短语(Phrase)组成,相当于WORD文档中的段落概念,同样可以设定段落的字体大小、颜色等属性。定义好一个Paragraph对象之后,将其加入文档中。例如:

Paragraphp=newParagraph();Chunkchunk=newChunk("Title");

p.add(chunk);

document.add(p);另外也可以设定段落的首行缩进、对齐方式(左对齐、右对齐、居中对齐)。通过方法setAlignment可以设定段落的对齐方式,例如:

p.setAlignment(Element.ALIGN_JUSTIFIED);//对齐方式

p.setIndentationLeft(15f);//左侧缩进距离

p.setSpacingBefore(15f);//段前间距

p.setSpacingAfter(5f);//段后间距4.List类文档中可加入List对象,List类实现的效果类似于Word中的“项目符号和编号”。以下通过List的构造方法创建一个List对象。

Listmy=newList(true,false,10);

【说明】构造方法的第1个参数指明是否为有编号的列表,true表示创建的是有编号的列表;第2个参数表示是否采用字母进行编号,true为字母,false为数字;第3个参数是列表的缩进量。列表由列表项(ListItem)组成,通过List的add()方法可将列表项加入列表中。

my.add(newListItem("Firstitemoflist"));

my.add(newListItem("Seconditemoflist"));也可以直接将一个字符串加入List列表,或者在列表中加入另一个列表对象。17.1.5表格处理类com.lowagie.text.Table的构造方法有3个:Table(intcolumns)Table(intcolumns,introws)Table(Propertiesattributes)其中,参数columns、rows、attributes分别为表格的列数、行数、表格属性。创建表格时必须指定表格的列数,而对于行数可以不用指定。建立表格后,可以设定表格的属性,例如:

Tablet=newTable(3,2);//创建3列2行的表格

t.setBorderColor(Color.white);//设置边框颜色

t.setPadding(5);//设置填充间隙

t.setBorderWidth(1);//设置边框宽度

表格是有一个个单元格组成的。以下为单元格的创建以及将其加入表格的方法。

Cellc1=newCell("Header1");t.addCell(c1);它将在表格的第1行第1列中写入了内容“Header1”。默认加入顺序是按从左到右、从上到下的顺序。用以下方法可指定单元格的加入位置。addCell(CellaCell,introw,intcolumn)addCell(CellaCell,PointaLocation)用insertTable(Tabletable)方法可以将一个表格加入另一个表格中,实现表格嵌套。2.使用PdfPTable类生成表格创建PdfPTable对象只需要指定列数,不用指定行数。例如:

PdfPTabletable=newPdfPTable(3);//创建一个3列的表格。(1)设定表格宽度通常生成的表格默认以80%的比例显示在页面上,用setWidthPercentage(floatwidthPercentage)方法可设置表格的按百分比的宽度。而用setTotalWidth则可设置表格按像素计算的宽度。例如:以下设定宽度为300px,如果表格的内容超过了300px,表格的宽度会自动加长。

table.setTotalWidth(300);创建表格时也可指定每一列的宽度。例如,以下定义含3列的表格,每列的宽度分别为15%、25%、60%。float[]widths={15f,25f,60f};PdfPTabletable=newPdfPTable(widths);如果要锁定表格宽度可使用如下方法:

table.setLockedWidth(true)获取表格列和行相关的信息getTotalHeight():获取高度;getTotalWidth():获取宽度;getRowHeight(idx):获取某行高度;getRows();获取所有行,返回一个ArrayList<PRow>的列表;getNumberOfColumns():获取栏数。设置表格的边界以及对齐、填充方式table.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);//水平居左

table.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中

table.setAutoFillEmptyCells(true);//自动填满

table.setPadding(1);//数据内容与边框的间隙

table.setBorder(0);//表格边界(2)添加单元格使用表格对象的addCell(Objectobject)方法插入元素,其中,Object对象可以是PdfPCell(单元格)、String、Phrase、Image,也可以是PdfPTable对象,实现表格嵌套。单元格的常用方法包括:setColspan(intn):设置单元格的列跨度。setBorder(intn):设置单元格的边框粗细。setVerticalAlignment(intv):设置单元格的垂直对齐方式。setHorizontalAlignment(inth):设置单元格的水平对齐方式。setPadding(floatpadding):设置单元格的填充间隙。setFixedHeight(floatheight):设置单元格的绝对高度。【程序清单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);

//以下设置表格单元格的水平对齐方式为居中对齐

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)方法用于合并横向单元格,参数colspan为合并的单元格数。但要合并纵向单元格需要使用嵌套表格的方法。将某个子表加入单元格,且安排单元格所占列数为子表中列数,则其行跨度也就是子表中的行数。(4)表头处理通常的表格都需要一个表头,定义表格的每一列所代表的含义。表头的内容也是通过table.addCell()方法添加到表格中的,完成之后调用table.setHeaderRows(1)方法告诉程序这一行是表头。当表内容很大,一页无法显示时,程序会自动将表格进行分页,并且会在每一页的表格头部都加上表头。17.1.6图像处理iText中处理图像的类为com.lowagie.text.Image,目前iText支持的图像格式有:GIF、JPEG、PNG、WMF等格式,iText将自动识别图像格式。用以下方法获取图像实例。Imageimg=Image.getInstance("sun.gif");图像对象的常用方法有:

voidsetAlignment(intalignment):设置图像的对齐方式。当参数alignment为Image.TEXTWRAP、Image.UNDERLYING分别指文字绕图形显示、图形作为文字的背景显示。voidscaleAbsolute(intnewWidth,intnewHeight):设定显示绝对尺寸voidscalePercent(intpercent):设定显示比例。voidscalePercent(intpercentX,intpercentY):设定图像高宽的显示比例。voidsetRotation(doubler):旋转一定角度,参数r为弧度。17.2基于PDF报表模板的报表填写处理基于报表模板的报表处理步骤如下:(1)利用Word制作打印报表;(2)利用AdobeAcrobat7.0Professional将Word文档转换为PDF格式;(3)利用AdobeDesigner7.0对PDF进行设计,定义数据域;(4)利用iText组件实现对报表数据字段的写入。【程序清单17-2】给PDF报表模板填写数据PdfReaderr=newPdfReader("d:\\预检模板(DC600V方式).pdf");PdfStampers=newPdfStamper(r,newFileOutputStream("d:\\结果.pdf"));AcroFieldsform=s.getAcroFields();Stringx[]=detectlog.getYjdata(date,cheNumber,code);//读取数据库数据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应用开发中,有时需要动态生成PDF视图作为报表输出。Spring3.1提供了AbstractPdfView抽象类用于生成PDF格式视图,通过编写覆盖buildPdfDocument方法可将产生的PDF文档送客户端。该方法形态如下: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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论