副标题#e#
一、媒介
在企业的信息系统中,报表处理惩罚一直占较量重要的浸染,本文将先容一种生成PDF报表的Java组件–iText。通过在处事器端利用Jsp或JavaBean生成PDF报表,客户端回收超等毗连显示或下载获得生成的报表,这样就很好的办理了B/S系统的报表处理惩罚问题。
二、iText简介
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不只可以生成PDF或rtf的文档,并且可以将XML、Html文件转化为PDF文件。
iText的安装很是利便,在http://www.lowagie.com/iText/download.html – download 网站上下载iText.jar文件后,只需要在系统的CLASSPATH中插手iText.jar的路径,在措施中就可以利用iText类库了。
三、成立第一个PDF文档
用iText生成PDF文档需要5个步调:
①成立com.lowagie.text.Document工具的实例。
Document document = new Document();
②成立一个书写器(Writer)与document工具关联,通过书写器(Writer)可以将文档写入到磁盘中。
PDFWriter.getInstance(document, new FileOutputStream("Helloworld.PDF"));
③打开文档。
document.open();
④向文档中添加内容。
document.add(new Paragraph("Hello World"));
⑤封锁文档。
document.close();
通过上面的5个步调,就能发生一个Helloworld.PDF的文件,文件内容为"Hello World"。
成立com.lowagie.text.Document工具的实例
com.lowagie.text.Document工具的构建函数有三个,别离是:
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom);
构建函数的参数pageSize是文档页面的巨细,对付第一个构建函数,页面的巨细为A4,同Document(PageSize.A4)的结果一样;对付第三个构建函数,参数marginLeft、marginRight、marginTop、marginBottom别离为左、右、上、下的页边距。
通过参数pageSize可以设定页面巨细、面配景致、以及页面横向/纵向等属性。iText界说了A0-A10、AL、LETTER、HALFLETTER、_11x17、LEDGER、NOTE、B0-B5、ARCH_A-ARCH_E、FLSA 和FLSE等纸张范例,也可以通过Rectangle pageSize = new Rectangle(144, 720);自界说纸张。通过Rectangle要领rotate()可以将页面配置成横向。
#p#副标题#e#
书写器(Writer)工具
一旦文档(document)工具成立好之后,需要成立一个或多个书写器(Writer)工具与之关联。通过书写器(Writer)工具可以将详细文档存盘成需要的名目,如com.lowagie.text.PDF.PDFWriter可以将文档存成PDF文件,com.lowagie.text.html.HtmlWriter可以将文档存成html文件。
设定文档属性
在文档打开之前,可以设定文档的标题、主题、作者、要害字、装订方法、建设者、出产者、建设日期等属性,挪用的要领别离是:
public boolean addTitle(String title)
public boolean addSubject(String subject)
public boolean addKeywords(String keywords)
public boolean addAuthor(String author)
public boolean addCreator(String creator)
public boolean addProducer()
public boolean addCreationDate()
public boolean addHeader(String name, String content)
个中要领addHeader对付PDF文档无效,addHeader仅对html文档有效,用于添加文档的头信息。
当新的页面发生之前,可以设定页面的巨细、书签、脚注(HeaderFooter)等信息,挪用的要领是:
public boolean setPageSize(Rectangle pageSize)
public boolean add(Watermark watermark)
public void removeWatermark()
public void setHeader(HeaderFooter header)
public void resetHeader()
public void setFooter(HeaderFooter footer)
public void resetFooter()
public void resetPageCount()
public void setPageCount(int pageN)
假如要设定第一页的页面属性,这些要领必需在文档打开之前挪用。
对付PDF文档,iText还提供了文档的显示属性,通过挪用书写器的setViewerPreferences要领可以节制文档打开时Acrobat Reader的显示属性,如是否单页显示、是否全屏显示、是否埋没状态条等属性。
别的,iText也提供了对PDF文件的安详掩护,通过书写器(Writer)的setEncryption要领,可以设定文档的用户口令、只读、可打印等属性。
添加文档内容
所有向文档添加的内容都是以工具为单元的,如Phrase、Paragraph、Table、Graphic工具等。较量常用的是段落(Paragraph)工具,用于向文档中添加一段文字。
四、文本处理惩罚
iText顶用文本块(Chunk)、短语(Phrase)和段落(paragraph)处理惩罚文本。
文本块(Chunk)是处理惩罚文本的最小单元,有一串带名目(包罗字体、颜色、巨细)的字符串构成。如以下代码就是发生一个字体为HELVETICA、巨细为10、带下划线的字符串:
Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE));
#p#分页标题#e#
短语(Phrase)由一个或多个文本块(Chunk)构成,短语(Phrase)也可以设定字体,但对付个中以设定过字体的文本块(Chunk)无效。通过短语(Phrase)成员函数add可以将一个文本块(Chunk)加到短语(Phrase)中,如:phrase6.add(chunk);
段落(paragraph)由一个或多个文本块(Chunk)或短语(Phrase)构成,相当于WORD文档中的段落观念,同样可以设定段落的字体巨细、颜色等属性。别的也可以设定段落的首行缩进、对齐方法(左对齐、右对齐、居中对齐)。通过函数setAlignment可以设定段落的对齐方法,setAlignment的参数1为居中对齐、2为右对齐、3为左对齐,默认为左对齐。
五、表格处理惩罚
iText中处理惩罚表格的类为:com.lowagie.text.Table和com.lowagie.text.PDF.PDFPTable,对付较量简朴的表格处理惩罚可以用com.lowagie.text.Table,可是假如要处理惩罚巨大的表格,这就需要com.lowagie.text.PDF.PDFPTable举办处理惩罚。这里就类com.lowagie.text.Table举办说明。
类com.lowagie.text.Table的结构函数有三个:
①Table (int columns)
②Table(int columns, int rows)
③Table(Properties attributes)
参数columns、rows、attributes别离为表格的列数、行数、表格属性。建设表格时必需指定表格的列数,而对付行数可以不消指定。
成立表格之后,可以设定表格的属性,如:边框宽度、边框颜色、衬距(padding space 即单位格之间的间距)巨细等属性。下面通过一个简朴的例子说明如何利用表格,代码如下:
1:Table table = new Table(3);
2:table.setBorderWidth(1);
3:table.setBorderColor(new Color(0, 0, 255));
4:table.setPadding(5);
5:table.setSpacing(5);
6:Cell cell = new Cell("header");
7:cell.setHeader(true);
8:cell.setColspan(3);
9:table.addCell(cell);
10:table.endHeaders();
11:cell = new Cell("example cell with colspan 1 and rowspan 2");
12:cell.setRowspan(2);
13:cell.setBorderColor(new Color(255, 0, 0));
14:table.addCell(cell);
15:table.addCell("1.1");
16:table.addCell("2.1");
17:table.addCell("1.2");
18:table.addCell("2.2");
19:table.addCell("cell test1");
20:cell = new Cell("big cell");
21:cell.setRowspan(2);
22:cell.setColspan(2);
23:table.addCell(cell);
24:table.addCell("cell test2");
运行功效如下:
header | ||
example cell with colspan 1 and rowspan 2 | 1.1 | 2.1 |
1.2 | 2.2 | |
cell test1 | big cell | |
cell test2 |
代码1-5行用于新建一个表格,如代码所示,成立了一个列数为3的表格,并将边框宽度设为1,颜色为蓝色,衬距为5。
代码6-10行用于设定表格的表头,第7行cell.setHeader(true);是将该单位格作为表头信息显示;第8行cell.setColspan(3);指定了该单位格占3列;为表格添加表头信息时,要留意的是一旦表头信息添加完了之后,必需挪用endHeaders()要领,如第10行,不然当表格跨页后,表头信息不会再显示。
代码11-14行是向表格中添加一个宽度占一列,长度占二行的单位格。
往表格中添加单位格(cell)时,按自左向右、从上而下的序次添加。如执行完11行代码后,表格的右下方呈现2行2列的空缺,这是再往表格添加单位格时,先填满这个空缺,然后再另起一行,15-24行代码说明白这种添加顺序。
六、图像处理惩罚
iText中处理惩罚表格的类为com.lowagie.text.Image,今朝iText支持的图像名目有:GIF, Jpeg, PNG, wmf等名目,对付差异的图像名目,iText用同样的结构函数自动识别图像名目。通过下面的代码别离得到gif、jpg、png图像的实例。
Image gif = Image.getInstance("vonnegut.gif");
Image jpeg = Image.getInstance("myKids.jpg");
Image png = Image.getInstance("hitchcock.png");
图像的位置
图像的位置主要是指图像在文档中的对齐方法、图像和文本的位置干系。IText中通过函数public void setAlignment(int alignment)举办处理惩罚,参数alignment为Image.RIGHT、Image.MIDDLE、Image.LEFT别离指右对齐、居中、左对齐;当参数alignment为Image.TEXTWRAP、Image.UNDERLYING别离指文字绕图形显示、图形作为文字的配景显示。这两种参数可以团结以到达预期的结果,如setAlignment(Image.RIGHT|Image.TEXTWRAP)显示的结果为图像右对齐,文字环绕图像显示。
图像的尺寸和旋转
假如图像在文档中不按原尺寸显示,可以通过下面的函数举办设定:
public void scaleAbsolute(int newWidth, int newHeight)
public void scalePercent(int percent)
public void scalePercent(int percentX, int percentY)
#p#分页标题#e#
函数public void scaleAbsolute(int newWidth, int newHeight)直接设定显示尺寸;函数public void scalePercent(int percent)设定显示比例,如scalePercent(50)暗示显示的巨细为原尺寸的50%;而函数scalePercent(int percentX, int percentY)则图像高宽的显示比例。
假如图像需要旋转必然角度之后在文档中显示,可以通过函数public void setRotation(double r)设定,参数r为弧度,假如旋转角度为30度,则参数r= Math.PI / 6。
七、中文处理惩罚
默认的iText字体配置不支持中文字体,需要下载远东字体包iTextAsian.jar,不然不能往PDF文档中输出中文字体。通过下面的代码就可以在文档中利用中文了:
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);
Paragraph pragraph=new Paragraph("你好", FontChinese);
八、后计
iText尚有许多高级的成果,这里就纷歧一先容了,详细开拓时可参考宣布的文档。总的来说,iText是一套java情况下不错的建造PDF的组件。因为iText支持jsp/javabean下的开拓,这使得B/S应用中的报表问题能获得很好的办理。由于iText究竟不是专门为建造报表设计,所有报表中的内容、名目都需要通过写代码实现,相对付那些专业的支持可视化设计的报表软件来说,编程的事情量就有必然水平的增加。