jquery 如何检测页面何时使用PDFJS呈现?

tuwxkamq  于 2024-01-07  发布在  jQuery
关注(0)|答案(3)|浏览(169)

一旦PDF.JS已经完成渲染每个页面,我想然后对该页面的内容进行查找/替换。
我通过将以下内容放入iFrame中的文档来调用PDF.JS:

  1. <script>
  2. fileId=0;
  3. function getURLParameter(name) {
  4. return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null
  5. }
  6. var fileId = getURLParameter("fileId");
  7. var DEFAULT_URL = '/viewer/fetchpdf.php?fileId='+fileId;
  8. </script>

字符串
然后从父框架设置URL:

  1. url = '/_third_party/pdfjs/web/viewer.html?fileId='+$(this).attr('href');
  2. $("#iframeViewPdf").attr('src', url);


我注意到当使用PDF.JS渲染PDF时,它会用一个加载占位符初始化每个页面:

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


然后,它将PDF呈现为html,例如

  1. <div id="pageContainer3" class="page" style="width: 991px; height: 1319px;">
  2. <div class="canvasWrapper" style="width: 991px; height: 1319px;">
  3. <canvas id="page46" width="991" height="1319" style="width: 991px; height: 1319px;">
  4. </canvas>
  5. </div>
  6. <div class="textLayer" style="width: 991px; height: 1319px;">
  7. ...
  8. </div>
  9. </div>
  10. <div id="pageContainer4...

4xrmg8kj

4xrmg8kj1#

澄清一下,这是一个非常不同的故事。你不是直接使用PDF.JS,而是他们的Web Package 器。我认为你可以使用的一件事(我从来没有做过,只是阅读现在的代码)是他们在document上发出pageRendered事件的事实,所以如果你可以添加一个侦听器,你应该没问题:

  1. var frameDoc = document.getElementById('iframeViewPdf').contentWindow.document;
  2. frameDoc.addEventListener('pagerendered', function (evt) {
  3. console.log(evt); // see what goodies hide here! like page number etc
  4. }

字符串
(Didn不测试,可能需要调整。)

agxfikkp

agxfikkp2#

这就是我们如何检测页面的渲染。在设置侦听器之前,等待iframe内容加载是很重要的。

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

字符串

ncgqoxb0

ncgqoxb03#

  1. //Step 1: store a refer to the renderer
  2. var pageRendering = page.render(renderContext);
  3. //Step : hook into the pdf render complete event
  4. var completeCallback = pageRendering.internalRenderTask.callback;
  5. pageRendering.internalRenderTask.callback = function (error) {
  6. //Step 2: what you want to do before calling the complete method
  7. completeCallback.call(this, error);
  8. //Step 3: do some more stuff
  9. };

字符串

相关问题