簡體   English   中英

帶有 PDFJS 的響應式 pdf 渲染器

[英]Responsive pdf renderer with PDFJS

我對 PDFJS 和畫布有點問題。

我可以在頁面上顯示 PDF,我也可以在頁面的整個寬度中顯示 PDF(幾乎,我不知道要考慮滾動條)但是我在調​​整大小事件時仍然有問題。

在resize事件中,發現有些頁面無緣無故顛倒了......

你能幫我嗎?

謝謝 !

編輯:使用替換畫布!

 /* http://code.jquery.com/jquery-3.2.1.min.js http://mozilla.github.io/pdf.js/build/pdf.js */ $(function() { PDFJS.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js'; /* Generate scaled page's canvas */ var generatePageCanvas = function(pdfDiv, page) { var canvas = document.createElement('canvas'); var divWidth = pdfDiv.width(); var pageWidth = page.getViewport(1).width; var renderContext = { canvasContext: canvas.getContext('2d'), viewport: page.getViewport(divWidth / pageWidth) }; canvas.height = renderContext.viewport.height; canvas.width = renderContext.viewport.width; page.render(renderContext); return canvas; } /* Render a PDF's page, with resize event */ var renderPage = function(pdfDiv, page) { var canvas = generatePageCanvas(pdfDiv, page); pdfDiv.append(canvas); $(window).resize(() => { var resizedCanvas = generatePageCanvas(pdfDiv, page); canvas.replaceWith(resizedCanvas); canvas = resizedCanvas; }); }; /* Render a PDF file */ var renderPdf = function(pdfUrl, pdfDiv) { PDFJS.getDocument(pdfUrl).then(pdfDoc => { for (var num = 1; num <= pdfDoc.numPages; num++) { pdfDoc.getPage(num).then(page => { renderPage(pdfDiv, page); }); } }); }; /* Search and render data-pdf attributes */ $('div[data-pdf]').each(function() { var pdfDiv = $(this); var pdfUrl = pdfDiv.data('pdf'); pdfDiv.css('overflow', 'auto') .css('max-height', '180px'); renderPdf(pdfUrl, pdfDiv); }); /* Simulate window resize event */ $('button').click(function() { var i = 400; var interval = setInterval(() => { i += 20; document.body.style.width = i + "px"; window.dispatchEvent(new Event('resize')); }, 250); setTimeout(() => { clearInterval(interval); }, 1000); }); });
 <html> <head> <script src="//mozilla.github.io/pdf.js/build/pdf.js"></script> <script src="//code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <button> Simulate resize </button> <div data-pdf="//cdn.mozilla.net/pdfjs/tracemonkey.pdf"></div> <div data-pdf="//cdn.mozilla.net/pdfjs/helloworld.pdf"></div> </body> </html>

這是一篇舊帖子,但當我最近遇到同一主題時,我找到了一個解決方案,可以將pdfviewer更新為新尺寸,例如在調整呈現查看器的容器大小之后。

lib 的文檔有些有限,我通過pdf.js/web/app.js@webViewerResize源代碼找到了一個解決方案,並找到了以下代碼段( pdf.js/web/app.js@webViewerResize : github 上的第pdf.js/web/app.js@webViewerResize ):

function webViewerResize() {
  const { pdfDocument, pdfViewer } = PDFViewerApplication;
  if (!pdfDocument) {
    return;
  }
  const currentScaleValue = pdfViewer.currentScaleValue;
  if (
    currentScaleValue === "auto" ||
    currentScaleValue === "page-fit" ||
    currentScaleValue === "page-width"
  ) {
    // Note: the scale is constant for 'page-actual'.
    pdfViewer.currentScaleValue = currentScaleValue;
  }
  pdfViewer.update();
}

通過在我的回調中應用相同的序列, viewer根據我配置的currentScaleValue相應地“調整大小”。

這感覺有點“自動”工作,因為我沒有花時間深入研究源代碼。 因此,請隨意添加任何細節以說明其有效的原因。


免責聲明:使用 pdfjs-dist 的 2.9.359 版“測試”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM