vue2.0移动端 使用vue-pdf插件实现PDF文件流在线预览

如果遇到电子签章不显示问题,滑到最下方

npm install --save vue-pdf@4.2.0
npm install pdfjs-dist@2.5.207

如果后台返回的文件流为图片 — 只需要将 <pdf :src="src/> 改为 <img :src="src/">即可
<template>
  <div>
    <!-- pdf预览 -->
    <div>
      <pdf
        :page="pageNum"
        :src="src"
        @progress="loadedRatio = $event"
        @num-pages="pageTotalNum = $event"
      />
      <!--  -->
      <div class="pdf-btn" v-if="pageTotalNum > 1">
        <van-button round type="info" size="small" @click="prePage"
          >上一页</van-button
        >
        <span class="pdf-span">{{ pageNum }}</span>
        <span>/</span>
        <span> {{ pageTotalNum }}</span>
        <van-button round type="info" size="small" @click="nextPage"
          >下一页</van-button
        >
      </div>
      <van-empty v-else description="预览失败" />
    </div>
  </div>
</template>

在接口API函数中声明 responseType: 'blob'

export function viewPdf(data) {
    return request.post(
        "接口地址",
        data,
        { token: true, responseType: 'blob' }
    )
}

后台返回的文件流

<script>
import pdf from "vue-pdf";
import { viewPdf } from "@/api/financing";
export default {
  components: {
    pdf,
  },
  data() {
    return {
      src: "",//文件地址
      pageNum: 1, //当前页
      pageTotalNum: 1, //默认总页数
    };
  },
  mounted() {
    this.loadPdf();
  },
  methods: {
    loadPdf() {
    	//viewPdf():封装的api函数,params:接口入参
        viewPdf(params).then((res) => {
        //blob参数是一个File对象或者Blob对象
		//objectURL是生成的对象URL.通过这个URL,可以获取到所指定文件的完整内容
          this.src = window.URL.createObjectURL(new Blob([res.data]));
        });
    },
    //上一页
    prePage() {
      let page = this.pageNum;
      page = page > 1 ? page - 1 : this.pageTotalNum;
      this.pageNum = page;
    },
    //下一页
    nextPage() {
      let page = this.pageNum;
      page = page < this.pageTotalNum ? page + 1 : 1;
      this.pageNum = page;
    },
  },
};
</script>

在axios拦截器中设置返回数据类型为"blob"时的操作

service.interceptors.response.use(
  response => {
	 if (response.request.responseType == "blob") {
           return response;
          } else {
            return response.data;
          }
	  }
)

电子签章不显示解决方案

一、 在node_modules/pdfjs-dist/build/pdf.worker.js注释掉下方代码

this.setFlags(_util.AnnotationFlag.HIDDEN);

二、 在node_modules/pdfjs-dist/es5/build/pdf.worker.js注释下方代码

_this3.setFlags(_util.AnnotationFlag.HIDDEN);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2实现PDF在线预览可以借助pdf.js库来实现。 首先需要安装pdf.js库: ``` npm install pdfjs-dist ``` 安装完成后,在Vue组件中引入pdf.js: ```javascript import pdfjsLib from 'pdfjs-dist' ``` 接着,在Vue组件中定义一个canvas元素来承载PDF页面: ```html <template> <div> <canvas ref="pdfCanvas"></canvas> </div> </template> ``` 在Vue组件的mounted钩子函数中,使用pdf.js的API来加载PDF文档并进行渲染: ```javascript mounted() { // 获取canvas元素 const canvas = this.$refs.pdfCanvas; // 获取渲染上下文 const context = canvas.getContext('2d'); // 定义PDF文档的URL const pdfUrl = 'https://example.com/example.pdf'; // 加载PDF文档 pdfjsLib.getDocument(pdfUrl).promise.then(pdf => { // 获取第一页 const pageNumber = 1; pdf.getPage(pageNumber).then(page => { // 获取页面渲染参数 const viewport = page.getViewport({ scale: 1 }); // 设置canvas元素的大小 canvas.height = viewport.height; canvas.width = viewport.width; // 渲染PDF页面 const renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext); }); }); } ``` 以上代码中,我们首先获取canvas元素和渲染上下文,然后使用pdfjsLib的getDocument()方法加载PDF文档,接着获取第一页并获取页面渲染参数。最后使用page.render()方法渲染PDF页面。 通过这种方式,就可以在Vue2中实现PDF在线预览了。请注意,以上代码仅为示例代码,具体实现方式可能因情况而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值