iText⽣成word⽂档
2017年3⽉8⽇,也就是昨天,写⼀个⽣成简单的word⽂档,我竟然写了有差不多⼀天,到处查阅资料,发现不是这个⽣成⽂档的问题,⼆是浏览器如何下载⽣成的word⽂档的问题,今天回头再看,就是柳暗花明⼜⼀村的感觉了,可能就是这样,第⼀次接触总有些茫然。下⾯就是iText的⼀个简单应⽤。
来个介绍吧:iText是著名的开放源码的站点sourceforge⼀个项⽬,是⽤于⽣成PDF⽂档的⼀个java类库。通过iText不仅可以⽣成PDF或rtf 的⽂档,⽽且可以将XML、Html⽂件转化为PDF⽂件。
第⼀步:导⼊需要的jar包,iText需要的jar包有三个
第⼆步:建⽴⼀个Document的对象,可以设置纸张的⼤⼩等等。
Document document = new Document(PageSize.A4);
第三步:建⽴⼀个书写器(Writer)与document对象关联,通过书写器(Writer)可以将⽂档写⼊到磁盘中。
//创建流,写进磁盘中,存放⽂件的位置。
FileOutputStream fos=new FileOutputStream("f://GoogleDownload/⼤数据交叉分析报告"+fileName4+".doc");
第四步:开启document对象
document.open();
第五步:开始在word⽂件中写内容,包括标题以及⽂本
BaseFont bfChinese = ateFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// 标题字体风格
Font titleFont = new Font(bfChinese, 12, Font.BOLD);
// 正⽂字体风格
Font contextFont = new Font(bfChinese, 10, Font.NORMAL);
Paragraph title = new Paragraph("⼤数据交叉验证分析报告");
// 设置标题格式对齐⽅式
title.setAlignment(Element.ALIGN_CENTER);
title.setFont(titleFont);
document.add(title);
//设置段落的格式
Paragraph paragraph = new Paragraph();
paragraph.setAlignment(Element.ALIGN_LEFT);
paragraph.setFirstLineIndent(20);
//添加段落,将页⾯div中的内容写⼊word⽂档中
String[] strs=str.split("<br>");
for(int i=0;i<strs.length;i++){
Chunk chunk=new Chunk(strs[i]+"\n");
chunk.setFont(contextFont);
paragraph.add(chunk);
}
document.add(paragraph);
//注意这⾥,应该是先创建chunk,再把他加到paragraph,然后加到document中。
iText中⽤⽂本块(Chunk)、短语(Phrase)和段落(paragraph)处理⽂本。
短语(Phrase)由⼀个或多个⽂本块(Chunk)组成,短语(Phrase)也可以设定字体,但对于其中以设定过字体的⽂本块(Chunk)⽆效。通过短语(Phrase)成员函数add可以将⼀个⽂本块(Chunk)加到短语(Phrase)中,如:phrase6.add(chunk);
段落(paragraph)由⼀个或多个⽂本块(Chunk)或短语(Phrase)组成,相当于WORD⽂档中的段落概念,
同样可以设定段落的字体⼤⼩、颜⾊等属性。另外也可以设定段落的⾸⾏缩进、对齐⽅式(左对齐、右对齐、居中对齐)。通过函数setAlignment可以设定段落的对齐⽅
式,setAlignment的参数1为居中对齐、2为右对齐、3为左对齐,默认为左对齐。
这⾥只是⼀个简单的纯⽂字的word⽂档,以后再出现表格以及图⽚的时候,会在补充的。。。
今天把在⽹上的⽐较全的itext的表格以及图⽚的处理来写上。
  ⽂本处理
  iText中⽤⽂本块(Chunk)、短语(Phrase)和段落(paragraph)处理⽂本。
⽂本块(Chunk)是处理⽂本的最⼩单位,有⼀串带格式(包括字体、颜⾊、⼤⼩)的字符串组成。如以下代码就是产⽣⼀个字体为HELVETICA、⼤⼩为10、带下划线的字符串:
Chunk chunk1 = new Chunk("This text is underlined", Font(FontFactory.HELVETICA, 12, Font.UNDERLINE));
  短语(Phrase)由⼀个或多个⽂本块(Chunk)组成,短语(Phrase)也可以设定字体,但对于其中以设定过
字体的⽂本块(Chunk)⽆效。通过短语(Phrase)成员函数add可以将⼀个⽂本块(Chunk)加到短语(Phrase)中,如:phrase6.add(chunk);
  段落(paragraph)由⼀个或多个⽂本块(Chunk)或短语(Phrase)组成,相当于WORD⽂档中的段落概念,同样可以设定段落的字体⼤⼩、颜⾊等属性。另外也可以设定段落的⾸⾏缩进、对齐⽅式(左对齐、右对齐、居中对齐)。通过函数setAlignment可以设定段落的对齐⽅式,setAlignment的参数1为居中对齐、2为右对齐、3为左对齐,默认为左对齐。
  表格处理
  iText中处理表格的类为:Table和PDF.PDFPTable,对于⽐较简单的表格处理可以⽤
Table,但是如果要处理复杂的表格,这就需要PDF.PDFPTable进⾏处理。这⾥就类
Table进⾏说明。
  类Table的构造函数有三个:
   ①Table (int columns)
   ②Table(int columns, int rows)
   ③Table(Properties attributes)
  参数columns、rows、attributes分别为表格的列数、⾏数、表格属性。创建表格时必须指定表格的列数,⽽对于⾏数可以不⽤指定。
创建html文件  建⽴表格之后,可以设定表格的属性,如:边框宽度、边框颜⾊、衬距(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);
dHeaders();
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中处理表格的类为Image,⽬前iText⽀持的图像格式有:GIF, Jpeg, PNG, wmf等格式,对于不同的图像格
式,iText⽤同样的构造函数⾃动识别图像格式。通过下⾯的代码分别获得gif、jpg、png图像的实例。
Image gif = Instance("vonnegut.gif");
Image jpeg = Instance("myKids.jpg");
Image png = Instance("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)
  函数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 = ateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
Paragraph pragraph=new Paragraph("你好", FontChinese);
  iText处理⽐较多的就是⽂本,图⽚。⾄于表格,还有其他的如poi

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。