您的位置:首页 > 编程语言 > Java开发

[Java代码] 使用iText在word文档中插入复杂的表格

2015-12-19 18:17 786 查看




iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档和word文档的一个java类库。通过iText不仅可以生成PDF或rtf 的文档,而且可以将XML、Html文件转化为PDF文件。

我们看下如何使用itext插入表格。

要插入表格首先要创建Table对象

如下代码创建了一个2列的表格,声明表格对象至少要指定表格对象有几列。

Table table = new Table(2);

复制代码

或者:

Table table = new Table(2,3);

复制代码

以上代码表示创建一个2列3行的表格。

itext中提供了很多属性,我们可以设置表格的边框,设置cellspacing,cellpadding,以及backgroundColor等属性。

声明表格之后就需要向表格中插入单元格了,需要注意itext中的table只有Cell的概念,没有行的概念,因为在声明表格时必须指定该表格由几列组成,所以不会有问题。

下面我们声明一个Cell对象:

Cell cell = new Cell("HELLO WORLD");

复制代码

很简单的创建了一个单元格对象,这个单元格中有文字HELLO WORLD.

你也可以先创建一个空的单元格,然后向单元格内插入任意的元素,例如:

Cell cell = new Cell(); Paragraph pHello = new Paragraph("Hello"); cell.add(pHello);

复制代码

如果需要还可以通过
cell.setRowspan(arg0);
imgCell.setColspan(arg0)
方法来设置单元格的RowSpan和ColSpan属性。

创建好Cell之后需要将Cell添加到Table中:

table.addCell(cell);

复制代码

iText提供的在word文档中操作table的api很简单,下面有一个比较复杂的例子供参考:

其效果图,如下:



import java.awt.Color;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.util.List;

import java.util.Map;
http://www.kmnk01.com/hxpfk/2015/bdf_1219/312.html
import com.lowagie.text.Cell;

import com.lowagie.text.Document;

import com.lowagie.text.Element;

import com.lowagie.text.Font;

import com.lowagie.text.PageSize;

import com.lowagie.text.Paragraph;

import com.lowagie.text.Phrase;

import com.lowagie.text.Table;

import com.lowagie.text.rtf.RtfWriter2;

import com.lowagie.text.rtf.style.RtfFont;

import com.opensymphony.xwork2.ActionContext;

15925

import com.opensymphony.xwork2.ActionSupport;
http://www.kmnk01.com/hxpfk/2015/xmz_1219/320.html
/** 学生课表导出word author:yyli Sep 15, 2010 */

public class StudentCurriculumWordAction extends ActionSupport {

private static final long serialVersionUID = 2150958354251222076L;

@Override

public String execute() throws Exception {

// TODO Auto-generated method stub

return SUCCESS;

}

@SuppressWarnings( { "serial", "unchecked" })

public InputStream getWordFile() throws Exception {

Map<String, Object> session = ActionContext.getContext().getSession();

List<StudentCurriculum> leftList = (List<StudentCurriculum>) session

.get("stuCurriculumleftList");

String[] stuCurriculumArray = (String[]) session

.get("stuCurriculumrightArray");

float totalXf = 0;
http://www.kmnk01.com/hxpfk/2015/gm_1219/314.html
/** 创建Document对象(word文档) author:yyli Sep 15, 2010 */

Document doc = new Document(PageSize.A4);

/** 新建字节数组输出流 author:yyli Sep 15, 2010 */

ByteArrayOutputStream baos = new ByteArrayOutputStream();

/** 建立一个书写器与document对象关联,通过书写器可以将文档写入到输出流中 author:yyli Sep 15, 2010 */

RtfWriter2.getInstance(doc, baos);

doc.open();

/** 标题字体 author:yyli Sep 15, 2010 */

RtfFont titleFont = new RtfFont("仿宋_GB2312", 12, Font.NORMAL,

Color.BLACK);

/** 正文字体 author:yyli Sep 15, 2010 */

RtfFont contextFont = new RtfFont("仿宋_GB2312", 9, Font.NORMAL,

Color.BLACK);
http://www.kmnk01.com/hxpfk/2015/mny_1219/315.html
/** 表格设置 author:yyli Sep 15, 2010 */

Table table = new Table(12, 16);

int[] withs = { 3, 9, 5, 4, 4, 3, 3, 14, 14, 14, 14, 14 };

/** 设置每列所占比例 author:yyli Sep 15, 2010 */

table.setWidths(withs);

/** 表格所占页面宽度 author:yyli Sep 15, 2010 */

table.setWidth(100);

/** 居中显示 author:yyli Sep 15, 2010 */

table.setAlignment(Element.ALIGN_CENTER);

/** 自动填满 author:yyli Sep 15, 2010 */

table.setAutoFillEmptyCells(true);

/** 第一行(标题) author:yyli Sep 15, 2010 */

String titleString = "东南大学 "

+ (String) session.get("selectXn")

+ "-"

+ String.valueOf(Integer.parseInt((String) session

.get("selectXn"))) + " 学年第 "

+ (String) session.get("selectXq") + "学期 学生个人课表";

Paragraph title = new Paragraph(titleString);

// 设置标题格式对其方式

title.setAlignment(Element.ALIGN_CENTER);

title.setFont(titleFont);

doc.add(title);
http://www.kmnk01.com/hxpfk/2015/qcd_1219/318.html
/** 第二行(正文) author:yyli Sep 15, 2010 */

String contextString = "院系:" + (String) session.get("yxmc") + " 专业:"

+ (String) session.get("zymc") + " 学号:"

+ (String) session.get("xh") + " 一卡通号:"

+ (String) session.get("userId") + " 姓名:"

+ (String) session.get("stuName");

Paragraph context = new Paragraph(contextString);

// 正文格式对齐方式

context.setAlignment(Element.ALIGN_CENTER);

context.setFont(contextFont);

// 与上一段落(标题)的行距

context.setSpacingBefore(10);

// 设置第一行空的列数(缩进)

// context.setFirstLineIndent(20);

doc.add(context);
http://www.kmnk01.com/hxpfk/2015/py_1219/321.html
/** 第三行(表格) author:yyli Sep 15, 2010 */

Cell[] cellHeaders = new Cell[11];

cellHeaders[0] = new Cell(new Phrase("序号", contextFont));

cellHeaders[1] = new Cell(new Phrase("课程名称", contextFont));

cellHeaders[2] = new Cell(new Phrase("教师", contextFont));

cellHeaders[3] = new Cell(new Phrase("学分", contextFont));

cellHeaders[4] = new Cell(new Phrase("上课周次", contextFont));

cellHeaders[5] = new Cell(new Phrase(" ", contextFont));

cellHeaders[5].setColspan(2);

cellHeaders[6] = new Cell(new Phrase("星期一", contextFont));

cellHeaders[7] = new Cell(new Phrase("星期二", contextFont));

cellHeaders[8] = new Cell(new Phrase("星期三", contextFont));

cellHeaders[9] = new Cell(new Phrase("星期四", contextFont));

cellHeaders[10] = new Cell(new Phrase("星期五", contextFont));

for (int i = 0; i < 11; i++) {

/** 居中显示 author:yyli Sep 15, 2010 */

cellHeaders[i].setHorizontalAlignment(Element.ALIGN_CENTER);

/** 纵向居中显示 author:yyli Sep 15, 2010 */

cellHeaders[i].setVerticalAlignment(Element.ALIGN_MIDDLE);

table.addCell(cellHeaders[i]);

}http://www.kmnk01.com/hxpfk/2015/sz_1219/313.html

/** 向表格填充数据 author:yyli Sep 15, 2010 */

for (int i = 0; i < 15; i++) {

/** 第0列 author:yyli Sep 15, 2010 */

Cell cell0 = new Cell(

new Phrase(String.valueOf(i + 1), contextFont));

cell0.setHorizontalAlignment(Element.ALIGN_CENTER);

cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);

table.addCell(cell0);

/** 第1-4列 author:yyli Sep 15, 2010 */

Cell[] cell1_4 = new Cell[4];

if (i < leftList.size()) {

cell1_4[0] = new Cell(new Phrase(str_changenbsp(leftList.get(i)

.getKcmc()), contextFont));

cell1_4[1] = new Cell(new Phrase(str_changenbsp(leftList.get(i)

.getJsxm()), contextFont));

cell1_4[2] = new Cell(new Phrase(str_changenbsp(leftList.get(i)

.getXf()), contextFont));

cell1_4[3] = new Cell(new Phrase(str_changenbsp(leftList.get(i)

.getJszc()), contextFont));

}

for (int n = 0; n < cell1_4.length; n++) {

cell1_4
.setHorizontalAlignment(Element.ALIGN_CENTER);

cell1_4
.setVerticalAlignment(Element.ALIGN_MIDDLE);

table.addCell(cell1_4
);
http://www.kmnk01.com/hxpfk/2015/py_1219/316.html
/** 第5列 author:yyli Sep 15, 2010 */

Cell cell5 = null;

if (i == 0) {

cell5 = new Cell(new Phrase("上午", contextFont));

cell5.setRowspan(5);

}

if (i == 5) {

cell5 = new Cell(new Phrase("下午", contextFont));

cell5.setRowspan(5);

}

if (i == 10) {

cell5 = new Cell(new Phrase("晚上", contextFont));

cell5.setRowspan(2);

}

if (i == 12) {

cell5 = new Cell(new Phrase("周六", contextFont));

cell5.setColspan(2);

}

if (i == 13) {

cell5 = new Cell(new Phrase("周日", contextFont));

cell5.setColspan(2);

}

if (i == 14) {

cell5 = new Cell(new Phrase("备注", contextFont));

cell5.setColspan(2);
http://www.kmnk01.com/hxpfk/2015/sz_1219/317.html
if (cell5 != null) {

cell5.setHorizontalAlignment(Element.ALIGN_CENTER);

cell5.setVerticalAlignment(Element.ALIGN_MIDDLE);

table.addCell(cell5);

}

/** 第6列 author:yyli Sep 15, 2010 */

if (i < 12) {

Cell cell2 = new Cell(new Phrase(String.valueOf(i + 1),

contextFont));

cell2.setHorizontalAlignment(Element.ALIGN_CENTER);

cell2.setVerticalAlignment(Element.ALIGN_MIDDLE);

table.addCell(cell2);

}

/** 第7-11列 author:yyli Sep 15, 2010 */

if (i == 0 || i == 5 || i == 10) {

Cell[] cell7_11 = new Cell[5];

for (int n = 0; n < 5; n++) {

cell7_11
= new Cell(new Phrase(

str_changebr(stuCurriculumArray[i + n]),

contextFont));

cell7_11
.setHorizontalAlignment(Element.ALIGN_CENTER);

cell7_11
.setVerticalAlignment(Element.ALIGN_MIDDLE);

if (i == 0 || i == 5) {

cell7_11
.setRowspan(5);

} else {

cell7_11
.setRowspan(2);
http://www.kmnk01.com/hxpfk/2015/ylb_1219/319.html
table.addCell(cell7_11
);

}

}

Cell cell7 = null;

if (i == 12) {

cell7 = new Cell(new Phrase(

str_changebr(stuCurriculumArray[15]), contextFont));

}

if (i == 13) {

cell7 = new Cell(new Phrase(

str_changebr(stuCurriculumArray[16]), contextFont));

}

if (i == 14) {

cell7 = new Cell(new Phrase(

str_changebr(stuCurriculumArray[17]), contextFont));

}

if (cell7 != null) {

cell7.setColspan(5);

cell7.setHorizontalAlignment(Element.ALIGN_CENTER);

cell7.setVerticalAlignment(Element.ALIGN_MIDDLE);

table.addCell(cell7);

}

}

doc.add(table);

doc.close();

// 得到输入流

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

baos.close();

return bais;

}

public String str_changenbsp(String str) {

if (str != null) {

return str.replaceAll(" ", "");

} else {

return "";

}

}

public String str_changebr(String str) {

if (str != null) {

return str.replaceAll("<br>", "\n");

} else {

return "";

}

}kmnk01.com

}www.kmnk01.com

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: