欢迎访问设·集合!

设·集合

您现在的位置是:首页 > 办公软件 > WPS

java如何导出word和wps文档

设·集合小编 发布时间:2023-03-02 16:06:31 1482次最后更新:2024-03-08 10:50:46

使用场景:打开一个表单页面,导出word或wps文件,代码框架基于springboot jpa

一、准备word模板



二、pom.xml文件中引入依赖


   
   
    cn.afterturn 
    
     easypoi-base 
     
      3.0.3
      
    
   
  

   
   
    cn.afterturn 
    
     easypoi-web 
     
      3.0.3
      
    
   
  

   
   
    cn.afterturn 
    
     easypoi-annotation 
     
      3.0.3
      
    
   
  

三、构造ExportWord工具类,里面包含导出word和导出wps两种方法
导出文件工具类中的文件流一定要按照最先使用的最后关闭原则,否则会造成临时文件删除不了的问题。导出wps的方法就是在导出word方法的基础上将临时文件内容写入到下载的wps文件中。

import cn.afterturn.easypoi.word.WordExportUtil;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.util.Assert;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;

public class ExportWord {
     /**
     * 导出word
     * 

第一步生成替换后的word文件,只支持docx

*

第二步下载生成的文件

*

第三步删除生成的临时文件

* @param templatePath word模板地址 * @param temDir 生成临时文件存放地址 * @param fileName 文件名 * @param params 替换的参数 * @param request HttpServletRequest * @param response HttpServletResponse */ public static void exportWord(String templatePath, String temDir, String fileName, Map params, HttpServletRequest request, HttpServletResponse response){ Assert.notNull(templatePath,`模板路径不能为空`); Assert.notNull(temDir,`临时文件路径不能为空`); Assert.notNull(temDir,`导出文件名不能为空`); Assert.isTrue(fileName.endsWith(`.docx`),`word导出请使用docx格式`); FileOutputStream fos = null; OutputStream out = null; if (!temDir.endsWith(`/`)){ temDir = temDir File.separator; } File dir = new File(temDir); if (!dir.exists()){ dir.mkdirs(); } try { String userAgent = request.getHeader(`user-agent`).toLowerCase(); if (userAgent.cont ains(`msie`)||userAgent.cont ains(`like gecko`)){ fileName = URLEncoder.encode(fileName,`UTF-8`); }else { fileName = new String(fileName.getBytes(`utf-8`),`ISO-8859-1`); } XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); String tmpPath = temDir fileName; fos = new FileOutputStream(tmpPath); doc.write(fos); //设置强制下载不打开 response.setContentType(`application/force-download`); //设置文件名 response.addHeader(`Content-Disposition`,`attachment;fileName=` fileName); out = response.getOutputStream(); doc.write(out); }catch (Exception e){ e.printStackTrace(); }finally { try { out.close(); fos.close(); delFileWord(temDir,fileName); } catch (IOException e) { e.printStackTrace(); } } } /** * 删除临时生成的文件 */ public static void delFileWord(String filePath,String fileName){ File file = new File(filePath fileName); File file1 = new File(filePath); file.delete(); file1.delete(); } /** * 导出wps *

第一步生成替换后的word文件,只支持docx

*

第二步将临时word文件内容复制到下载生成的wps文件中

*

第三步删除生成的临时文件

* @param templatePath word模板地址 * @param temDir 生成临时文件存放地址 * @param fileName 文件名 * @param params 替换的参数 * @param request HttpServletRequest * @param response HttpServletResponse */ public static void exportWps(String templatePath, String temDir,String fileName,Map params, HttpServletRequest request, HttpServletResponse response){ FileOutputStream fos = null; InputStream input = null; BufferedInputStream bins=null; OutputStream outs = null; BufferedOutputStream bouts = null; if (!temDir.endsWith(`/`)){ temDir = temDir File.separator; } File dir = new File(temDir); if (!dir.exists()){ dir.mkdirs(); } try { String userAgent = request.getHeader(`user-agent`).toLowerCase(); if (userAgent.cont ains(`msie`)||userAgent.contains(`like gecko`)){ fileName = URLEncoder.encode(fileName,`UTF-8`); }else { fileName = new String(fileName.getBytes(`utf-8`),`ISO-8859-1`); } XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); String tmpPath = temDir fileName; fos= new FileOutputStream(tmpPath); doc.write(fos); input = new FileInputStream(tmpPath); bins = new BufferedInputStream(input); outs = response.getOutputStream(); bouts = new BufferedOutputStream(outs); response.setContentType(`application/x-download`); response.setHeader(`Content-Disposition`,`attachment;fileName=` fileName); int bytesRead=0; byte buffer = new byte8192; while((bytesRead = bins.read(buffer,0,8192))!=-1){ bouts.write(buffer,0,bytesRead); } bouts.flush(); }catch (Exception e){ e.printStackTrace(); }finally { try{ bouts.close(); outs.close(); bins.close(); input.close(); fos.close(); delFileWord(temDir,fileName); }catch (Exception e){ e.printStackTrace(); } } } }

四、Controller层代码

/**
* @param id 实体类id
* @param flag 标志位,用来判断调用导出word还是导出wps
* @param request HttpServletRequest
* @param response HttpServletResponse
*/
@ApiOperation(`导出word`)
@GetMapping(`/exportWord`)
public void exportWord(@RequestParam String id,@RequestParam String flag,HttpServletRequest request, HttpServletResponse response) {
    handleTipService.exportWord(id,flag,request,response);   
}

五、Service实现层

@Override
public void exportWord(String id, String flag,HttpServletRequest request, HttpServletResponse response)  {
    //处理模板需要的参数信息
    List
  
    byId = handleTipNativeRepository.findById(id); String path = ``; HashMap hashMap = byId.get(0); if(hashMap.get(`repeatCode`)!=null){ String repeatCode = hashMap.get(`repeatCode`).toString(); int length = repeatCode.split(`,`).length; hashMap.put(`repeatCode`,length); } try { //取到模板所在系统中的静态资源位置 path = ResourceUtils.getFile(`classpath:static/wps/handleTip.docx`).getPath(); } catch (FileNotFoundException e) { e.printStackTrace(); } //根据前端传过来的标志位判断是用word还是wps if(flag!=null){ if(`word`.equals(flag)){ ExportWord.exportWord(path,`test`, `HandleTip.docx`, hashMap,request,response); }else if(`wps`.equals(flag)){ ExportWord.exportWps(path,`test`, `HandleTip.wps`, hashMap,request,response); } } }
  

六、Repository实现层

@Override
public List
  
    findById(String id){ String sql = ` sql语句 `; StringBuilder whereSql = new StringBuilder(` `); if (StringUtils.isNotEmpty(id)) { whereSql.append(` and h.ID = :id `); } Query query = this.entityManager.createNativeQuery(sql (whereSql).toString()); if (StringUtils.isNotEmpty(id)) { query.setParameter(`id`, id); } query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List
   
     list = query.getResultList(); return list; }
   
  

作者:锋林华

链接:https://blog.csdn.net/u012451819/article/details/109061373

来源:CSDN

广告位

热心评论

评论列表