VUE pdf.js 实现远程pdf文件预览

1:下载pdf

进入pdf.js官网地址:https://mozilla.github.io/pdf.js/getting_started/#download

2:将下载的pdf文件放入项目静态文件中,vue3.0的话放入到public下,如果是vue2.x版本直接放在根目录的static下

3:页面使用

<iframe :src="pathUrl" width="100%" height="500px"></iframe>

4:前端api代码

export const getDownloadFile = (params) => {
    return new request({
        url: './right/right/rightLaws/getDownloadFile',
        method: 'get',
        params: params,
        responseType:'blob'
    });
}

5:前端vue对象methods中定义的方法

//预览
previewPDFFile(){
      getDownloadFile({
        lawId:this.lawIdActive
      }).then(res => {
        const content = res.data
        if(content){
          this.pathUrl  = this.getObjectURL(content);
        }else{
          this.$message.error('服务器繁忙');
        }

      }).catch(error => {
        console.log(error);
      })
},


// 将返回的流数据转换为url
getObjectURL(file) {
      var binaryData = [];
      binaryData.push(file);
      let url = null;
      if (window.createObjectURL !== undefined) { // basic
        url = window.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
      } else if (window.webkitURL !== undefined) { // webkit or chrome
        try {
          url = window.webkitURL.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
        } catch (error) {

        }
      } else if (window.URL !== undefined) { // mozilla(firefox)
        try {
          url = window.URL.createObjectURL(new Blob(binaryData, {type: 'application/pdf'}));
        } catch (error) {

        }
      }
      return url;
},

6:服务端文件下载接口 - 返回文件流

    /**
	 * @description 下载文件
	 */
	@ApiOperation("下载文件")
	@GetMapping("/getDownloadFile")
	public void getDownloadFile(Long lawId, HttpServletResponse response) {
		try{
			//这里仅做样例,根据个人需求,获取对应的文件全路径
            String fileName = "D:/123.pdf";
			// 读到流中
			InputStream inStream = new FileInputStream(fileName);// 文件的存放路径
			// 设置输出的格式
			response.reset();
			response.setContentType("bin");
			response.addHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode("123456.pdf", "UTF8") + "\"");
			// 循环取出流中的数据
			byte[] b = new byte[100];
			int len;
			try {
				while ((len = inStream.read(b)) > 0)
					response.getOutputStream().write(b, 0, len);
				inStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}

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

	}

7:最终呈现效果(谷歌浏览器,不同浏览器存在差异)

 



 

### 在 Vue 2 中集成 PDF.js 实现 PDF 文件预览 #### 安装依赖库 为了在 Vue 2 项目中使用 `pdf.js`,需要安装相应的 npm 包。可以执行如下命令来完成安装: ```bash npm install pdfjs-dist --save ``` 这会将 `pdf.js` 的分发版加入到项目的依赖列表之中。 #### 导入并初始化 PDF.js 库 在组件内部或者全局配置文件内导入 `pdf.js` 并设置其工作路径以便加载必要的资源文件: ```javascript import * as pdfjsLib from 'pdfjs-dist'; // 如果不希望浏览器缓存worker,则取消下面这一行的注释 // import { Worker } from 'comlink'; pdfjsLib.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.entry'); ``` 这段代码指定了 worker 脚本的位置,这对于处理 PDF 解析非常重要[^1]。 #### 创建用于展示 PDF 文档的方法 定义一个方法用来获取远程服务器上的 PDF 流数据,并将其渲染至页面上指定区域。这里假设已经有一个 API 接口能够返回 PDF 文件的内容作为二进制流形式的数据。 ```javascript methods: { async loadPdf(url) { try { const loadingTask = pdfjsLib.getDocument({ url }); this.pdfDocument = await loadingTask.promise; console.log(`Total pages: ${this.pdfDocument.numPages}`); this.renderPage(1); } catch (error) { console.error('Error while trying to fetch the document:', error.message); } }, renderPage(num) { this.pdfDocument.getPage(num).then((page) => { let viewport = page.getViewport({ scale: 1.5 }); let canvas = document.getElementById('the-canvas'); let context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; let renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext); if (num < this.pdfDocument.numPages && num === 1){ setTimeout(() => this.renderPage(++num), 1000 / 60); // 渲染下一页 } }); } } ``` 上述函数实现了通过给定 URL 加载 PDF 文档的功能,并逐页绘制出来。注意这里的定时器是为了模拟连续翻页的效果,在实际应用中可能不需要这样的逻辑[^3]。 #### 组件模板部分 最后一步是在 HTML 模板里面准备一块画布供 JavaScript 使用来进行绘图操作: ```html <template> <div class="pdf-viewer"> <canvas id="the-canvas"></canvas> </div> </template> <style scoped> /* 添加一些样式让 Canvas 更美观 */ #the-canvas { border: solid 1px black; } </style> ``` 这样就完成了基本功能——在一个简单的 Vue 2 单文件组件中集成了 PDF.js 来显示来自网络地址的 PDF 文件[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值