我现在正在尝试将包含多个页面的整个pdf文件呈现到我的网页中,并且一个画布对应于一个页面。虽然我可以在单页翻译之后将代码放在then()Promise中以解决问题,但我发现我无法使用$ .when函数来检测所有页面都已呈现。我目前的解决方案是逐个渲染页面并在最后一页的然后()Promise中运行我的代码。我希望还有其他解决方案!
谢谢!
以下代码不起作用:
var renderArray = new Array();
for (var pageNo = 0; pageNo < pdfPageArray.length; pageNo++)// All pages extracted by PDF.JS are stored in pdfPageArray
{
var page = pdfPageArray[pageNo];
var viewport = page.getViewport(printScale);
var canvas = document.createElement('canvas');
$(canvas).css({width:"100%",height:"100%"});
var outputScale = getOutputScale(context);
canvas.width = (Math.floor(viewport.width) * outputScale.sx) | 0;
canvas.height = (Math.floor(viewport.height) * outputScale.sy) | 0;
$(printPageDiv).append(canvas);
var context = canvas.getContext("2d");
var renderContext = {
canvasContext: context,
viewport: viewport
};
renderArray.push(page.render(renderContext));
}
return $.when.apply($, renderArray);//It seems this when function doesn't work
答案 0 :(得分:2)
这是一个棘手的问题。
jQuery承诺不会吸收其他图书馆的承诺,它们不是Promises / A +投诉,并且它们与其他承诺不能很好地运作。事实上,$.when
仅适用于jQuery承诺。
而是本机承诺,或者polyfill PDF.JS为那些,甚至是更有能力的承诺库提供。
将$.when.apply($, renderArray)
更改为:
Promise.all(renderArray);
其他一些提示 - 使用[]
代替new Array
(做同样的事情),您可能要考虑直接在.map
中Promise.all
传达意图更好。