【问题标题】:How to import Mozilla PDF.js in Vue project?如何在 Vue 项目中导入 Mozilla PDF.js?
【发布时间】:2021-04-21 08:06:26
【问题描述】:

问题很简单。如何将 PDF.js 库正确导入 Vuejs 项目?

当我登录时图书馆是undefined

See my problem in a codesandbox live here.

这就是我现在尝试的方式:

<script>
import pdfjsLib from "pdfjs-dist/build/pdf";
// import { PDFViewer } from "pdfjs-dist/web/pdf_viewer";
import "pdfjs-dist/web/pdf_viewer.css";

pdfjsLib.GlobalWorkerOptions.workerSrc =
  "https://cdn.jsdelivr.net/npm/pdfjs-dist@2.0.943/build/pdf.worker.min.js";

export default {
  name: "PdfViewer",
  mounted() {
    pdfjsLib.getDocument("./sample.pdf").then((doc) => {
      console.log("doc: ", doc);
    });
  },
  methods: {},
};
</script>

但这给了我以下错误:Cannot read property 'GlobalWorkerOptions' of undefined

【问题讨论】:

    标签: javascript node.js vue.js pdfjs pdfjs-dist


    【解决方案1】:

    我认为如果 pdfjsLib 不属于全局范围,则会发生错误 ,另见codesandbox

    <template>
      <div id="pageContainer">
        <div id="viewer" class="pdfViewer"></div>
      </div>
    </template>
    
    <script>
    import pdfjsLib from "pdfjs-dist/build/pdf";
    import { PDFViewer } from "pdfjs-dist/web/pdf_viewer";
    import "pdfjs-dist/web/pdf_viewer.css";
    
    pdfjsLib.GlobalWorkerOptions.workerSrc =
      "https://cdn.jsdelivr.net/npm/pdfjs-dist@2.0.943/build/pdf.worker.min.js";
    
    export default {
      name: "PdfViewer",
      props: { docPath: String },
      mounted() {
        this.getPdf();
      },
      methods: {
        async getPdf() {
          let container = document.getElementById("pageContainer");
          let pdfViewer = new PDFViewer({
            container: container,
          });
          let pdf = await pdfjsLib.getDocument(this.docPath);
          pdfViewer.setDocument(pdf);
        },
      },
    };
    </script>
    
    <style>
    #pageContainer {
      margin: auto;
      width: 80%;
    }
    
    div.page {
      display: inline-block;
    }
    </style>
    

    使用它:

    <PdfViewer docPath="./sample.pdf" />
    

    【讨论】:

    【解决方案2】:

    Pdf.js 为我们提供解决方案。 Webpack.js 包含在项目中。

    const pdfjsLib = require("pdfjs-dist/webpack");
    

    如果您收到如下错误:

    ./node_modules/pdfjs-dist/build/pdf.min.js 22:36927
    Module parse failed: Unexpected token (22:36927)
    

    那么我们必须使用es5/build/pdf.js,所以我们可以创建src/pdfjs-webpack.js

    "use strict";
    
    var pdfjs = require("pdfjs-dist/es5/build/pdf.min.js");
    var PdfjsWorker = require("worker-loader?esModule=false&filename=[name].js!pdfjs-dist/es5/build/pdf.worker.min.js");
    
    if (typeof window !== "undefined" && "Worker" in window) {
      pdfjs.GlobalWorkerOptions.workerPort = new PdfjsWorker();
    }
    
    module.exports = pdfjs;

    然后:

    <b>const pdfjsLib = require("../pdfjs-webpack");</b>

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2020-08-30
      • 2020-11-17
      相关资源
      最近更新 更多