我已经从mozilla PDF.JS项目修改了web / viewer,这样我就可以将页面导出到单独的HTML页面。但是当我尝试导出所有页面时,我注意到渲染还没有完成。
我在viewer.js中创建了自己的函数:
renderAll: function pdfViewAll() {
if (PDFView.idleTimeout) {
clearTimeout(PDFView.idleTimeout);
PDFView.idleTimeout = null;
}
// Pages have a higher priority than thumbnails, so check them first.
var allPages = this.getAllPages();
for (var count = 0; count < this.pages.length; count++) {
this.renderView(this.pages[count], 'page');
this.pages[count].scrollIntoView();
}
},
我正在侦听两个位置以查明是否有任何页面已完成渲染。
第一个位置是调用renderView
时:
renderView: function pdfViewRender(view, type) {
var state = view.renderingState;
switch (state) {
case RenderingStates.FINISHED:
if (EXPORTING) {
view.scrollIntoView();
preparePageExport(view.id);
}
return false;
case RenderingStates.PAUSED:
PDFView.highestPriorityPage = type + view.id;
view.resume();
break;
case RenderingStates.RUNNING:
PDFView.highestPriorityPage = type + view.id;
break;
case RenderingStates.INITIAL:
PDFView.highestPriorityPage = type + view.id;
if (EXPORTING)
view.scrollIntoView();
view.draw(this.renderHighestPriority.bind(this));
break;
}
return true;
},
第二个位置是调用renderTask
的回调时:
var renderTask = this.renderTask = this.pdfPage.render(renderContext);
this.renderTask.promise.then(
function pdfPageRenderCallback() {
pageViewDrawCallback(null);
if (EXPORTING) {
preparePageExport(self.id);
}
},
function pdfPageRenderError(error) {
pageViewDrawCallback(error);
}
);
preparePageExport(self.id)函数只是一个从画布页面获取图像的函数。 并非所有页面都在准备中。我还是比较新的PDF.JS所以你能看到我在这里缺少的东西吗?