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

Java导出word

2014-03-03 20:37 323 查看
导出需要jar包:iText-5.0.6.jar,iTextAsian.jar,iText-rtf-2.1.7.jar,jxl.jar

项目中要把一些表单和表格的数据导出成word的文件。目前的的实现了把表单的内容导出到word,但是以表格的方式展现出来的。

exportWord:

package com.sg.ivs.testReport.testReport.testReport.bizc;

import java.awt.Color;

import org.springframework.web.client.RestTemplate;

import com.lowagie.text.Cell;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.rtf.style.RtfFont;
import com.lowagie.text.rtf.table.RtfBorder;
import com.lowagie.text.rtf.table.RtfBorderGroup;
import com.lowagie.text.rtf.table.RtfCell;

/**
* Word模板导出模型
public class ExportWord {

// 标题字体为黑色
private Color color_title = new Color(192, 192, 192);
// 内容为白色
private Color color_Context = Color.white;

public Color getColor_title() {
return color_title;
}

public Color getColor_Context() {
return color_Context;
}
public Cell createCell(String contentValue){
RtfFont rtf_s_title = new RtfFont("仿 宋", 14.0f, Font.BOLD, Color.BLACK);
// 标题中括号内字体 仿宋 五号 加粗
RtfFont rtf_f_title = new RtfFont("仿 宋", 11.0f, Font.BOLD, Color.BLACK);
// 处理情况 仿宋 五号
RtfFont rtf_f_contxt = new RtfFont("仿 宋", 11.0f, Font.NORMAL,Color.BLACK);
Cell cell = null;

return cell;
}
public Table createTable(String contenvalue) {
RestTemplate rest = new RestTemplate();
String[] testa = contenvalue.split(",\\$");
RtfFont rtf_s_title = new RtfFont("仿 宋", 14.0f, Font.BOLD, Color.BLACK);
// 标题中括号内字体 仿宋 五号 加粗
RtfFont rtf_f_title = new RtfFont("仿 宋", 11.0f, Font.BOLD, Color.BLACK);
// 处理情况 仿宋 五号
RtfFont rtf_f_contxt = new RtfFont("仿 宋", 11.0f, Font.NORMAL,
Color.BLACK);
Table table = null;

try {
table = new Table(4, 3);
int width[] = { 2, 3, 2, 3 };
table.setWidths(width);
table.setWidth(100);
for (int i = 0; i < testa.length; i++) {

RtfCell cell1 = generateHeader1(testa[i].split(":")[0], rtf_s_title, 1, 1,
Element.ALIGN_RIGHT, Element.ALIGN_RIGHT);
cell1.setBorders(getRtfBorderGroupStyle(1, 1, 1, 1));
table.addCell(cell1);
RtfCell cell2 = generateHeader1(testa[i].split(":")[1], rtf_f_contxt, 1, 1,
Element.ALIGN_LEFT, Element.ALIGN_LEFT);
cell2.setBorders(getRtfBorderGroupStyle(1, 1, 1, 1));
table.addCell(cell2);
}

} catch (Exception e) {
e.printStackTrace();
}
return table;
}

/**
* 单元格中样式统一的
*
* @param title
* @param font
* @param rowSpan
* @param colSpan
* @param halign
* @param valign
* @return
*/
private RtfCell generateHeader1(String title, Font font, int rowSpan,
int colSpan, int halign, int valign) {
RtfCell header = new RtfCell();
Paragraph phead = new Paragraph(title);
phead.setLeading(17f);
phead.setIndentationLeft(5f);
phead.setIndentationRight(5f);
phead.setFont(font);
header.add(phead);
header.setHeader(true);
header.setRowspan(rowSpan);
header.setColspan(colSpan);
header.setHorizontalAlignment(halign);
header.setVerticalAlignment(valign);
return header;
}

/**
* 设置字体样式
*
* @param family
* @param color
* @param size
* @param style
* @return
*/
public Font setFontStyle(String family, Color color, float size, int style) {
Font font = new Font();
font.setFamily(family);
font.setColor(color);
font.setSize(size);
font.setStyle(style);
return font;
}

/**
* 设置单元格的边框
*
* @param top
* @param bottom
* @param left
* @param right
* @return
*/
public RtfBorderGroup getRtfBorderGroupStyle(int top, int bottom, int left,
int right) {
RtfBorderGroup rbg = new RtfBorderGroup();
switch (top) {
case 1:
rbg.addBorder(RtfCell.TOP, RtfBorder.BORDER_SINGLE, 1.0f,
Color.black);
break;
case 2:
rbg.addBorder(RtfCell.TOP, RtfBorder.BORDER_DOUBLE, 1.0f,
Color.black);
break;
default:
rbg.addBorder(RtfCell.TOP, RtfBorder.BORDER_NONE, 1.0f, Color.black);
break;
}

switch (bottom) {
case 1:
rbg.addBorder(RtfCell.BOTTOM, RtfBorder.BORDER_SINGLE, 1.0f,
Color.black);
break;
case 2:
rbg.addBorder(RtfCell.BOTTOM, RtfBorder.BORDER_DOUBLE, 1.0f,
Color.black);
break;
default:
rbg.addBorder(RtfCell.BOTTOM, RtfBorder.BORDER_NONE, 1.0f,
Color.black);
break;
}

switch (left) {
case 1:
rbg.addBorder(RtfCell.LEFT, RtfBorder.BORDER_SINGLE, 1.0f,
Color.black);
break;
case 2:
rbg.addBorder(RtfCell.LEFT, RtfBorder.BORDER_DOUBLE, 1.0f,
Color.black);
break;
default:
rbg.addBorder(RtfCell.LEFT, RtfBorder.BORDER_NONE, 1.0f,
Color.black);
break;
}

switch (right) {
case 1:
rbg.addBorder(RtfCell.RIGHT, RtfBorder.BORDER_SINGLE, 1.0f,
Color.black);
break;
case 2:
rbg.addBorder(RtfCell.RIGHT, RtfBorder.BORDER_DOUBLE, 1.0f,
Color.black);
break;
default:
rbg.addBorder(RtfCell.RIGHT, RtfBorder.BORDER_NONE, 1.0f,
Color.black);
break;
}

return rbg;
}
}

jsp页面中的内容:

<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page language="java" contentType="application/x-msdownload"
pageEncoding="UTF-8"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@page import="com.lowagie.text.*"%>
<%@page import="com.lowagie.text.rtf.RtfWriter2"%>
<%@page import="com.lowagie.text.rtf.style.*"%>
<%@page import="java.awt.Color"%>
<%@page import="com.lowagie.text.rtf.table.*"%>
<%@page import="com.sg.ivs.testReport.testReport.testReport.bizc.ExportWord"%>

<%
//关于文件下载时采用文件流输出的方式处理:
//加上response.reset(),并且所有的%>后面不要换行,包括最后一个;

response.reset();//可以加也可以不加
response.setContentType("application/x-download");

//application.getRealPath("/main/mvplayer/CapSetup.msi");获取的物理路径
java.io.OutputStream outp = null;
try {

String filedisplay = "测试报告.doc";
filedisplay = URLEncoder.encode(filedisplay, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ filedisplay);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4.rotate());

ExportWord exportword = new ExportWord();
outp = response.getOutputStream();
try {
//标题字体风格
//大标题 黑体 小二 加粗 黑色
RtfFont rtfFont = new RtfFont("黑 体",18.0f,Font.BOLD,Color.BLACK);
//表中小标题 仿宋 四号 加粗 黑色
RtfFont rtf_s_title = new RtfFont("仿 宋",14.0f,Font.BOLD,Color.BLACK);
//标题中括号内字体 仿宋 五号 加粗
RtfFont rtf_f_title = new RtfFont("仿 宋",11.0f,Font.BOLD,Color.BLACK);
//表中数据默认 宋体 五号
RtfFont rtf_def = new RtfFont("宋 体",11.0f,Font.NORMAL,Color.BLACK);
//编号的字体 Calibri 五号
RtfFont rtf_cal = new RtfFont("Calibri",11.0f,Font.NORMAL,Color.BLACK);
//处理情况 仿宋 五号
RtfFont rtf_f_contxt = new RtfFont("仿 宋",11.0f,Font.NORMAL,Color.BLACK);

RtfWriter2.getInstance(document, bos);
document.open();
Paragraph p = new Paragraph("测试报告信息",rtfFont);
p.setAlignment(Element.ALIGN_CENTER);
p.setSpacingBefore(0.0f);
document.add(p);

document.add(exportword.createTable(request.getParameter("content")));
document.close();
outp.write(bos.toByteArray());
} finally {
try {
document.close();
} catch (Exception e) {

}
try {
bos.close();
} catch (Exception e) {

}
}
//
outp.flush();
//要加以下两句话,否则会报错
//java.lang.IllegalStateException: getOutputStream() has already been called for //this response
out.clear();
out = pageContext.pushBody();
} catch (Exception e) {
System.out.println("Error!");
e.printStackTrace();
} finally {
}
%>

调用jsp文件的js代码
me._export_onclick = function(){
var formData = me.view.getForm().entityContainer.data;
var _tabControl = me.view.getTabControl();

var mycars = new Array();
mycars[0] = "$简介:" + formData.reportBrief;
mycars[1] = "$充分性评价:" + formData.sufficiencyEstimation;
mycars[2] = "$测试规程:" + formData.testProcess;
mycars[3] = "$测试体制:" + formData.testSystem;
mycars[4] = "$测试结论:" + formData.testConclusion;

openExportWindow("/ivs/biz/testReport/exportword.jsp", mycars, "导出word");

}

前端把页面的数据封装成一种特定的格式,然后在java端把这种特定格式的解析成value和text的格式,然后把数据放到表格中,同时还可以设置字体,表格宽度和高度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java word