一、下载iText组件
- 依赖jar包
iText-2.1.2u.jar包,运行程序时把这个包加入类路径中即可。
如果生成的PDF文件中需要出现中文、日文、韩文字符,则需要iTextAsian.jar包,
运行时将其导入到类路径中。
二、输出pdf的基本步骤
- 使用iText生成一个pdf的步骤如下:
1、创建Document对象
Document document = new Document();
其中,Document有3个构造方法,如下:
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft, int marginRight, int marginTop, int marginBottom);
pageSize是纸张类型的大小,通常可以使用PageSize中的常量来表示,
例如PageSize.A4表示A4纸张。
marginLeft、marginRight、marginTop、marginBottom分别是
正文距离页边的左、右、上、下的补白大小。
2、创建书写器(Writer)与document对象关联,通过书写器可以将文档写入磁盘中。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutPutStream("E:\\itext.pdf"));
3、打开文档
document.open();
4、写入文档内容
document.add(new Paragraph("Hello iText"));
写入的文档内容可以是多种类型,这里是带格式的文本Paragraph,
还可以是Phrase、Table、Graphic对象等。
5、关闭文档
document.close();
三、设置pdf文件属性
- 在打开Document对象写入内容之前,可以设置文档的属性,包括文档的标题、
主题、作者、关键字、创建者、生产者、创建日期等,方法如以下:
public boolean addTitle(String title);
public boolean addSubject(String subject);
public boolean addAuthor(String author);
public boolean addKeywords(String keywords);
public boolean addCreator(String creator);
public boolean addProducer(String producer);
public boolean addCreationDate();
四、插入文本
- iText中用文本块(Chunk)、短语(Phrase)和段落(Paragraph)处理文本:
文本块是处理文本的最小单位,由一串格式(包括字体、颜色、大小)的字符串组成。
短语由一个或多个文本块组成,短语也可以设定字体,
但对于其中已设置过字体的文本块无效。
段落由一个或多个文本块或短语组成,
相当于Word文档中的段落概念,同样可以设定段落的字体大小、颜色等属性。
另外也可以设定段落的首行缩进、对齐方式(左对齐、右对齐、居中对齐)。
new Paragraph("Hello World, Hello iText",
FontFactory.getFont(FontFactory.COURIER, 12, Font.BOLDITALIC));
除了字体外,还可以设置段落的缩进等属性,这些方法如下:
public void setAlignment(int alignment):
设置对齐方式,1为居中对齐,2为右对齐,3为左对齐,默认为左对齐。
public void setFirstLineIndent(float firstLineIndent):设置首行缩进。
public void setSpacingBefore(float spacing):设置段前距。
public void setSpacingAfter(float spacing):设置段后距。
五、文本的中文处理
- 默认的iText字体设置不支持中文字体,如果在pdf中使用过了中文字符,需要下载
亚洲语言字体iTextAsian.jar。通过下面的代码就可以在文档中显示中文了。
BaseFont bfChinese = BaseFont.createFont(
"STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);
Paragraph pragraph = new Paragraph("你好,这是中文", FontChinese);
document.add(pragraph);
六、插入表格
- iText中处理表格的类为com.lowagie.text.Table和
com.lowagie.text.PDF.PDFPTable两个。对于比较简单的表格处理可以用Table类;
但是如果要处理复杂的表格,就需要使用PDFPTable进行处理。
Table table = new Table(3, 2);
table.setBorderColor(new Color(220, 100, 100));
table.setPadding(5);
table.setSpacing(3);
table.setBorderWidth(3);
Cell cell = new Cell(" Header 1 ");
table.addCell(cell);
cell = new Cell(" Header 2 ");
table.addCell(cell);
table.addCell(" Cell 1 ");
table.addCell(" Cell 2 ");
table.addCell(" Cell 3 ");
document.add(table);
1、Table的构造函数有3个:
Table(int columns);
Table(int columns, int rows);
Table(Properties attributes).
参数columns、rows、attributes分别为表格的列数、行数、表格属性。
创建表格时必须指定表格的列数,而对于行数可以不用指定,默认行数为1。
2、往表格中添加单元格(cell)时,按自左向右、从上而下的次序添加。
使用addCell()方法添加单元格。
3、对于复杂的表格,可以设置单元格的合并列cell.setColspan(2)
和合并行cell.Rowspan(2)。
七、插入图像
- iText中处理表格的类为com.lowagie.text.Image,
目前iText支持的图像格式有GIF、Jpeg、PNG、wmf等格式。
对于不同的图像格式,iText用同样的构造函数自动识别图像格式。
document.open();
Image bmp = Image.getInstance("E:\\Java_logo.jpg");
bmp.scalePercent(25f);
document.add(bmp);
document.close();
创建Image对象后,还可以设置一些常用的属性,这些属性有:
1、设置图像的位置:public void setAlignment(int alignment),
其中alignment可使用Image类中的常量。
Image.RIGHT、Image.MIDDLE、Image.LEFT分别指右对齐、居中、左对齐。
Image.TEXTWRAP、Image.UNDERLYING
分别指文字绕图形显示、图形作为文字的背景显示。
这两种参数可以结合以达到预期的效果,
如setAlignment(Image.RIGHT|Image.TEXTWRAP)
显示的效果为图像右对齐,文字围绕图像显示。
2、设置图像的大小,方法分别有:
public void scaleAbsolute(int newWidth, int newHeight)。
public void scalePercent(int percent):设置缩放比例。
public void scalePercent(int percentX, int percentY)。
3、设置图像旋转:public void setRotation(double r),其中r为弧度,
如果旋转角度为30度,则参数r=Math.PI/6。
八、在Servlet中输出pdf
- 在Servlet中输出pdf需要注意:
1、需要设置响应类型为application/pdf
response.setContentType("application/pdf");
2、需要将生成的pdf数据流写入响应客户端数据流中。
stream.writeTo(out);