Vue3 pdf.js将二进制文件流转成pdf预览

好久没写东西,19年之前写过一篇Vue2将pdf二进制文件流转换成pdf文件,如果Vue2换成Vue3了,顺带来一篇文章,pdf.js这个东西用来解决内网pdf预览,是个不错的选择。

首先去pdfjs官网,下载需要的文件

然后将下载的东西放到public文件下

接下来看一下代码

<auto-dialog
    title="PDF预览"
    :visible="visible"
    :appendToBody="true"
    @close="close"
    width="850px"
    id="pdfDialog"
    class="pdfDialog"
  >
    <template #content>
      <div
        class="pdfContent"
        id="pdfContent"
        v-loading="loading"
        element-loading-text="PDF加载中..."
      >
        <iframe v-if="showPdf" id="previewPdf" :src="pdfSrc" height="500px" width="100%"> </iframe>
      </div>
    </template>
  </auto-dialog>
//方法
loading.value = true
  nextTick(async () => {
    let res = await Pdf({ filePath: props.src }).catch(() => {})
    if (res) {
      //实例读取文件对象
      const r = new FileReader()
      r.onload = function () {
        try {
          loading.value = false
          // this.result为FileReader获取blob数据,如果返回报错信息,则是正确的json数据,JSON.parse会正常转换
          //如果返回文件流,则JSON.parse时会报错,走catch代码块(进行正常的文件下载)
          const resData = JSON.parse(this.result)
          //resData是后端返回的json数据
          console.log(resData)

          if (resData.code !== 0) {
            ElMessage({
              message: resData.msg,
              type: "error"
            })
            return
          }
        } catch (error) {
          var binaryData = []
          binaryData.push(res)
          console.log(binaryData, "------------------------+++binaryData1111111111111111")
          let url = window.URL.createObjectURL(
            new Blob(binaryData, {
              type: "application/pdf"
            })
          )

          showPdf.value = true
          loading.value = false
          pdfSrc.value =
            "/pdf/web/viewer.html?file=" +
            encodeURIComponent(url) +
            "&myTime=" +
            new Date().getTime()
        }
      }
      r.readAsText(res)
    }
  })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值