【问题标题】:PDF.js how to create a page rendered event?PDF.js 如何创建页面渲染事件?
【发布时间】:2015-02-19 20:03:07
【问题描述】:

我正在使用带有默认查看器的 PDF.js,并且需要在每次呈现页面时进行检测。

这应该在文档打开、滚动或缩放时发生。

据我所知,我只能在我自己显式渲染页面时使用 Promise,但是在渲染页面时是否有回调或需要听的东西?实际上获取页面(因为 int 就足够了)也非常重要。

【问题讨论】:

    标签: javascript jquery events promise pdf.js


    【解决方案1】:

    对于显式渲染:

    好吧,我检查了the source,看来如果您明确呈现页面,您可以使用:

    page.render(content).promise.then(function(){
      alert("done");
    });
    

    文档说明:

    承诺渲染任务完成。

    隐式渲染

    好吧,你总是可以重写页面来自己提供一个事件,渲染不在任何原型上,所以这真的很难看。 render 调用返回一个 RenderTask,它有一个 InternalRenderTask,它有一个回调。所以你可以通过这样做来欺骗它:

    var renderTask = page.render(...); // make any page render anything anywhere
    var internal = renderTask.__proto__;
    var oldNext = internal._next;
    
    internal._next = function(){
         if((this.operatorListIdx === this.operatorList.argsArray.length) &&
             this.operatorList.lastChunk){
             anyPageRendered(this.pageNumber);             
         }
         // decorate
         return oldNext.apply(this, arguments);
    };
    
    function anyPageRendered(pageNumber){
        // your code here
        alert("Rendered " + pageNumber); 
    }
    

    这是无证的,可能会破坏。没有记录的方法可以做到这一点。

    【讨论】:

    • 小跟进:不应该也可以在查看器中调用我的代码吗?查看器有一个 pageViewDrawCallback,我尝试在 callback(); 之前调用我的代码;没有成功。到目前为止,在 pageviewDraw 结束时调用它是有效的,但那时我无法访问 textLayer div。这意味着渲染尚未完全完成。有什么想法吗?
    • 在最新的查看器(不是API)中,还有'pagerendered'事件。
    • @sollniss 就像 async5 所说的那样 - 在查看器中这要简单得多 - 您可以使用 pagerendered 事件。
    • 将代码放入 TextLayerBuilder_renderLayer 到目前为止似乎工作正常。
    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2014-10-09
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多