1.概述
对于比较简单的表格处理可以用Table,但是如果要处理复杂的表格,这就需要PDFPTable进行处理。
建立表格之后,可以设定表格的属性,如:边框宽度、边框颜色、衬距(padding space 即单元格之间的间距)大小等属性。下面通过一个简单的例子说明如何使用表格,代码如下:
2.表格的操作
2.1 表格的初始化
你可以用3种不同的方法创建PdfTable:
PdfPTable(float[] relativeWidths);
PdfPTable(int numColumns);
PdfPTable(PdfPTable table);
举例:
// 创建一个有3列的表格
PdfPTable table = new PdfPTable(3);
2.2 表格的宽度和高度
设置表格的宽度有两种方法,分别如下
table.setTotalWidth(float totalWidth);//设置表格的总宽度
table.setTotalWidth(float[] columnWidth);//设置表格的各列宽度
使用以上两个函数,必须使用以下函数,将宽度锁定。
table.setLockedWidth(true);
设置行的高度
cell.setMinimumHeight(60);
代码举例
- PdfPTable table = new PdfPTable(3);
- table.setTotalWidth(300);
- table.setLockedWidth(true);
- table.setTotalWidth(new float[]{ 144, 72, 72 });
- table.setLockedWidth(true);
2.3 添加单元格
把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行
PdfPTable table = new PdfPTable(3);
table.addCell("1.1");
table.addCell("1.2");
table.addCell("1.3");
table.addCell("2.1");
table.addCell("2.2");
table.addCell("2.3");
以上程序运行结果将显示三行二列的表格。
添加单元格的内容还可以是以下几种形式。
public void addCell(PdfPCell cell);
public void addCell(PdfPTable table);
public void addCell(Phrase phrase);
public void addCell(String text);
2.3 合并单元格
iText合并单元格的过程如下,首先创建一个cell,设置这个单元格的跨度,
如果是横向合并,则通过
cell.setColspan(n); //n代表从当前单元格的位置开始,合并的单元格数
如果是纵向合并,
cell.setRowspan(n);//n代表从当前单元格的位置开始,合并的单元格数
代码举例
- //创建一个有3列的表格
- PdfPTable table = new PdfPTable(3);
- // 定义一个表格单元
- PdfPCell cell = new PdfPCell(new Paragraph("header
with colspan 3")); - // 定义一个表格单元的跨度
- cell.setColspan(3);
- // 把单元加到表格中
- table.addCell(cell);
以上代码建立一个表格,具有一行,一行本来有3列,结果经过合并,只有1列。
代码举例
- import java.io.FileOutputStream;
- import java.io.IOException;
- import com.itextpdf.text.Document;
- import com.itextpdf.text.DocumentException;
- import com.itextpdf.text.Phrase;
- import com.itextpdf.text.Rectangle;
- import com.itextpdf.text.pdf.PdfPCell;
- import com.itextpdf.text.pdf.PdfPTable;
- import com.itextpdf.text.pdf.PdfWriter;
- public class TableDemo2 {
- public static final String RESULT = "c:\\TableDemo2.pdf";
- public static void createPdf(String filename)
- throws IOException, DocumentException {
- // step 1
- Document document = new Document();
- // step 2
- PdfWriter.getInstance(document, new FileOutputStream(filename));
- // step 3
- document.open();
- // step 4
- PdfPTable table = createTable1();
- document.add(table);
- table = createTable2();
- table.setSpacingBefore(5);
- table.setSpacingAfter(5);
- document.add(table);
- table = createTable3();
- document.add(table);
- table = createTable4();
- table.setSpacingBefore(5);
- table.setSpacingAfter(5);
- document.add(table);
- table = createTable5();
- document.add(table);
- // step 5
- document.close();
- }
- /**setWidths()函数举例*/
- public static PdfPTable createTable1() throws DocumentException {
- PdfPTable table = new PdfPTable(3);
- table.setWidthPercentage(288 / 5.23f);
- table.setWidths(new int[]{2, 1, 1});
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
1")); - cell.setColspan(3);
- table.addCell(cell);
- cell = new PdfPCell(new Phrase("Cell
with rowspan 2")); - cell.setRowspan(2);
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
- /**setWidths()函数举例*/
- public static PdfPTable createTable2() throws DocumentException {
- PdfPTable table = new PdfPTable(3);
- table.setTotalWidth(288);
- table.setLockedWidth(true);
- table.setWidths(new float[]{2, 1, 1});
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
2")); - cell.setColspan(3);
- table.addCell(cell);
- cell = new PdfPCell(new Phrase("Cell
with rowspan 2")); - cell.setRowspan(2);
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
- /**合并单元格setColspan()函数举例*/
- public static PdfPTable createTable3() throws DocumentException {
- PdfPTable table = new PdfPTable(new float[]{ 2, 1, 1 });
- table.setWidthPercentage(85f);
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
3")); - cell.setColspan(3);
- table.addCell(cell);
- cell = new PdfPCell(new Phrase("Cell
with rowspan 2")); - cell.setRowspan(2);
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
- /**setWidthPercentage()方法举例*/
- public static PdfPTable createTable4() throws DocumentException {
- PdfPTable table = new PdfPTable(3);
- Rectangle rect = new Rectangle(523, 770);
- //rect表示PageSize页面的大小,主要用于检测各列宽度之各是否超过边界,如果超过,则按比例重新赋值
- table.setWidthPercentage(new float[]{ 144, 72, 72 }, rect);
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
4")); - cell.setColspan(3);
- table.addCell(cell);
- cell = new PdfPCell(new Phrase("Cell
with rowspan 2")); - cell.setRowspan(2);
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
- /**setTotalWidth()方法举例*/
- public static PdfPTable createTable5() throws DocumentException {
- PdfPTable table = new PdfPTable(3);
- table.setTotalWidth(new float[]{ 144, 72, 72 });
- table.setLockedWidth(true);
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
5")); - cell.setColspan(3);
- table.addCell(cell);
- cell = new PdfPCell(new Phrase("Cell
with rowspan 2")); - cell.setRowspan(2);
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
- public static void main(String[] args) throws IOException, DocumentException {
- TableDemo2.createPdf(RESULT);
- }
- }
2.4 表格的嵌套
表格的嵌套是通过将表格作为一个cell添加到上一个表格中来完成的。方法如下
public void addCell(PdfPTable table);
代码举例
- /**表格嵌套举例*/
- public static PdfPTable createTable6() throws DocumentException {
- PdfPTable table = new PdfPTable(3);
- table.setTotalWidth(new float[]{ 144, 72, 72 });
- table.setLockedWidth(true);
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
5")); - cell.setColspan(3);
- cell.setBorderWidth(0);//设置表格的边框宽度为0
- table.addCell(cell);
- //加入嵌套表格
- PdfPTable celltable = new PdfPTable(2);
- celltable.addCell("qiantao11");
- celltable.addCell("qiantao12");
- cell = new PdfPCell(celltable);
- cell.setRowspan(2);
- cell.setBorderWidth(1);//设置表格的边框宽度为1
- cell.setPadding(10);//设置表格与上一个表格的填充为10
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
2.5 设置表格的边框
边框的线必须通过以下代码来完成
cell.setBorderWidth(borderwidth)
cell.setBorderWidthBottom(borderwidth)
cell.setBorderWidthTop(borderwidth)
cell.setBorderWidthBottom(borderwidth)
cell.setBorderWidthRight(borderwidth)
cell.setBorderWidthLeft(borderwidth)
嵌套时如果想在两个表格之间留一定的间隔,可以通过以下方法来完成
cell.setPadding(padding);
cell.setPaddingBottom(padding);
cell.setPaddingTop(padding);
cell.setPaddingRight(padding);
cell.setPaddingLeft(padding);
代码举例如下
- /**setTotalWidth(),隐藏边框线举例*/
- public static PdfPTable createTable5() throws DocumentException {
- PdfPTable table = new PdfPTable(3);
- table.setTotalWidth(new float[]{ 144, 72, 72 });
- table.setLockedWidth(true);
- PdfPCell cell;
- cell = new PdfPCell(new Phrase("Table
5")); - cell.setColspan(3);
- cell.setBorderWidth(0);
- table.addCell(cell);
- cell = new PdfPCell(new Phrase("Cell
with rowspan 2")); - cell.setRowspan(2);
- table.addCell(cell);
- table.addCell("row
1; cell 1"); - table.addCell("row
1; cell 2"); - table.addCell("row
2; cell 1"); - table.addCell("row
2; cell 2"); - return table;
- }
2.6 定义边框的颜色
// 定义单元格的框颜色
cell.setBorderColor(new BaseColor(255, 0, 0));
// 定义单元格的背景颜色
cell.setBackgroundColor(new BaseColor(0xC0, 0xC0, 0xC0));
参考文献
1.解决itext生成嵌套PdfPtable时,格式,字体方面的一些问题. http://blog.csdn.net/flyfeifei66/article/details/6730139
2.iText 绘制表格的诸多缺陷. http://www.iteye.com/topic/178465