pdf預覽

通過接口拿到第三方的鏈接,然后判斷不同環境,比如app, h5,小程序等等,用對應的方法打開一個新的webview打開鏈接展示,但是沒想到里面又pdf。然后在ios上,h5無法展示。
換個思路,第三方鏈接,會返回一個type類型,如果是pdf。那給拼接上一個h5的地址,然后用webview打開。
h5的地址就是一個展示pdf的作用。比如我們的 https://medicaluat.mobile.taikang.com/active/pdfViewer/index.html#/pdfView?pdfUrl=后面跟pdf的鏈接
https://medicaluat.mobile.taikang.com/active/pdfView/index.html#/pdfViewer?pdfUrl=https%3A%2F%2Ftlifehealth.taikang.com%2Factive%2Fimg%2Fpdf%2F202303301413.pdf

實現 pdfViewer.vue
依賴

    "pdfjs-dist": "^2.5.207",
    "pdfvuer": "^1.6.1",
    "vconsole": "^3.3.0",
    "vue": "^2.6.6",
    "vue-pdf": "^4.2.0",
<template>
  <div id="pdfvuer" class="pdfvuer">
    <pdf
      ref="pdf"
      :src="pdfdata"
      v-for="i in numPages"
      :rotate="pageRotate"
      :key="i"
      :id="i"
      :page="i"
      :scale.sync="scale"
    ></pdf>
    <!--  當前頁/總頁數  -- 滑動的時候,當前頁不變,直接給去掉了>
    <!-- <div class="pageNum">{{ page }}/{{ numPages }}</div> -->    <!--  下方tab欄  -->
    <div class="pdf-tab">
      <div
        v-for="(item, i) in tabItem"
        :key="i"
      >
        <div
          class="operate-item"
          @click.stop="item.func"
        >
          <img
            :class="{
              radioImg: item.imgSize == 'radio',
              flatImg: item.imgSize == 'flat',
            }"
            :src="img_base_url + item.icon"
            alt=""
          />
          <div class="txt">{{ item.txt }}</div>
        </div>
      </div>
    </div>
  </div>
</template>
   
  <script>
import pdfvuer from 'pdfvuer';

export default {
  components: {
    pdf: pdfvuer,
  },
  data() {
    return {
      page: 1,
      numPages: 0,
      pdfdata: undefined,
      errors: [],
      scale: 'page-width', //放大系數
      pageRotate: 0,
      pdfUrl: '',
      tabItem: [
        {
          //下方tab欄
          func: this.clock,
          icon: 'rotate_icon.png',
          txt: '翻轉',
          imgSize: 'radio',
        },
        // {
        //   func: this.prePage,
        //   icon: 'pre_icon.png',
        //   txt: '上一頁',
        //   imgSize: 'flat',
        // },
        // {
        //   func: this.nextPage,
        //   icon: 'next_icon.png',
        //   txt: '下一頁',
        //   imgSize: 'flat',
        // },
        {
          func: this.scaleD,
          icon: 'magnify_icon.png',
          txt: '放大',
          imgSize: 'radio',
        },
        {
          func: this.scaleX,
          icon: 'reduce_icon.png',
          txt: '縮小',
          imgSize: 'radio',
        },
      ],
    };
  },
  mounted() {
    let queryData = this.$route.query;
    if(!!queryData.pdfUrl){
      this.pdfUrl = queryData.pdfUrl
      this.getPdf();
    }
  },
  watch: {
    show: function (s) {
      if (s) {
        this.getPdf();
      }
    },
    page: function (p) {
      if (
        window.pageYOffset <= this.findPos(document.getElementById(p)) ||
        (document.getElementById(p + 1) &&
          window.pageYOffset >= this.findPos(document.getElementById(p + 1)))
      ) {
        document.getElementById(p).scrollIntoView();
      }
    },
  },
  methods: {
    // 上一頁
    prePage() {
      let p = this.page;
      p = p > 1 ? p - 1 : 1;
      this.page = p;
    },
    // 下一頁
    nextPage() {
      let p = this.page;
      p = p < this.numPages ? p + 1 : 1;
      this.page = p;
    },
    // 左滑動翻頁
    nextPageLeft() {
      if (this.scale == 100) {
        this.nextPage();
      } else {
        return;
      }
    },
    // 順時針旋轉
    clock() {
      this.pageRotate += 90;
    },
    // 逆時針旋轉
    counterClock() {
      this.pageRotate -= 90;
    },
    //放大
    scaleD() {
      this.scale += 0.2;
    },

    //縮小
    scaleX() {
      if (this.scale <= 0.2) return false;
      this.scale += -0.2;
    },
    getPdf() {
      var self = this;
      self.pdfdata = pdfvuer.createLoadingTask(this.pdfUrl)
      self.pdfdata.then((pdf) => {
        self.numPages = pdf.numPages;
        window.onscroll = function () {
          changePage();
          stickyNav();
        };

        // Get the offset position of the navbar
        // var sticky = $('#buttons')[0].offsetTop;

        // Add the sticky class to the self.$refs.nav when you reach its scroll position. Remove "sticky" when you leave the scroll position
        function stickyNav() {
          //   if (window.pageYOffset >= sticky) {
          //     $('#buttons')[0].classList.remove('hidden');
          //   } else {
          //     $('#buttons')[0].classList.add('hidden');
          //   }
        }

        function changePage() {
          var i = 1,
            count = Number(pdf.numPages);
          do {
            if (
              window.pageYOffset >= self.findPos(document.getElementById(i)) &&
              window.pageYOffset <= self.findPos(document.getElementById(i + 1))
            ) {
              self.page = i;
            }
            i++;
          } while (i < count);
          if (window.pageYOffset >= self.findPos(document.getElementById(i))) {
            self.page = i;
          }
        }
      });
    },
    findPos(obj) {
      return obj.offsetTop;
    },
  },
};
</script>
   
  <style lang="less" scoped>
// #buttons {
//   margin-left: 0 !important;
//   margin-right: 0 !important;
// }
/* Page content */
.pdfvuer {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  max-width: 667px;
  width: 100%;
  margin: 0 auto;
  overflow: auto;
  height: 100%;
  -webkit-overflow-scrolling: touch;
  font-size: 0.28rem;
  padding-top: 5px;
  background-color: #f4f6fc;
}
.content {
  padding: 16px;
}
.pageNum {
  margin: 0 auto;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 30px;
  width: 80px;
  background: #e6e9f4;
  border-radius: 3px;
  font-family: PingFang-SC-Regular;
  font-size: 16px;
  color: #9b9b9b;
  text-align: center;
  line-height: 16px;
  position: fixed;
  bottom: 60px;
  left: 142px;
}
.pdf-tab {
  position: fixed;
  background-color: #fff;
  width: 100%;
  bottom: 0px;
  left: 0;
  display: flex;
  justify-content: space-between;
  font-size: 14px;
  padding: 10px 40px;
  box-sizing: border-box;

  .operate-item {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;

    .radioImg {
      width: 20px;
      height: 20px;
    }

    .flatImg {
      width: 12px;
      height: 20px;
    }

    .txt {
      margin-top: 5px;
      font-family: PingFang-SC-Regular;
      font-size: 11px;
      color: #9b9b9b;
      text-align: center;
      line-height: 12px;
    }
  }

  .paddingRight50 {
    padding-right: 50px;
  }

  .paddingLeft20 {
    padding-left: 20px;
  }
}
</style>
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容