Javascript PDF.JS-检测页面何时呈现

Javascript PDF.JS-检测页面何时呈现,javascript,jquery,html,dom,pdf.js,Javascript,Jquery,Html,Dom,Pdf.js,一旦PDF.JS完成了每个页面的渲染,我想然后对该页面的内容进行查找/替换 我通过将以下内容放入iFrame中的文档来调用PDF.JS: <script> fileId=0; function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,"

一旦PDF.JS完成了每个页面的渲染,我想然后对该页面的内容进行查找/替换

我通过将以下内容放入iFrame中的文档来调用PDF.JS:

<script>
fileId=0;
function getURLParameter(name) {
  return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null
}
var fileId = getURLParameter("fileId");
var DEFAULT_URL = '/viewer/fetchpdf.php?fileId='+fileId;
</script>
我注意到,当使用PDF.JS呈现PDF时,它会使用加载占位符初始化每个页面:

<div id="pageContainer3" class="page" style="width: 991px; height: 1319px;">
    <div class="loadingIcon"></div>
</div>
<div id="pageContainer4...


经过澄清,这是一个完全不同的故事。您不是直接使用PDF.JS,而是使用它们的web包装器。我认为您可以使用的一件事(我从来没有这样做过,现在只是阅读代码)是,它们在
文档
上发出
pageRendered
事件,因此如果您可以添加一个侦听器,您应该可以:

var frameDoc = document.getElementById('iframeViewPdf').contentWindow.document;

frameDoc.addEventListener('pagerendered', function (evt) {
  console.log(evt); // see what goodies hide here! like page number etc
}

(没有测试,可能需要调整。)

所以这就是我们可以检测页面呈现的方法。在设置侦听器之前,等待iframe内容加载非常重要

$( "#iframeViewPdf" ).load(function() { // wait for iframe to load
    var frameDoc = $("#iframeViewPdf").contents()[0];     
    frameDoc.addEventListener("pagerendered", function (evt) { 
        console.log(evt.detail);
    });
});

如果我读对了文档,
page.render
返回一个承诺,为什么不
page.render(…).next(函数…
?从长远来看,我看不出搞乱内部事务是健康的…@Amadan我想你读的文档是对的,你可以而且可能必须这样做。这只是实现同样效果的另一种方式。@Amadan-请您提供更多的细节,我不太确定我将如何实施您的建议?我可以对您说同样的:)对于您的问题,PDF.JS的渲染结果到底是什么,这很无趣,但是你完全忽略了重要的东西:你在JavaScript中调用它的方式。@Amadan-很公平。我已经解释了如何调用它,我在使用默认pdfjs实现之前设置了defaulturl。嘿,谢谢你的建议。解决方案缺少最后一个括号。不幸的是,它似乎没有拾取任何事件,现在就玩它,看看我是否能找出原因。我发现以下代码工作正常,您能编辑您的答案以反映这一点吗$(“#iframeViewPdf”).load(函数(){//等待iframe加载var frameDoc=$(“#iframeViewPdf”).contents()[0];frameDoc.addEventListener(“pagerendered”,函数(evt){console.log(evt.detail);});
//Step 1: store a refer to the renderer
var pageRendering = page.render(renderContext);
//Step : hook into the pdf render complete event
var completeCallback = pageRendering.internalRenderTask.callback;
pageRendering.internalRenderTask.callback = function (error) {
  //Step 2: what you want to do before calling the complete method                  
  completeCallback.call(this, error);
  //Step 3: do some more stuff
};
var frameDoc = document.getElementById('iframeViewPdf').contentWindow.document;

frameDoc.addEventListener('pagerendered', function (evt) {
  console.log(evt); // see what goodies hide here! like page number etc
}
$( "#iframeViewPdf" ).load(function() { // wait for iframe to load
    var frameDoc = $("#iframeViewPdf").contents()[0];     
    frameDoc.addEventListener("pagerendered", function (evt) { 
        console.log(evt.detail);
    });
});