没有指定PDFJS.workerSrc

时间:2014-09-29 13:27:04

标签: javascript pdf.js

尝试在本地Apache服务器中使用PDF JS并在控制台中收到以下错误:

Uncaught Error: No PDFJS.workerSrc specified

这非常奇怪,因为我按照这里的例子http://mozilla.github.io/pdf.js/examples/进行了所有操作。

我在我的主文件夹中有一个名为file.pdf的示例文件,而我只是想显示它。我是通过使用带有file参数的iframe来完成的:

<iframe src="./web/viewer.html?file=http://localhost:99/PDF/arquivo.pdf" width="1800px" height="900px" />

现在我尝试使用JavaScript API来显示它。我试图这样做:

<!DOCTYPE html>
<html>
    <head>
        <script src="./build/pdf.js" type="text/javascript"></script>       
        <script type="text/javascript">
            PDFJS.getDocument('arquivo.pdf').then(function(pdf) {
                // Here I use it
            })
        </script>
    </head>
    <body>
    </body>
</html>

如果我尝试手动添加pdf.worker.js,我会收到:

GET http://localhost:99/PDF/build/pdf.worker.worker.js 404 (Not Found)

因为它以编程方式包含 pdf.worker.js

使用我在此处发布的示例代码,我收到一个日志和一个错误:

Error: No PDFJS.workerSrc specified pdf.js:249
    at error (http://localhost:99/PDF/build/pdf.js:251:15)
    at Object.WorkerTransport (http://localhost:99/PDF/build/pdf.js:2305:9)
    at Object.getDocument (http://localhost:99/PDF/build/pdf.js:1805:15)
    at http://localhost:99/PDF/:6:10 pdf.js:251
Warning: Unsupported feature "unknown" pdf.js:234
Uncaught Error: No PDFJS.workerSrc specified

我是否需要手动指定 pdf.worker.js ? 请问,我可以尝试解决这个问题?

非常感谢你!

(*) - 我可以看到缺乏好的内容和PDF.JS的解释文档。

5 个答案:

答案 0 :(得分:19)

我有类似的错误,我通过在pdf.js末尾明确指定pdf.worker.js来修复它

if (!PDFJS.workerSrc && typeof document !== 'undefined') {
  // workerSrc is not set -- using last script url to define default location
  ****** I have no clue what the code below hope to accomplish ********
  ****** How can it locate the script container by assuming it ********
  ****** always would be at the end of <body> or <head> ????   ********
  PDFJS.workerSrc = (function () {
    'use strict';
    var scriptTagContainer = document.body ||
                             document.getElementsByTagName('head')[0];
    var pdfjsSrc = scriptTagContainer.lastChild.src;
    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js');
  })();


  ****** Here I just hardcode the location of the needed file *********
  ****** This is the part that makes it work.                 *********
  ****** Obviously, tailor this to the same path of pdf.js    *********
  PDFJS.workerSrc = '/static/js/pdf.worker.js';
}

答案 1 :(得分:11)

包含compatibility.js以修复IE11上的“Uncaught Error:No PDFJS.workerSrc指定”错误。

https://github.com/mozilla/pdf.js/blob/master/src/shared/compatibility.js

<script src="compatibility.js"></script>
<script src="pdf.js"></script>

compatibility.js实现了PDFJS所需的任何缺失功能。

注意:应该在 PDFJS之前加载,而不是之后。

答案 2 :(得分:7)

在您要使用pdf.js文件的页面中指定psd.worker.js文件路径(如果您使用viewer.html附带分发包,则为viewer.html),如下所示。它适合我。

<script>
    PDFJS.workerSrc ='path to psd.worker.js';

答案 3 :(得分:0)

我在pdf.js的末尾添加了以下代码并且工作正常

if (!PDFJS.workerSrc && typeof document !== 'undefined') {
  PDFJS.workerSrc = (function () {
    'use strict';
    var scriptTagContainer = document.body ||
                             document.getElementsByTagName('head')[0];
    var pdfjsSrc = scriptTagContainer.lastChild.src;
    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js');
  })();
  PDFJS.workerSrc = 'pdf.worker.js';
}

答案 4 :(得分:-2)

转到pdf.js

搜索函数getWorkerSrc()

替换此行

pdfjsFilePath = "YOUR_PATH_TO_JS_FILE/pdf.worker.js";
if (pdfjsFilePath) {
  return pdfjsFilePath;
}