美文网首页
vue导出pdf(接口)

vue导出pdf(接口)

作者: 李小白呀 | 来源:发表于2023-12-05 11:17 被阅读0次

get请求

export function getPdf(id) {
  const InfoRequestDTO = {
        consumer: store.getters.QLMConfig.application_id,
        language: store.getters.language,
        serialNo: uuid.v1(),
        tag: id
      };
  return request({
    url: store.getters.QLMConfig.qlm_gateway_url + "/specialwork/ZxjlGxcx/getPdf",
    method: 'get',
    params:InfoRequestDTO,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    responseType: 'arraybuffer'
  })
}

调用:

daochu(id) {
      this.loading = true;
      getPdf(id).then(
        data => {
          this.loading = false;
          let blob = new Blob([data], { type: 'application/vnd.ms-pdf' })
          let objectUrl = window.URL.createObjectURL(blob) // 创建URL
          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = objectUrl
          link.download = '突出贡献与创新申报表.pdf' // 自定义文件名
          document.body.appendChild(link)
          link.click() // 下载文件
          window.URL.revokeObjectURL(objectUrl) // 释放内存

          // const url = window.URL.createObjectURL(new Blob([data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }))
          // const link = document.createElement('a')
          // link.style.display = 'none'
          // link.href = url;
          // link.setAttribute('download', '突出贡献与创新申报表.pdf')
          // document.body.appendChild(link)
          // link.click()
          // document.body.removeChild(link)
        }
      )
    },

后端:

Controller
   /**
     * 导出申报表
     *
     * @param response
     * @return
     */
    @ApiOperation(value = "导出申报表", notes = "导出申报表")
    @GetMapping(value = "/getPdf")
    public void getPdf(HttpServletRequest request, HttpServletResponse response) {
//        Map<String, Object> root = new HashMap<String, Object>(); // 创建数据模型
        try {
            String fileName = System.currentTimeMillis() + (int) (Math.random() * 90000 + 10000) + "";
            printFile("ndbg.ftl", root, fileName + ".doc", "C://specialworktempfile/", "C://specialworktempfile/");
            new PdfConverter().doc2pdf("C://" + fileName + ".doc", "C://" + fileName + ".pdf");
            //pdf
            String pdffilePath = "C://" + fileName + ".pdf";
            File pdffile = new File(pdffilePath);
            //doc
            String docfilePath = "C://" + fileName + ".doc";
            File docfile = new File(docfilePath);

            if (pdffile.exists()) {
                FileDownload.fileDownload(response, "C://" + fileName + ".pdf", "申报表" + ".pdf");
                pdffile.delete();
            } else {

            }
            if (docfile.exists()) {
                docfile.delete();

            } else {

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
}


工具类中核心代码
/**
     * @param response
     * @param filePath //文件完整路径(包括文件名和扩展名)
     * @param fileName //下载后看到的文件名
     * @return 文件名
     */
    public static void fileDownload(final HttpServletResponse response, String filePath, String fileName) throws Exception {
        if (fileName == null) {
            fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length());
        }

        File file = new File(filePath);
        if (file.exists()) {
            byte[] data = FileUtil.toByteArray2(filePath);
            fileName = URLEncoder.encode(fileName, "UTF-8");
            //fileName = new String(fileName.getBytes(), "GBK");
            response.reset();
            response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            response.addHeader("Access-Control-Allow-Headers", "Content-Type");
            
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
            response.addHeader("Content-Length", "" + data.length);
            //response.setContentType("Content-Type:application/force-download");
            response.setContentType("application/octet-stream;charset=UTF-8");
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
            outputStream.write(data);
            outputStream.flush();
            outputStream.close();
            response.flushBuffer();
        } else {
            throw new RuntimeException("未找到文件");
        }
    }

相关文章

网友评论

      本文标题:vue导出pdf(接口)

      本文链接:https://www.haomeiwen.com/subject/caqdgdtx.html