pdf.js在getDocument上失败了

时间:2014-12-31 17:23:48

标签: javascript grails html5-canvas pdf-generation pdf.js

  • 浏览器:Chrome
  • environment:grails app localhost

我在本地主机上运行grails应用程序(我知道这是pdf.js和本地文件系统的问题)而不是使用文件:url我知道会失败我传入一个打字的javascript数组,但它仍然失败。为了正确,除了"警告:设置假工作者之外,它没有告诉我任何事情。"然后它什么也没做。

this.base64ToBinary = function(dataURI) {
        var BASE64_MARKER = ';base64,';
        var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
        var base64 = dataURI.substring(base64Index);
        var raw = window.atob(base64);
        var rawLength = raw.length;
        var array = new Uint8Array(new ArrayBuffer(rawLength));

        for(i = 0; i < rawLength; i++) {
        array[i] = raw.charCodeAt(i);
        }
        return array;
    };

PDFJS.disableWorker = true; // due to CORS

// I convert some base64 data to binary data here which comes back correctly
var data = utilities.base64ToBinary(result);

PDFJS.getDocument(data).then(function (pdf) {
         //nothing console logs or reaches here
         console.log(pdf);
}).catch(function(error){
//no error message is logged either
            console.log("Error occurred", error);
        });

我想知道我是不是没有正确设置?我可以仅仅在客户端使用这个库,只包括pdf.js或者我是否还需要包含viewer.js?而且我注意到兼容性文件...设置不是很清楚,这个例子有效FIDDLE而且我没有,我也不理解差异。此外,如果我使用该示例中提供的URL,它也会说同样的事情。

enter image description here

2 个答案:

答案 0 :(得分:15)

我回答我自己的问题:

文档根本不清楚。如果没有将PDFJS.workerSrc定义为指向正确的pdf.worker.js文件而不是pdf.js,它会尝试找出正确的src路径到文件并加载它。

然而,他们的方法非常粗略:

if (!PDFJS.workerSrc && typeof document !== 'undefined') {
  // workerSrc is not set -- using last script url to define default location
  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');
  })();
}

他们只抓取头部中的最后一个脚本标记,并假设这是加载文件的正确src,而不是搜索包含“pdf.js”的src的所有脚本标记并将其用作正确的脚本标记。

相反,他们应该说清楚,并要求你事实上指向PDFJS.workerSrc =“(你的路径)/pdf.worker.js”

答案 1 :(得分:2)

以下是简短的回答:在代码开头定义PDFJS.workerSrc。

PDFJS.workerSrc = "(your path)/pdf.worker.js"

请参阅文档中的示例:https://mozilla.github.io/pdf.js/examples/#interactive-examples