pdf.js 连续分页展示pdf内容

如何使用pdf.js 将所有内容在同一页中展示。本文将作出相应的展示,这类需求一般适用于手机,pad 等移动端。

前面博客中,演示的内容。都是点击下一页进行翻页。后面有网友问,如何在一页中展示出来,所以我把这块补充上。

其实呢,只要知道展示一页,如果要展示多个页,核心就是增加个循环,创建canvas 对象接受每一页的pdf文件绘制。其他的流程和每页显示一篇pdf,在流程上是一样的。

1:循环创建canvas 的代码

 var canvasList = document.getElementById('canvas_list');
 var canvas = document.createElement('canvas');
 canvasList.appendChild(canvas);
 canvasList.appendChild(document.createElement('hr'))

2: 循环绘制pdf 的 核心代码

document.getElementById('page_count').textContent = '总页数:' + pdfDoc.numPages;
for(var $i =1 ; $i <= pdfDoc.numPages ; $i++) {
    // Initial/first page rendering
    renderPage($i);
}

3:注意事项:
本文只是展示,没有使用懒加载等性能优化手段,对体积较大的pdf,不太使用。

4:demo 下载地址
https://download.csdn.net/download/niedewang/10571405

5:完整html代码如下:

<html>
<head>
    <meta charset="utf-8">
    <title>pdf.js展示1,上一页,下一页</title>
</head>
<h1>PDF.js连续分页展示</h1>

<div>
    <span id="page_count"></span></span>
</div>

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


<script src="js/pdfjs/pdf.js"></script>
<script src="js/pdfjs/pdf.worker.js"></script>
<script>
    var url = '/pdf/demo1.pdf';

    var pdfDoc = null,
            pageNum = 1,
            pageRendering = false,
            pageNumPending = null,
            scale = 0.8;


    /**
     * Get page info from document, resize canvas accordingly, and render page.
     * @param num Page number.
     */
    function renderPage(num) {
        pageRendering = true;
        // Using promise to fetch the page
        pdfDoc.getPage(num).then(function(page) {
            var canvasList = document.getElementById('canvas_list');
            var canvas = document.createElement('canvas');
            canvasList.appendChild(canvas);
            canvasList.appendChild(document.createElement('hr'))

            var ctx = canvas.getContext('2d');
            var viewport = page.getViewport(scale);
            canvas.height = viewport.height;
            canvas.width = viewport.width;

            // Render PDF page into canvas context
            var renderContext = {
                canvasContext: ctx,
                viewport: viewport
            };
            var renderTask = page.render(renderContext);

            // Wait for rendering to finish
            renderTask.promise.then(function() {
                pageRendering = false;
                if (pageNumPending !== null) {
                    // New page rendering is pending
                    renderPage(pageNumPending);
                    pageNumPending = null;
                }
            });
        });

    }

    /**
     * If another page rendering in progress, waits until the rendering is
     * finised. Otherwise, executes rendering immediately.
     */
    function queueRenderPage(num) {
        if (pageRendering) {
            pageNumPending = num;
        } else {
            renderPage(num);
        }
    }


    /**
     * Asynchronously downloads PDF.
     */
    PDFJS.getDocument(url).then(function(pdfDoc_) {
        pdfDoc = pdfDoc_;
        document.getElementById('page_count').textContent = '总页数:' + pdfDoc.numPages;
        for(var $i =1 ; $i <= pdfDoc.numPages ; $i++) {
            // Initial/first page rendering
            renderPage($i);
        }

    });
</script>
</html>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pdf.js和turn.js都是常见的用于网页中展示PDF文件的JavaScript库。 pdf.js是Mozilla开发的一个开源项目,用于在网页中渲染和显示PDF文件。它可以将PDF文件解析成HTML5技术支持的格式,然后利用Canvas和SVG等技术进行绘制,以便在网页中以更佳的视觉效果展示pdf.js具有高度自定义的能力,可以根据需求自定义样式、布局和用户交互方式。此外,pdf.js还支持导出PDF页面为图片,支持缩放、旋转和分页功能。 turn.js是一款专门用于在网页中实现翻书效果的JavaScript插件,它可以让网页上的内容以类似真实书籍的方式进行翻页展示。通过turn.js,可以将网页中的内容,如文字、图片、视频等,以翻书的形式进行展示。turn.js可以很好地模拟实际书籍的视觉效果,使得用户在浏览网页时有更加亲切的感受。 结合pdf.js和turn.js,可以实现在网页中以翻书的形式展示PDF文件。首先,使用pdf.jsPDF文件渲染为HTML5格式,然后利用turn.js将渲染后的内容呈现为翻书效果。这样,用户可以通过拖拽、点击等方式进行翻页,浏览PDF文件的内容。使用两个库的结合,不仅可以在网页中呈现出高质量的PDF内容,还可以增加交互性和视觉效果。 总而言之,pdf.js和turn.js是两个常用的JavaScript库,可以分别用于处理和展示PDF文件和实现翻书效果。它们的结合使用可以让我们在网页中实现以翻书形式展示PDF文件的功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值