一旦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>
然后从父框架设置URL:
url = '/_third_party/pdfjs/web/viewer.html?fileId='+$(this).attr('href');
$("#iframeViewPdf").attr('src', url);
我注意到在使用PDF.JS呈现PDF时,它会使用加载占位符初始化每个页面:
<div id="pageContainer3" class="page" style="width: 991px; height: 1319px;">
<div class="loadingIcon"></div>
</div>
<div id="pageContainer4...
然后将PDF呈现为html,例如
<div id="pageContainer3" class="page" style="width: 991px; height: 1319px;">
<div class="canvasWrapper" style="width: 991px; height: 1319px;">
<canvas id="page46" width="991" height="1319" style="width: 991px; height: 1319px;">
</canvas>
</div>
<div class="textLayer" style="width: 991px; height: 1319px;">
...
</div>
</div>
<div id="pageContainer4...
答案 0 :(得分:1)
通过澄清,这是一个非常不同的故事。您没有直接使用PDF.JS,而是使用他们的Web包装器。我认为你可以使用的一件事(我从未做过,只是现在阅读代码)是因为他们在pageRendered
上发出document
事件,所以如果你可以添加听听它,你应该没事:
var frameDoc = document.getElementById('iframeViewPdf').contentWindow.document;
frameDoc.addEventListener('pagerendered', function (evt) {
console.log(evt); // see what goodies hide here! like page number etc
}
(没有测试,可能需要调整。)
答案 1 :(得分:1)
这就是我们如何检测页面的呈现。在设置监听器之前等待iframe内容加载非常重要。
$( "#iframeViewPdf" ).load(function() { // wait for iframe to load
var frameDoc = $("#iframeViewPdf").contents()[0];
frameDoc.addEventListener("pagerendered", function (evt) {
console.log(evt.detail);
});
});
答案 2 :(得分:0)
//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
};