美文网首页
vue3.2版本中使用pdfjs-dist与坑点

vue3.2版本中使用pdfjs-dist与坑点

作者: 又菜又爱分享的小肖 | 来源:发表于2022-05-18 13:45 被阅读0次
    安装
    npm install pdfjs-dist --save
    

    我的pdfjs-dist版本为:

    "pdfjs-dist": "^2.13.216"
    
    html
              <div
                class="pdf_class"
              >
                <canvas
                  ref="myCanvas"
                  class="pdf-container"
                >
                </canvas>
                <div class="btn_page">
                  <button
                    @click="prePage"
                    class="one"
                  >Prev</button>
                  <span>{{curPage}}/{{pdfEnd}}</span>
                  <button
                    @click="nextPage"
                    class="two"
                  >Next</button>
                </div>
              </div>
    

    将下面链接复制到index.html中

      <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.5.207/pdf.min.js"></script>
    
    JavaScript
    <script setup>
    // 导入pdf
    const pdfJS = window["pdfjs-dist/build/pdf"];
    import { ref } import 'vue';
    const pdfEnd = ref(0); // 尾页码
    const myCanvas = ref(null); // 拿到pdf dom
    let pdfObj = null; // 用于保存pdf实例
    const curPage = ref(1); // 当前页
    const getPage = (pdf, pageNumber) => {  // 参数为pdf实例, 当前页码
      if (pageNumber <= 0) {
        console.log("页数超过");
        curPage.value = 1;
      } else if (pageNumber > pdf.numPages) {
        curPage.value = pdf.numPages;
      } else {
        // 在不超出&低于总页数的情况下执行
        pdf.getPage(pageNumber).then((page) => {
          let canvas = toRaw(myCanvas.value);
          let viewport = page.getViewport({ scale: 1 });
          canvas.height = viewport.height;
          canvas.width = viewport.width;
          let ctx = canvas.getContext("2d");
          let renderContext = {
            canvasContext: ctx,
            viewport: viewport,
          };
          // 显示pdf
          page.render(renderContext).promise.then(() => {
            console.log("显示");
          });
        });
      }
    };
    
    // 初始化 pdf
    const previewPDF = (url) => { // 参数为pdf链接
      let loadingTask = pdfJS.getDocument(url);
      loadingTask.promise.then((pdf) => {
        pdfObj = pdf; // 保存pdf整体实例
        pdfEnd.value = pdf.numPages;
        getPage(pdf, curPage.value);
      });
    };
    
    // 上一页
    const prePage = () => {
      curPage.value--;
      getPage(pdfObj, curPage.value); // 重新执行
    };
    
    // 下一页
    const nextPage = () => {
      curPage.value++;
      getPage(pdfObj, curPage.value);  // 重新执行
    };
    
    previewPDF('pdf链接'); // 进入页面执行
    </script>
    
    坑点

    按道理来说, 可以通过以下方式进行导入

    import * as pdfJS from "pdfjs-dist";
    import * as worker from "pdfjs-dist/build/pdf.worker";
    pdfJS.GlobalWorkerOptions.workerSrc = worker;
    

    而我用了却一直抛出错误, 让我很疑惑, 迫不得已只能选择使用cdn, 这也不是长久之计, 因为我认为使用cdn会让我的项目不够稳定, 求路过的大佬看看这个问题有完美的解决方案么, 跪求, 在此感谢!!!

    相关文章

      网友评论

          本文标题:vue3.2版本中使用pdfjs-dist与坑点

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