javaitext页边距_iText的⽤法
⼀直以来想总结下项⽬中⽤到的itext,⽆意中发现了这篇⽂章,总结的⽐较好,所以
⼀、前⾔
在企业的信息系统中,报表处理⼀直占⽐较重要的作⽤,本⽂将介绍⼀种⽣成PDF报表的Java组件--iText。通过在服务器端使⽤Jsp或JavaBean⽣成PDF报表,客户端采⽤超级连接显⽰或下载得到⽣成的报表,这样就很好的解决了B/S系统的报表处理问题。
⼆、iText简介
iText是著名的开放源码的站点sourceforge⼀个项⽬,是⽤于⽣成PDF⽂档的⼀个java类库。通过iText不仅可以⽣成PDF或rtf的⽂档,⽽且可以将XML、Html⽂件转化为PDF⽂件。
三、建⽴第⼀个PDF⽂档
⽤iText⽣成PDF⽂档需要5个步骤:
①建⽴Document对象的实例。
Document document = new Document();
②建⽴⼀个书写器(Writer)与document对象关联,通过书写器(Writer)可以将⽂档写⼊到磁盘中。
③打开⽂档。
document.open();
④向⽂档中添加内容。
document.add(new Paragraph("Hello World"));
⑤关闭⽂档。
document.close();
通过上⾯的5个步骤,就能产⽣⼀个Helloworld.PDF的⽂件,⽂件内容为"Hello World"。
建⽴Document对象的实例
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、A
L、LETTER、HALFLETTER、_11x17、LEDGER、NOTE、B0-B5、ARCH_A-ARCH_E、FLSA和FLSE等纸张类型,也可以通过
Rectangle pageSize = new Rectangle(144, 720);⾃定义纸张。通过Rectangle⽅法rotate()可以将页⾯设置成横向。
书写器(Writer)对象
⼀旦⽂档(document)对象建⽴好之后,需要建⽴⼀个或多个书写器(Writer)对象与之关联。通过书写器(Writer)对象可以将具体⽂档存盘成需要的格式,如PDF.PDFWriter可以将⽂档存成PDF⽂件,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⽅法,可以设定⽂档的⽤户⼝令、只读、可打印等属性。
padding是外边距还是内边距
添加⽂档内容
所有向⽂档添加的内容都是以对象为单位的,如Phrase、Paragraph、Table、Graphic对象等。⽐较常⽤的是段落(Paragraph)对象,⽤于向⽂档中添加⼀段⽂字。
四、⽂本处理
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分别为表格的列数、⾏数、表格属性。创建表格时必须指定表格的列数,⽽对于⾏数可以不⽤指定。
建⽴表格之后,可以设定表格的属性,如:边框宽度、边框颜⾊、衬距(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还有很多⾼级的功能,这⾥就不⼀⼀介绍了,具体开发时可参考发布的⽂档。总的来说,iText是⼀套java环境下不错的制作PDF的组件。因为iText⽀持jsp/javabean下的开发,这使得B/S应⽤中的报表问题能得到很好的解决。由于iText毕竟不是专门为制作报表设计,所有报表中的内容、格式都需要通过写代码实现,相对于那些专业的⽀持可视化设计的报表软件来说,编程的⼯作量就有⼀定程度的增加。
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论