PDF.JS PDF文件预览插件

本文介绍如何使用PDF.js插件在线预览PDF文档,包括下载、引入及使用教程。通过简单的代码实现,即可在网页中加载并浏览PDF文件,支持翻页等功能。
该文章已生成可运行项目,

前言

本篇文章主要介绍一款好用的pdf预览插件pdf.js,使用方式简单只要参考官网实例即可。

PDF.js使用教程

下载pdf.js

PDF.js下载链接

引入pdf-js

<!-- pdf.js 文件预览-->
<div th:fragment="pdf-js">
	<script th:src="@{/ajax/libs/pdfjs-2.2.228-dist/build/pdf.js}"></script>
</div>
<th:block th:include="include :: pdf-js" />

body

<input id="fileUrl" th:value="*{fileUrl}" hidden/>
<div class="container-fluid">
    <div class="row">
        <canvas id="the-canvas"></canvas>
    </div>
    <div class="row">
        <button id="prev" class="btn btn-success">上一页</button>
        <button id="next" class="btn btn-success">下一页</button>
        <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
    </div>
</div>

** script **

<script>
    $(function() {
        // pdf url, 获取pdf文件的链接,对应的url可以返回文件流
        var url = $("#fileUrl").val();
        console.log(url);

        // 加载核心库
        pdfjsLib.GlobalWorkerOptions.workerSrc = '/ajax/libs/pdfjs-2.2.228-dist/build/pdf.worker.js';

        var pdfDoc = null,
            pageNum = 1,
            pageRendering = false,
            pageNumPending = null,
            scale = 1.5,
            canvas = document.getElementById("the-canvas"),
            ctx = canvas.getContext('2d');

        /**
         * 获取页面信息, 调整canvas 大小, 并且渲染页面
         */
        function renderPage(num) {
            pageRendering = true;
            // 使用promise刷新页面
            pdfDoc.getPage(num).then(function (page) {
                var viewport = page.getViewport({scale: scale});
                canvas.height = viewport.height;
                canvas.width = viewport.width;

                // 将pdf页面渲染到canvas上下文
                var renderContext = {
                    canvasContext: ctx,
                    viewport: viewport
                };
                var renderTask = page.render(renderContext);

                // 等待渲染完成
                renderTask.promise.then(function(){
                    pageRendering = false;
                    if (pageNumPending !== null) {
                        // 等待新的页面呈现
                        renderPage(pageNumPending);
                        pageNumPending = null;
                    }
                });
            });
            // 更新当前页面页码
            document.getElementById('page_num').textContent = num;
        }

        // 如果另一个页面还在渲染,则等待渲染结束。否则立即执行渲染。
        function queueRenderPage(num) {
            if (pageRendering) {
                pageNumPending = num;
            } else {
                renderPage(num);
            }
        }

        // 显示上一页
        function onPrevPage() {
            if (pageNum <= 1) {
                return;
            }
            pageNum--;
            queueRenderPage(pageNum);
        }
        document.getElementById("prev").addEventListener('click', onPrevPage);

        // 显示下一页
        function onNextPage() {
            if (pageNum >= pdfDoc.numPages) {
                return;
            }
            pageNum ++;
            queueRenderPage(pageNum);
        }
        document.getElementById('next').addEventListener('click', onNextPage);

        // 异步加载pdf
        pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
            pdfDoc = pdfDoc_;
            document.getElementById('page_count').textContent = pdfDoc.numPages;

            // 初始化第一页渲染
            renderPage(pageNum);
        })

    })
</script>

参考链接

PDF.js下载链接

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值