jsp按格式导出doc文件实例详解

所属分类: 网络编程 / JSP编程 阅读数: 1780
收藏 0 赞 0 分享

jsp按格式导出doc文件实例详解

原理:doc文件其实可以保存为xml文件,该xml文件用字符串表示了doc文件的表现形式,我们只需要用Java将那些要填的内容替换掉然后下载给客户就行了。

1.首先是按照你的文档填写好数据。
2.将文档另存为xml文件,然后编辑该xml文件,将填好的内容用某种格式替换,如:将名字张三替换成${name}
3.读取文件,将文件中的${name}替换成真正的名字。
4.下载。

接下来看代码:

首先是那个转换类

package com.my.util;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.Map;

public class DowloadDocByTemplate {

  public InputStream dowload(String templatePath,Map map) throws IOException{
    
    File file = new File(templatePath);
    StringBuffer sb = new StringBuffer();
      BufferedReader br;
        br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
        String s;
        while ((s = br.readLine()) != null) {
          sb.append(s);
          
        }
        br.close();
         s = sb.toString();
          Iterator<String> keys = map.keySet().iterator();
          while(keys.hasNext()) {
            String key = (String) keys.next();
            s=s.replace(key, (String) map.get(key));
         }

          return new ByteArrayInputStream(s.getBytes("UTF-8"));
  }
}
  

然后是action:

/**
   * 检查下载权限
   * @return
   */
  public String downLoadcheck(){
    
    return SUCCESS;
  }
  
  public String getTargetFileName(){
    
    return "zengguoqg.doc";
  }
  public InputStream getInputStream(){
    //ExportToWordUtil etw = new ExportToWordUtil();
    StringBuffer carnumber = new StringBuffer("<w:tr w:rsidR='00000000'> <w:trPr> <w:trHeight w:hRule='exact' w:val='482'/> </w:trPr>");
    String s1 = "<w:tc><w:tcPr><w:tcW w:w=\"236\" w:type=\"dxa\"/></w:tcPr><w:p w:rsidR=\"00000000\" w:rsidRDefault=\"009F38EE\">" +
        "<w:pPr><w:rPr><w:rFonts w:hint=\"eastAsia\"/></w:rPr></w:pPr><w:r>" +
            "<w:rPr><w:rFonts w:hint=\"eastAsia\"/></w:rPr><w:t>";
    String number = "450981199202073518";
    char[] ch = number.toCharArray();
    for(int i =0;i<ch.length;i++){
      carnumber.append(s1).append(ch[i]).append("</w:t></w:r></w:p></w:tc>");
      
    }
    carnumber.append("</w:tr>");
    Map<String,String> map = new HashMap();
    map.put("${name}","曾强");
    map.put("${sex}","男");
    map.put("${writeDate}", "2014.1.2");
    map.put("${cardNumber}", "1100106");
    map.put("${personNumber}", carnumber.toString());
    map.put("${birthday}", "2014.1.2");
    map.put("${Education}", "本科");
    map.put("${marride}", "未婚");
    map.put("${comeFrom}", "广西");
    map.put("${nation}", "汉族");
    map.put("${ResidenceAddress}", "广西");
    map.put("${PostalCode}", "543002");
    map.put("${QQ}", "1104566175");
    map.put("${job}", "软件工程师");
    map.put("${politicalStatus}", "政治面貌");
    map.put("${GraduateSchool}", "学院");
    map.put("${professional}", "软件工程");
    map.put("${beginWorkTime}", "2014.1.2");
    map.put("${bankCarNumber}", "622709");
    map.put("${emergencyContactPerson}", "曾强");
    map.put("${relationship}", "同学");
    map.put("${ummoveTelephone}", "0774133");
    map.put("${mobilePhone}", "1350335");
    map.put("${adreess}", "广西");
    map.put("${mainExperience}", "无工作");
    map.put("${favoriteAndGoodAt}", "喜欢打篮球");
    
    
    String path = ServletActionContext.getServletContext().getRealPath("/fileTemplate/renyuandengjibiao2.xml");
    System.out.println(path);
    
    //return etw.export(path, "test.xml", map, "out.doc");
    try {
      return new DowloadDocByTemplate().dowload(path, map);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    }
  }
  
}

最后是Strut配置下载: 

<package name="dowload" extends="struts-default">
    <action name="dowload" class="zhaopingAction" method="downLoadcheck">
    <result name="success" type="stream">
     <param name="contentType">application/ZIP</param><!--默认为 text/plain-->    
     <param name="inputName">inputStream</param>  
     <param name="contentDisposition">filename="${targetFileName}"</param>    
     <param name="bufferSize">4096</param><!-- 输出时缓冲区的大小 -->    
    </result>
    </action>

完了,就这些了。xml文件我放在WebRoot/fileTemplate/renyuandengjibiao2.xml。

如有疑问,请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

jsp中使用frameset框架 边框固定不让更改边框的大小

有时候可能要对自己布局好的页面不让用户更改边框的大小,这样我们可以在frame里面添加noresize="noresize"属性就可以实现其中的功能
收藏 0 赞 0 分享

response.getWriter().write()向前台打印信息乱码问题解决

本节主要介绍了response.getWriter().write()向前台打印信息乱码问题解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp页面中如何将时间戳字符串格式化为时间标签

本节主要介绍了jsp页面中如何将时间戳字符串格式化为时间标签,需要的朋友可以参考下
收藏 0 赞 0 分享

获取上一页面的URL和本页的URL的方法

本节主要介绍了获取上一页面的URL和本页的URL的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

window.top[_CACHE]实现多个jsp页面共享一个js对象

两个js页面要共享一个就js对象,想了半天用window.top['_CACHE']来存放这个变量,即可实现,不同Jsp页面直接的对象共享
收藏 0 赞 0 分享

通过过滤器(Filter)解决JSP的Post和Request中文乱码问题

这篇文章主要介绍了jsp中通过过滤器(Filter)解决JSP的Post和Request中文乱码问题的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

JSP页面的动态包含和静态包含示例及介绍

这篇文章主要介绍了JSP页面的动态包含和静态包含示例及介绍,本文讲解了它们的区别并给出了相应例子,需要的朋友可以参考下
收藏 0 赞 0 分享

JSP中实现判断客户端手机类型并跳转到app下载页面

这篇文章主要介绍了JSP中实现判断客户端手机类型并跳转到app下载页面,实现的原理,是检测浏览器的 USER-AGENT 这个header,然后根据正则表达式来确定客户端类型,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp实现点击help打开chm文件

有个javaweb项目,需要在portal上面点击help即可打开“帮助.chm”文件,下面与大家分享下jsp如何打开chm文件
收藏 0 赞 0 分享

JSP自定义分页标签TAG全过程

这篇文章主要介绍了JSP自定义分页标签TAG全过程,比较实用,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多