美文网首页
【vue】vue-pdf预览在线地址文件和本地文件(base64

【vue】vue-pdf预览在线地址文件和本地文件(base64

作者: 西叶web | 来源:发表于2023-03-11 16:40 被阅读0次

    vue-pdf预览在线地址文件和本地文件(base64)

    npm i vue-pdf

    • vue-pdf最好别用4.2,因为他依赖的pdfjs为2.5
    • 但他会下载最新的2.16版本,这个版本和原来的2.5结构目录不一样
    • 一定要使用4.2的话就手动装一下pdfjs-dist的2.5.207版本
    • ==> npm i pdfjs-dist@2.5.207
    <template>
      <div class="VuePdf">
        <div>
          <div>
            <span>在线地址</span>
            <input type="text" v-model="remoteUrl" />
            <button @click="clickUrl">确定</button>
          </div>
          <div style="margin: 10px 0">
            <input type="file" @change="handelChange($event)" />
          </div>
        </div>
    
        <pdf :src="pdfSrc" v-for="i in numPages" :key="i" :page="i"></pdf>
      </div>
    </template>
    
    <script>
    /**
     * vue-pdf最好别用4.2,因为他依赖的pdfjs为2.5,
     * 但他会下载最新的2.16版本,这个版本和原来的2.5结构目录不一样,
     * 一定要使用4.2的话就手动装一下pdfjs-dist的2.5.207 ==> npm i pdfjs-dist@2.5.207
     */
    
    import pdf from "vue-pdf";
    import CMapReaderFactory from "vue-pdf/src/CMapReaderFactory.js"; // 解决部分文字不显示的问题
    export default {
      name: "VuePdf",
      components: { pdf },
      data() {
        return {
          pdfSrc: undefined,
          numPages: 1, //  pdf 文件总页数
          remoteUrl:
            "https://raw.githubusercontent.com/xxxsjan/pdf-server/main/static/pdf/sample.pdf",
          // 也可以使用以下地址
          // 本地 "/static/test.pdf"  这个是放在public下的文件
          // 本地服务 http://127.0.0.1:5000/pdf/sample.pdf"
        };
      },
      methods: {
        handelChange(e) {
          // https://www.cnblogs.com/-roc/p/14750732.html
          var file = new File(e.target.files, "r");
          var reader = new FileReader();
          reader.readAsDataURL(file);
          const vm = this;
          reader.onload = function () {
            // 方法一 传base64 可能会报xhr错误
            const url = reader.result.replace(/octet-stream/, "pdf");
            // 方法二 传解码后的base64
            const data = window.atob(
              reader.result.substring(reader.result.indexOf(",") + 1)
            );
            vm.createPdf({
              // url,
              data,
              cMapUrl: "https://cdn.jsdelivr.net/npm/pdfjs-dist@2.5.207/cmaps/",
              cMapPacked: true,
              CMapReaderFactory,
            });
          };
          reader.onerror = function (error) {
            console.log("Error: ", error);
          };
        },
        /**
         * 设置pdfSrc
         * @param {*} options 地址或者配置对象
         */
        createPdf(options) {
          var loadingTask = (this.pdfSrc = pdf.createLoadingTask(options));
          loadingTask.promise
            .then((pdf) => {
              this.numPages = pdf.numPages;
              console.log("👍 获取成功", loadingTask, this.numPages);
            })
            .catch((err) => {
              console.error("loadingTask 失败", err);
            });
        },
        clickUrl() {
          this.createPdf(this.remoteUrl);
        },
      },
    };
    </script>
    
    <style lang="scss" scoped></style>
    
    

    相关文章

      网友评论

          本文标题:【vue】vue-pdf预览在线地址文件和本地文件(base64

          本文链接:https://www.haomeiwen.com/subject/vomxrdtx.html