word下载--前端Vue后端springboot

前端调用:

<template>
  <div>
    <el-button type="primary" @click="reportDownload()">打印报告</el-button>
  </div>
</template>

<script>
import axios from "axios";

export default {

  data() {
    return {
      vulnId: ''
    }
  },
  methods: {
    // 报告打印
    reportDownload() {
      axios.get('http://127.0.0.1:9090/Report/ReportDownloadDocx',  {
        params: {
          vulnId: this.vulnId
        },
        responseType: 'blob'
      }).then(res =>  {

        var filename=res.headers['filename'];
        let blob = new Blob([res.data], {type: `application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8`});
        let objectUrl = URL.createObjectURL(blob);
        let link = document.createElement("a");
        //const fileName = res.headers["content-disposition"].match(/filename=(\S*).docx/)[1];
        //let fname=decodeURIComponent(fileName)+'.docx'
        let fname=decodeURIComponent(filename);
        link.href = objectUrl;
        link.setAttribute("download", fname);
        document.body.appendChild(link);
        link.click();
      });
    }
  }
}
</script>

后端接口:使用poi生成文档

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.springframework.stereotype.Service;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.*;
import java.net.URLEncoder;
import java.time.LocalDate;

@RestController
@RequestMapping("/Report")
public class ReportController {


    @GetMapping("ReportDownloadDocx")
    public void ReportDownloadDocx(Integer vulnId, HttpServletRequest req, HttpServletResponse response) throws IOException {
   
        XWPFDocument doc = new XWPFDocument();// 创建Word文件
        XWPFParagraph topic = doc.createParagraph();// 新建段落
        topic.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun c1 = topic.createRun();
        c1.setText("漏洞报告");
        c1.setColor("000000");
        c1.setFontSize(12);
        c1.addCarriageReturn();

        LocalDate date = LocalDate.now();
        String fileName = vulnId+"-"+ date;

        response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(fileName+".docx", "UTF-8"));
        response.setHeader("filename",URLEncoder.encode(fileName+".docx", "UTF-8"));
        response.setHeader("Access-Control-Expose-Headers", "filename");
        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        //刷新缓冲
        response.flushBuffer();
        OutputStream outputStream = response.getOutputStream();
        //workbook将Excel写入到response的输出流中,供页面下载该Excel文件
        doc.write(outputStream);
        outputStream.flush();
        outputStream.close();
    }

}

猜你喜欢

转载自blog.csdn.net/liangjiabao5555/article/details/130531959
今日推荐