Html canvas绘制PDF的方法

有时候需要在手机上查看pdf,由于手机没有Adobe插件,所以需要将pdf绘制在canvas上。不过这样效果要比用PDF插件查看的效果要差。还是Mark一下实现方法:

第一步

下载所需的JS文件。这里主要是pdf.js和pdf.worker.js。自行去网上下载。并把这两个js文件拷到项目的JS文件夹下。

第二步

jsp代码为:

function showPdf(u) {//绘制pdf函数,参数为文件名
             var container = document.getElementById("container");//找到父
             container.innerHTML = "";  //绘制前先清空父区域
             container.style.display = "block";
             var url = '/upload/Essay/'+u;//链接
             PDFJS.workerSrc = '${pageContext.request.contextPath}/JS/pdf.worker.js';
             PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf) {
            	 p= pdf.numPages;//总页数
            	 addItem(p);
            	 var t=1;
            	 for( var x = 1;x<=p;x++) {
                  pdf.getPage(x).then(function getPageHelloWorld(page) {
                     var scale = 1.2;
                     var viewport = page.getViewport(scale);
                     var canvas = document.getElementById(('canvas'+t).toString());   
                     
                     t++;
                     var context = canvas.getContext('2d');
                     canvas.height = viewport.height;
                     canvas.width = viewport.width;
                     var renderContext = {
                         canvasContext: context,
                         viewport: viewport
                     };
                     page.render(renderContext);     	                              
                 });
                    
             }});
         }
         //添加canvas,根据pdf的页数添加
         function addItem(num) {
             for(var n=1;n<=num;n++){
             var frameDiv=document.createElement("canvas");
             var bodyFa=document.getElementById("container");
             frameDiv.setAttribute("id",'canvas'+n.toString());
             bodyFa.appendChild(frameDiv);
             }
      }
     </script>
      <c:forEach var="essay" items="${currentPageUsers}">
                      <li><a href="javascript:void(0);" onclick="showPdf('${essay.getFileName()}')">${essay.getTitle()}</a></li>
         </c:forEach>

我从后台将essay参数传递给jsp.效果不是很好,有些模糊,如下:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值