springboot+vue实现浏览器直接预览pdf文件

最近开发有个需求是,实现浏览器预览pdf文件,数据库存储的pdf文件url地址,通过url地址下载pdf文件,并返回流,最终实现pdf文件预览,需求不难,以下提供我的解决思路。

一,前端部分

点击按钮打开pdf

 

 打开实现打开pdf方法

   openpdf (url) {
      // window.open(url,'_blank');

      const sendurl = "/file/download";
      download(sendurl,{fileUrl:url}).then((res) => {
        const binaryData=[];
        binaryData.push(res)
        window.open(window.URL.createObjectURL(new Blob(binaryData,{'type':'application/pdf'})))
          let objectUrl = window.URL.createObjectURL(new Blob([res]));
          const elink = document.createElement('a');

        })
    },

发起请求的封装,responseType很重要,须设置为blob

export function download(url,param,data) {
  return request({
    url: url,
    method: "post",
    params: param,
    data,
    responseType: 'blob',//将文件流转成blob对象
    noErrorMsg: false
  });
}

二,后端部分

    @Value("${web.upload-path}")
    private String rootPath;

        @RequestMapping(value = "/download", method = RequestMethod.POST)
    public HttpServletResponse download(String fileUrl, HttpServletResponse response) throws IOException {
        // path是指欲下载的文件的路径。
        File file = new File(rootPath+"/"+fileUrl);
        // 取得文件名。
        String filename = file.getName();
        // 取得文件的后缀名。
        String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
        // 以流的形式下载文件。
        InputStream fis = new BufferedInputStream(new FileInputStream(rootPath+"/"+fileUrl));
        byte[] buffer = new byte[fis.available()];
        fis.read(buffer);
        fis.close();
        // 清空response
        response.setCharacterEncoding("utf-8");
//        response.setHeader("Content-disposition", "attachment;filename="+ filename + ".pdf");
        // 设置response的Header
        response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
        response.addHeader("Content-Length", "" + file.length());
        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
//        response.setContentType("application/octet-stream");
        toClient.write(buffer);
        toClient.flush();
        toClient.close();


        return response;
    }

三,效果实现

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现PDF预览可以使用以下步骤: 1. 后端使用SpringBoot框架,引入pdfbox库(可以使用Maven等工具进行管理),用于读取PDF文件内容。 2. 前端使用Vue框架,引入pdf.js库,用于在网页中展示PDF文件。 3. 后端提供一个接口,用于获取PDF文件内容,并返回给前端。 4. 前端通过Ajax请求后端接口,获取PDF文件内容,并使用pdf.js库在网页中展示PDF文件。 具体实现步骤如下: 后端实现: 1. 在pom.xml文件中添加pdfbox依赖: ```xml <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.17</version> </dependency> ``` 2. 定义一个Controller,提供一个接口用于获取PDF文件内容: ```java @RestController @RequestMapping("/api/pdf") public class PdfController { @GetMapping("/{filename}") public String getPdfContent(@PathVariable String filename) throws IOException { File file = new File("path/to/pdf/" + filename); PDDocument document = PDDocument.load(file); PDFTextStripper stripper = new PDFTextStripper(); String content = stripper.getText(document); document.close(); return content; } } ``` 3. 启动SpringBoot应用,访问`http://localhost:8080/api/pdf/test.pdf`即可获取test.pdf文件的内容。 前端实现: 1. 在Vue组件中引入pdf.js库: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.3.200/pdf.min.js"></script> ``` 2. 在Vue组件中定义一个方法,用于获取PDF文件内容并展示: ```javascript methods: { loadPdf(filename) { axios.get(`/api/pdf/${filename}`) .then(response => { const data = response.data; const pdfDoc = pdfjsLib.getDocument({data: data}); pdfDoc.promise.then(pdf => { for (let i = 1; i <= pdf.numPages; i++) { pdf.getPage(i).then(page => { const canvas = document.createElement('canvas'); const scale = 1.5; const viewport = page.getViewport({scale: scale}); const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; const renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext).promise.then(() => { const img = canvas.toDataURL(); // 将img添加到页面中展示 }); }); } }); }) .catch(error => { console.error(error); }); } } ``` 3. 调用loadPdf方法,传入PDF文件名即可展示PDF文件。 以上就是使用SpringBootVue实现PDF预览的步骤,可以根据实际需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值