vue实现预览pdf组件(vue-pdf插件使用)

本文介绍了如何在Vue项目中使用vue-pdf插件实现PDF预览,并解决了中文显示问题。遇到的诡异现象是首次预览后无法打开后续PDF,通过引入CMapReaderFactory解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组件 PriviewPdf

  • 简易版 (页尾是完整版)

<template>
  <div class="priview-pdf-img">
	<pdf :pdfUrl="pdfSrc"></pdf>
  </div>
</template>
<script>
import pdf from 'vue-pdf'
export default {
  name: 'priview-pdf',
  components: {
    pdf
  },
  props: {
    // 外部传递pdfUrl 即可
    pdfUrl: {
      type: String,
      default: ''
    }
  },
  computed: {
    pdfSrc () {
      return this.pdfUrl
    }
  }
}
</script>
  • 页面
	<priview-pdf pdfUrl="文件地址"></priview-pdf>
  • 思路

    • 安装 vue-pdf 插件
    • 按需引入 import pdf from 'vue-pdf'
    • 当一个组件使用 components: { pdf }
  • 可能遇到的问题

    • 预览时 不能显示中文,特别是发票之类的pdf.
    • 解决方案:
      • 引入 import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
      • 传入的pdfUrl 改为 pdf.createLoadingTask({ url: this.pdfUrl, CMapReaderFactory })
  • 解决中文无法显示的版本

<template>
  <div class="priview-pdf-img">
	<!--  自己设置图片路径-->
    <img src="@/assets/pdfInit.png" @click="dialogPriviewPdf = true" alt="" />
    <el-dialog title="预览" :visible.sync="dialogPriviewPdf"  top="5vh" append-to-body>
      <pdf :src="pdfSrc" ref="pdf"></pdf>
    </el-dialog>
  </div>
</template>
<script>
import pdf from 'vue-pdf'
import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
export default {
  name: 'priview-pdf',
  components: {
    pdf
  },
  props: {
    // 外部传递pdfUrl 即可
    pdfUrl: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      dialogPriviewPdf: false
    }
  },
  computed: {
    pdfSrc () {
      return pdf.createLoadingTask({ url: this.pdfUrl, CMapReaderFactory })
    }
  }
}
</script>
<style lang="less" scoped>
.priview-pdf-img {
  img {
    width: 100px;
    height: 100px;
  }
}
  & /deep/ .el-dialog {
    width: 80%;
    overflow-y: auto;
  }
</style>

··· 生产中出现了一种诡异的情况, 打开第一个pdf后 ,不能打开其他的pdf了
··· 解决方法

import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
 pdfSrc (val) {
      const that = this
      return pdf.createLoadingTask({ url: val, cMapUrl: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.5.207/cmaps/',
      cMapPacked: true })
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值