我在本地主机上运行一个 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? 而且我注意到兼容性文件......设置不是很清楚,这个例子http://jsfiddle.net/epistemex/LUNaJ/有效,而我的没有,我不明白其中的区别。 此外,如果我使用该示例中提供的 url,它也会说同样的话。
我已经通过一些更新使这个问题更加全面,请让我知道您是否可以提供一些启发。 也没有任何错误功能,我在控制台中看到的只是你在屏幕截图中看到的。
在我们看到完整的示例并有办法在本地重现问题之前,我们无能为力。 请阅读https://github.com/mozilla/pdf.js/blob/master/CONTRIBUTING.md并按要求提供更多信息。
@yurydelendik我应该怎么给你这个小提琴示例有效,但完全相同的代码在我的环境中不起作用......因此我无法为你复制它......我能想到的最好的是我可以和你一起做一个谷歌视频群聊或屏幕英雄来展示给你看。
你至少能给我一些可能性吗?
只是猜测(根据经验):
什么是 pdf.worker.js?
我正在使用最新版本。 还有一些关于 disableWorker/workerSrc 的文档吗?
pdf.worker.js 是执行 PDF 解析的主文件(页面外主线程)。 当 disableWorker=true 时,它将自动(从 workerSrc 位置)加载到主页面并阻止 UI 用于 PDF 解析需求。 见https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L65
啊,好吧,我弄清楚了问题所在……您可能应该在文档中对此进行说明或说明清楚。 因此,如果您不指定 workerSrc,您会尝试通过使用应用程序头部的最后一个脚本标签来加载它,但如果应用程序是 grails 或提供一些组合文件 uri 怎么办? 您也不能可靠地假设最后一个脚本标签具有正确的来源。 如果您想以正确的方式执行此操作,您需要遍历头部中的所有脚本标签,在每个 src 中寻找 pdf.js,然后使用正确的源而不是抓取最后一个。
我个人对grails一无所知。 我们为这些情况配置了 workerSrc。
您需要遍历所有脚本标签
如果pdf.js
名称更改或合并文件的一部分,这将无济于事。
关闭无效。
“如果更改 pdf.js 名称或合并文件的一部分,这将无济于事。” 是的,但除了我自己使用 grails 的问题之外,您无论如何都应该遍历它们以使标准方法更准确。 它充满了漏洞。
最有用的评论
“如果更改 pdf.js 名称或合并文件的一部分,这将无济于事。” 是的,但除了我自己使用 grails 的问题之外,您无论如何都应该遍历它们以使标准方法更准确。 它充满了漏洞。