pdf.js的使用(分页)以及关闭(web端在线显示文档pdf)

首先贴图:
大概是这样的,可以动态设置打开的路径
在这里插入图片描述
首先是html界面:

 <h1><a href="javascript:void(0)" target="_blank" onclick="showPdf()">显示pdf文档</a></h1>
    <div id="container" style="display: none;">
        <div class="lightbox"></div>
        <div id="pop" class="pop">
            <div>
                <button id="prev">上一页</button>
                <button id="next">下一页</button>
                <button id="close" onclick="close()">关闭</button>
                <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
            </div>
            <canvas id="the-canvas"></canvas>
        </div>
        
    </div>

然后是css,可以放到和html同一面


    <style type="text/css" >
         .lightbox {
        position: fixed;
        top: 0px;
        left: 0px;
        height: 100%;
        width: 100%;
        z-index: 7;
        opacity: 0.3;
        display: block;
        background-color: rgb(0, 0, 0);
    }

    .pop {
        position: absolute;
        left: 30%;
        width: 894px;
        margin-left: -447px;
        z-index: 9;
    }

    </style >

然后是js:(先贴部分),还差在document绑定事件

var pageindex = 1;  //当前页
var maxindex;  //总页数
var view;
//单页pdf.js
function showPdf(nowpage) {
    console.log(nowpage);
    if (nowpage == "" || nowpage == null)
        nowpage = pageindex;
        var container = document.getElementById("container");
        container.style.display = "block";
        var url = '/Scripts/dd.pdf';
        PDFJS.workerSrc = '/Scripts/pdf/pdf.worker.js';
        PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf) {
            pdf.getPage(nowpage).then(function getPageHelloWorld(page) {
                var scale = 2;
                var viewport = page.getViewport(scale);
                view = viewport;   //存放,清空的时候用
                var canvas = document.getElementById('the-canvas');
                var context = canvas.getContext('2d');
                canvas.height = viewport.height;
                canvas.width = viewport.width;
                document.getElementById('page_num').textContent = nowpage;//当前页数
                maxindex = pdf.numPages;//总页数
               // console.log(pdf.numPages);
               // console.log(canvas);
                var renderContext = {
                    canvasContext: context,
                    viewport: viewport
                };
                console.log(page);
                page.render(renderContext);
            });
        });
    }
//上一页
  
    //上一页
    function onPrevPage() {
        if (pageindex <= 1) {
            return;
        }
        showPdf(--pageindex);
        
    }

    //下一页
    function onNextPage() {
        if (pageindex >= maxindex) {
            return;
        }
        
        showPdf(++pageindex);
    }

这是另外一部分:(在同一个js)绑定事件以及那些得再这里写

$(document).ready(function () {
    document.getElementById('prev').addEventListener('click', onPrevPage);   //按钮绑定事件得再这里面哦
    document.getElementById('next').addEventListener('click', onNextPage);  //对应html里的id和js定义的事件
    

    $("#close").click(function () {   //这个是清空画布然后再让它隐藏
        var cxt = document.getElementById("the-canvas").getContext("2d");
        cxt.clearRect(0, 0, view.width, view.height);
        $("#container").hide();
    })
 
});

然后下面这个是pdf.js的压缩包

链接:https://pan.baidu.com/s/1XiRhkl3iJpYmeIUdrOJRBA
提取码:2w3h

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
加载大型PDF文档时,pdf.js提供了一些性能优化和技巧,以提高加载速度和减少内存占用。下面是一些可以考虑的方法: 1. 分页加载:对于大型PDF文档,你可以使用分页加载的方式来减少一次性加载整个文档的内存占用。可以根据需要,只加载当前可见页面及其周围的几页。这样可以在保持性能的同时,提供流畅的用户体验。 2. 延迟加载:当用户滚动或翻页时,你可以使用延迟加载的方式来加载页面内容。即只有当用户接近或到达某个页面时才开始加载该页面的内容。这样可以减少初始加载时间,并允许用户快速查看和操作PDF文档。 3. 虚拟滚动:对于大型PDF文档使用虚拟滚动技术可以提高渲染性能和内存利用率。只有当前可见页面及其周围的几页会被实际渲染,其他页面则只在需要时动态加载和渲染。 4. 缓存机制:pdf.js提供了缓存机制,可以将已渲染的页面缓存起来,以便在用户返回之前能够快速重新显示。这样可以避免重复渲染相同的页面,提高用户体验。 5. 使用Web Worker:pdf.js支持在Web Worker中执行解析和渲染任务,这样可以将一些计算密集型的任务从主线程中分离出来,提高响应性和性能。 需要注意的是,加载大型PDF文档可能仍然需要一些时间,具体的加载速度还会受到网络和设备性能的影响。因此,在实际应用中,你可能还需要进行性能测试和优化,以确保在不同环境下都能提供良好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值