前端调用:
<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();
}
}