pdf文档Base64编码的预览

最近经常会有针对pdf文档类型进行操作的需求,后端返回的格式都是Base64,需要前端进行预览或者下载等操作。

方案一、利用iframe标签直接显示

原理是利用iframe的src绑定Base64编码可以直接展示,缺点是移动端无法展示,会显示白板,优点是超级简单,下面都是以Vue环境来举例子,不再重复。

//template部分
<template>
<iframe :src="getSrc(item)" frameborder="0"
        style="left: 0;width: 100%;height: 100%;right: 0;top: 0;border: 0;"></iframe>
</template>

//script部分
<script>
data(){
  return {
    item:{
      pdfBase64:'xxxxxxxx';//替换成实际base64字符串
    }
  }
},
computed: {
    getSrc() {
      return function (item) {
        let vSrc = ''
        vSrc =  'data:application/pdf;base64,' + item.pdfBase64
        return vSrc
      }
    },
  },
</script>

方案二、vue-pdf实现

首先如果仅仅是用于纯vue项目,看vue-pdf实现pdf文件在线预览这篇帖子就够了,关键代码如下:

<template>
    <div>
      <pdf  ref="pdf" :src="row"></pdf>
    </div>
</template>

<script>
import pdf from 'vue-pdf'
export default {
  components:{
      pdf
  },
  data(){
      return {
          row:{
            imageBase64:"xxxxxxxx",//替换实际base64编码
          },
      }
  },
  computed: {
    getSrc() {
      return function (row) {
        let vSrc = ''
          vSrc =
            'data:application/pdf;base64,' + row.imageBase64
          vSrc = pdf.createLoadingTask(vSrc);//将base64编码转换成pdf对象
        return vSrc
      }
    },
  },
</script>

但是我按照这篇帖子一通操作后提示如下图报错

error.png

经过一番查询思考后,发现应该不是该插件问题。后来发现可能问题出在我用的是nuxt环境,因为是ssr服务端渲染,在引用插件( NuxtJS项目——插件)这块,需要注意插件到底是在服务端还是客户端使用,所以需要特殊处理一下,参考nuxt 使用 vue-pdf ,解决报错,完美使用
关键代码如下:

//pdf.js文件
import Vue from 'vue'
import pdf from 'vue-pdf'
Vue.component('pdf', pdf)
 
//挂载到全局,用于 createLoadingTask 功能
export default function ({ app, redirect }, inject) {
  inject('pdf', pdf);
}
//nuxt.config.js文件
plugins: [{ src: '~/plugins/pdf.js', ssr: false }]

小插曲 Fix render method missing catch statement on render failure

添加上面的插件部分代码后我信心满满的以为彻底没问题,然而最后关头尽然给我报错了,那一刻我差点就要崩溃了,网上到处查这个报错也没有靠边的帖子(再次吐槽百度真垃圾)。后来经过好心同事提醒,直接去vue-pdf上的issue上看问题才找到这篇帖子338 - Fix render method missing catch statement on render failure,发现是版本问题,于是我将版本降到v4.2.0后成功解决该问题,不容易啊,最后这个问题卡了我好久。

方案二代码汇总

<template>
    <div>
      <pdf  ref="pdf" :src="row"></pdf>
    </div>
</template>

<script>
export default {
  data(){
      return {
          row:{
            imageBase64:"xxxxxxxx",//替换实际base64编码
          },
      }
  },
  computed: {
    getSrc() {
      return function (row) {
        let vSrc = ''
          vSrc =
            'data:application/pdf;base64,' + row.imageBase64
          vSrc = this.$pdf.createLoadingTask(vSrc);//将base64编码转换成pdf对象
        return vSrc
      }
    },
  },
</script>
//pdf.js文件
import Vue from 'vue'
import pdf from 'vue-pdf'
Vue.component('pdf', pdf)
 
//挂载到全局,用于 createLoadingTask 功能
export default function ({ app, redirect }, inject) {
  inject('pdf', pdf);
}
//nuxt.config.js文件
plugins: [{ src: '~/plugins/pdf.js', ssr: false }]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容