PDF.js渲染带有滚动条的PDF文档

11

我使用Mozilla的pdf.js。我有以下代码:

<canvas id="the-canvas"/>
function displayDocument(){
        PDFJS.getDocument(numberOdDocument[attachment]).then(function (pdfDoc_) {
            pdfDoc = pdfDoc_;
            renderPage(pageNum);
          });
    }
function renderPage(num) {
        pdfDoc.getPage(num).then(function(page) {
          var viewport = page.getViewport(scale, rotate);
          canvas.height = '900';
          canvas.width = '500';

          var renderContext = {
            canvasContext: ctx,
            viewport: viewport
          };
          var renderTask = page.render(renderContext);

          renderTask.promise.then(function () {
            pageRendering = false;
            if (pageNumPending !== null) {
              renderPage(pageNumPending);
              pageNumPending = null;
            }
          });
        });
    }

现在我只能在canvas标签中看到一页,但我想给我的canvas添加滚动条,并通过滚动来改变页面。我该怎么做?


寻找相同的事物... - Tracker1
1个回答

12

允许滚动

首先,创建一个父级 div 来封装 canvas 元素:

<div>
 <canvas id="the-canvas"/>
</div>

然后,使用垂直滚动条设置固定大小。

<div style="width:650px;height:600px;overflow-y:scroll;">...</div>

最后,您可以使用变量“scale”设置所需的比例尺,但请保留以下原始行:

function renderPage(num) {
 pdfDoc.getPage(num).then(function(page) {
  var viewport = page.getViewport(scale);
  canvas.height = viewport.height;
  canvas.width = viewport.width;
  ...

渲染所有页面

请注意,大量页面的呈现需要一些时间,但以下是如何完成它的步骤。

思路:您需要在单独的画布元素中呈现每个页面。

首先,在呈现过程中动态创建具有特定id的画布元素:

<div id="pdf-viewer"></div>
...
function renderPage(num) {
 pdfDoc.getPage(num).then(function(page) {
  var canvasId = 'pdf-viewer-' + num;
  $('#pdf-viewer').append($('<canvas/>', {'id': canvasId}));
  var canvas = document.getElementById(canvasId);
  ...

最后,对于每一页调用renderPage()函数。

function renderAllPages() {
 for (var i = 1; i <= pdfDoc.numPages; i++) {
  renderPage(i);
 }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接