代码编织梦想

 

需求是点击查看收据按钮,进入新页面直接显示收据,可以放大、缩小、旋转、下载,没有分页

1、安装

npm i vue-pdf --save

2、使用

<template>
  <div >
    <pdf v-if="show" :rotate="pageRotate" ref="pdf" :src="pdfSrc" />
    <div v-if="show" class="btn_contain">
      <div class="com_btn" @click="scaleD">放大</div>
      <div class="com_btn" @click="scaleX">缩小</div>
      <div class="com_btn" @click.stop="clock">旋转</div>
      <div class="com_btn" @click="downloadPDF">下载</div>
    </div>
  </div>
</template>
<script>
import pdf from 'vue-pdf'
import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
import { Toast } from 'vant'
export default {
  components: {
    pdf
  },
  data() {
    return {
      pdfSrc: '',
      pxheight: '',
      pxwidth: '',
      scale: 100, // 放大系数
      pageRotate: 0,//旋转系数
      url: ``,//此处为后台返回的预览pdf的url接口路径,带参数,不便展示,所以删除,自己加上就好
      loadingInstance: null,
      show: false
    }
  },
  created(){
  },
  mounted() {
    this.loadPdf(this.url)
    
  },
  methods: {
    // pdf加载时
    loadPdf(url) {

      // 展示loading
      this.loadingInstance = Toast.loading({
        duration: 0, // 持续展示 toast
        forbidClick: true,
        message: '加载中...'
      })
      let CMAP_URL = "https://unpkg.com/pdfjs-dist@2.0.943/cmaps/";
      this.pdfSrc = pdf.createLoadingTask({
        url,
        cMapUrl: CMAP_URL,
        cMapPacked: true,
        CMapReaderFactory
      });

      this.pdfSrc.promise.then((pdf) => {

        // 清除loading
        this.loadingInstance && this.loadingInstance.clear();
        this.show = true

      }).catch(()=>{})
    },

    // 放大
    scaleD(){
      this.scale += 5
      this.$refs.pdf.$el.style.width = parseInt(this.scale) + '%'
    },

    // 缩小
    scaleX () {
      if (this.scale === 100) {
        return
      } this.scale += -5
      this.$refs.pdf.$el.style.width = parseInt(this.scale) + '%'
    },

    // 旋转
    clock () {
      this.pageRotate += 90
    },
    
    //下载PDF
    downloadPDF(){
      window.location.href = ''//此处为后台返回的下载pdf的url接口路径,带参数,不便展示,所以删除,自己加上就好
  },
}
</script>

使用vue-pdf遇到的坑,总的来说有三个

1、进入页面后不显示文字

查阅解决方法,看到了两种,

一种是导入cMapReaderFactory,但是用第一种方法会导致问题2 (看了一个大佬写的)

一种是代码中加CMAP_URL和cMapPacked两个参数(这种的不知道管不管用)

巧的是这两种我都不管用,哈哈哈哈哈

2、进入页面后显示,但是再次进入页面不显示问题

引入了cMapPacked之后解决了上面的问题,但是紧接着出现了再次进入页面不显示的问题。

在CMapReaderFactory文件中的代码是这样的 

import { CMapCompressionType } from 'pdfjs-dist/es5/build/pdf.js'

// see https://github.com/mozilla/pdf.js/blob/628e70fbb5dea3b9066aa5c34cca70aaafef8db2/src/display/dom_utils.js#L64

export default function() {

	this.fetch = function(query) {

		return import('./buffer-loader!pdfjs-dist/cmaps/'+query.name+'.bcmap' /* webpackChunkName: "noprefetch-[request]" */)
		.then(function(bcmap) {
      

			return {
				cMapData: bcmap.default,
				compressionType: CMapCompressionType.BINARY,
			};
		});
	}
};

这段代码通过动态import PDF的语言文件实现解决中文显示的问题

3、pdf签章没显示出来,控制台提示:Warning: Unimplemented widget field type "Sig", falling back to base field type

(1)找到 node_modules\pdfjs-dist\build\pdf.worker.js 将下面的代码行注释掉

if (data.fieldType === "Sig") {
      data.fieldValue = null;
      // this.setFlags(_util.AnnotationFlag.HIDDEN);//将这一行注释掉解决签章不显示问题
    }

 2、找到 node_modules\pdfjs-dist\es5\pdf.worker.js 将下面的代码行注释掉

if (data.fieldType === "Sig") {
      data.fieldValue = null;

   // _this3.setFlags(_util.AnnotationFlag.HIDDEN);//将这一行注释掉
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_53889154/article/details/121650126

vue移动端预览pdf功能(可以多页)以及第三方电子签章不能正常展示解决方案(多种)_爬坑之路的博客-爱代码爱编程_vue-pdf不显示盖章

vue移动端预览pdf功能(可以多页)以及第三方电子签章不能正常展示解决方案(多种) 随着网络的发展,PC端的网站已不能满足人们的需求,人们更喜欢采用移动端进行业务操作。最近公司要求把PC端网站的订单合同签署功能

vue pdf下载及预览(移动端)-爱代码爱编程

本文使用的是 vue-pdf,其实还有其他的很多比如pdf.js,只不过觉得这个和vue结合了应该不用下载一堆东西,直接npm install就可以,所以采用vue-pdf来撰写pdf下载及预览。 无论是预览还是下载,都需要安装vue-pdf 先看下效果: 1、安装vue-pdf npm install --save vue-pdf 2、在需

pdf H5 适用于(vue)-爱代码爱编程

之前记录过一篇查看pdf的npm方法,但是在移动端去查看,翻页去加载的时候会出现卡顿,发现pdfh5用户体验会更加友好。推荐一下:   安装依赖包: npm install pdfh5 import Pdfh5 from "pdfh5"; export default { name: 'App', data() { re

uniapp h5/app实现pdf在线预览/vue中pdf.js使用-爱代码爱编程

微信公众号h5实现pdf在线预览/vue中pdf.js使用 最近做的一个公众号项目,项目需求需要在页面内预览pdf文件。本来想直接用链接去预览,结果发现安卓手机会直接提示下载,ios可以预览,这样是不满足需求的。最后使用了pdf.js。官网下载地址 https://mozilla.github.io/pdf.js/getting_started/#dow

vue实现移动端在线预览pdf-爱代码爱编程

1.安装vue-pdf 命令:npm install --save vue-pdf 安装的版本为 2.代码块 <template> <div class="pdf"> <p class="arrow"> <span @click="changePdfPage(0)" class=

vue 在线看PDF(PC端和移动端)-爱代码爱编程

一、PC端:直接用iframe,让后台返回文件流就可以看到了 <template> <div> <!-- PDF --> <iframe :src="url" width="100%" height="900px"></iframe> </div> </

Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)-爱代码爱编程

一、使用插件pdfh5预览pdf 参考文档:https://codechina.csdn.net/mirrors/gjTool/pdfh5?utm_source=csdn_github_accelerator 预览效果如下图所示: 1.上下滚动和缩放查看 2.左上角固定显示当前页码和总页数 3.右下角一键回到顶部按钮 4.在每页pdf上添加图片

pdf在h5显示:vue-pdf 与 pdf.js-爱代码爱编程

需求: 在h5端预览pdf,同时需要判断pdf已经看完,要保存pdf的当前页面,下次打开的时候要回到当前页 方式:vue-pdf与pdf.js+iframepdf.js + iframe 由于我的项目是要在企业微信打开,所以必须要打包到服务器上测试:所以,我的pdf文件需要先放到服务器上面。在官网上下载pdf.js,不同版本可能有不同的坑,如果想深入了解

vue——移动端在线预览pdf并能缩放(pdfh5)-爱代码爱编程

最近接了一个需求需要在移动端预览pdf,并切要能缩放,百度发现大多推荐vue-pdf,但是vue-pdf这个包,安装之后运行报错,解决之后的实现效果不符合需求需要,而且,实现缩放功能的时候,整个canvas画布整个放大,虽然有放大效果,但是,画布无法滚动,交互体验实在是太差,最后找到pdfh5这个包,预览效果不错,而且支持手势缩放和分页功能。 pdfh5

html5+app预览pdf文件,Vue实现在线预览pdf文件功能(利用pdf.js/iframe/embed)-爱代码爱编程

前言 最近在做一个精品课程,需要在线预览课件ppt,我们的思路是将ppt转换为pdf在线预览,所以问题就是如何实现在线预览pdf了。 在实现的过程中,为了更好地显示效果,我采用了多种不同的方法,最终选择效果最好的pdf.js。 实现方法: 1:iframe 采取iframe将pdf嵌入网页从而达到预览效果,想法很美好,实现很简单,但显示很残酷

解决移动端使用vue-pdf实现pdf文件预览造成的中文缺失或电子章缺失-爱代码爱编程

 方法一: 治标不治本 第一步:使用插件 this.pdfSrc = pdf.createLoadingTask(this.pdfSrc); 为 let CMAP_URL = "https://unpkg.com/pdfjs-dist@2.0.943/cmaps/"; this.pdfSrc = pdf.createLoadingTas

Vue项目H5移动端在线预览PDF文件-爱代码爱编程

1、安装pdfh5插件 npm install pdfh5 --save 2、使用 <template> <div id="app"> <div id="demo"></div> </div> </template> <script> import P

分享一个vue的插件,查看pdf文件 pdfh5-爱代码爱编程

一、安装 npm install pdfh5 二、写一个公共组件toUpdate,这是一个pdf的详细信息 <template> <div id="app"> <van-sticky> <van-nav-bar title="详细内容" left-arrow @click-left="

vue-使用pdfh5预览pdf-爱代码爱编程

父组建// url为预览的pdf文件地址 <showPdf v-else :url="url" /> 子组建// dom <div class="pdf_box"> <div id="demo"></div> </div> // js import Pdfh5 from "pdfh5";

VUE----移动端在线预览pdf 可上下滚动,大小缩放(pdfh5)-爱代码爱编程

VUE----移动端在线预览pdf 可上下滚动,大小缩放(pdfh5) 1.安装需要的工具包 npm i --save pdfh5 2.写入组件 <template> <div :class="$style.pdf" v-show="visible"> <div @click="visible = f

关于vue-pdf的使用h5-爱代码爱编程

引用 及使用 import pdf from 'vue-pdf' export default { name: 'Pdf', components:{ pdf }, data(){ return{ src: "", vuePdf: null, numPages:1, }