_98K丶 2021-05-29 09:19 采纳率: 0%
浏览 592

springboot导入导出word

1:客户可以在页面选择标题,一级标题然后选择下面的任意二级标题,每个标题下内容不同,有可能是图片,有可能是表格,用户点击导出,根据用户选择的标题后台生成word供用户导出;2.用户主动上传一个word,解析该worn,获取一级标题二级标题,并在页面上显示出来,供其他用户选择,并且word里面的内容需要保存数据库,供下次其他用户查看。

  • 写回答

4条回答 默认 最新

  • CSDN专家-Fay 2021-05-29 09:20
    关注

     使用easypoi 可以解决题主问题,以下是简单的一个例子,如果要符合题主需求,还需要进行修改

    1、引入依赖

           <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-base</artifactId>
                <version>3.0.3</version>
            </dependency>
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-web</artifactId>
                <version>3.0.3</version>
            </dependency>
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-annotation</artifactId>
                <version>3.0.3</version>
            </dependency>
    

     2、编写导出的类

    package com.xdx97.party.common.utils.word;
    
    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.File;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    import java.util.Map;
    
    public class ExportWordUtils {
        /**
         * 导出word
         * <p>第一步生成替换后的word文件,只支持docx</p>
         * <p>第二步下载生成的文件</p>
         * <p>第三步删除生成的临时文件</p>
         * 模版变量中变量格式:{<!-- -->{foo}}
         * @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<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
            Assert.notNull(templatePath,"模板路径不能为空");
            Assert.notNull(temDir,"临时文件路径不能为空");
            Assert.notNull(fileName,"导出文件名不能为空");
            Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");
            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.contains("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;
                FileOutputStream fos = new FileOutputStream(tmpPath);
                doc.write(fos);
                // 设置强制下载不打开
                response.setContentType("application/force-download");
                // 设置文件名
                response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
                OutputStream out = response.getOutputStream();
                doc.write(out);
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                delFileWord(temDir,fileName);//这一步看具体需求,要不要删
            }
        }
        /**
         * 删除零时生成的文件
         */
        public static void delFileWord(String filePath, String fileName){
            File file =new File(filePath+fileName);
            File file1 =new File(filePath);
            file.delete();
            file1.delete();
        }
    }
    
    

    3、测试 

    package com.xdx97.party.service.api.common;
    
    import com.xdx97.party.common.utils.word.ExportWordUtils;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.HashMap;
    import java.util.Map;
    
    @Controller
    public class Demo {
    
        @RequestMapping("/demo/export")
        public void export(HttpServletRequest request, HttpServletResponse response){
            Map<String,Object> params = new HashMap<>();
            params.put("title","这是标题");
            params.put("name","李四");
            //这里是我说的一行代码
            ExportWordUtils.exportWord("word/export.docx","F:/test","aaa.docx",params,request,response);
        }
    }
    
    

     

    评论

报告相同问题?

悬赏问题

  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?
  • ¥20 用户端如何上传图片到服务器和数据库里
  • ¥15 现在研究生在烦开题,看了一些文献,但不知道自己要做什么,求指导。
  • ¥30 vivado封装时总是显示缺少一个dcp文件
  • ¥100 pxe uefi启动 tinycore
  • ¥15 我pycharm运行jupyter时出现Jupyter server process exited with code 1,然后打开cmd显示如下
  • ¥15 可否使用carsim-simulink进行四轮独立转向汽车的联合仿真,实现四轮独立转向汽车原地旋转、斜向形式、横移等动作,如果可以的话在carsim中如何进行相应设置
  • ¥15 Caché 2016 在Java环境通过jdbc 执行sql报Parameter list mismatch错误,但是同样的sql使用连接工具可以查询出数据
  • ¥15 疾病的获得与年龄是否有关