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

Struts2利用iText导出word文档(包含表格)

2016-04-06 12:15 405 查看
struts.xml里的配置如下:

<!-- 保存为word文件 -->
<action name="studentCurriculumWord" class="studentCurriculumWordAction">
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-word</param>
<param name="contentDisposition">attachment;filename="studentCurriculum.doc"</param>
<param name="inputName"><span style="color:#FF0000;"><span style="background-color: rgb(255, 0, 0);">wordFile</span></span></param>
</result>
</action>
 对应的Action代码如下:

import java.awt.Color;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import cn.com.wiscom.jwxk.entity.StudentCurriculum;

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;
import com.opensymphony.xwork2.ActionSupport;

/** 学生课表导出 */
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 <span style="background-color: rgb(255, 0, 0);">InputStream getWordFile()</span> 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;

/** 创建Document对象(word文档) */
Document doc = new Document(PageSize.A4);
/** 新建字节数组输出流 */
ByteArrayOutputStream baos = new ByteArrayOutputStream();
/** 建立一个书写器与document对象关联,通过书写器可以将文档写入到输出流中 */
RtfWriter2.getInstance(doc, baos);
doc.open();

/** 标题字体 */
RtfFont titleFont = new RtfFont("仿宋_GB2312", 12, Font.NORMAL,
Color.BLACK);
/** 正文字体 */
RtfFont contextFont = new RtfFont("仿宋_GB2312", 9, Font.NORMAL,
Color.BLACK);

/** 表格设置 */
Table table = new Table(12, 16);
int[] withs = { 3, 9, 5, 4, 4, 3, 3, 14, 14, 14, 14, 14 };
/** 设置每列所占比例 */
table.setWidths(withs);
/** 表格所占页面宽度 */
table.setWidth(100);
/** 居中显示 */
table.setAlignment(Element.ALIGN_CENTER);
/** 自动填满 */
table.setAutoFillEmptyCells(true);

/** 第一行(标题) */
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);

/** 第二行(正文) */
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);

/** 第三行(表格) */
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++) {
/** 居中显示 */
cellHeaders[i].setHorizontalAlignment(Element.ALIGN_CENTER);
/** 纵向居中显示 */
cellHeaders[i].setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cellHeaders[i]);
}
/** 向表格填充数据 */
for (int i = 0; i < 15; i++) {
/** 第0列 */
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列 */
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
);
}
/** 第5列 */
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);
}
if (cell5 != null) {
cell5.setHorizontalAlignment(Element.ALIGN_CENTER);
cell5.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell5);
}
/** 第6列 */
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列 */
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);
}
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(
9638
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 "";
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: