Java导出word

来源:互联网 发布:修改服务器端口 编辑:程序博客网 时间:2024/04/30 00:43

导出需要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的格式,然后把数据放到表格中,同时还可以设置字体,表格宽度和高度。

原创粉丝点击