首页 >> 大全

预览PDF文件 - PDF.js

2023-09-03 大全 28 作者:考证青年

网上找到很多前端实现文件预览方法,但都无法解决我的问题,产品需求中将文件上传到腾讯云的对象存储,返回一个URL,这个URL无法在网页中预览,浏览器将这个URL直接本地下载文件(下载文件下面说),最后只能用PDF.js,这是一个开源的js库,直接将PDF文件渲染成,PDF.js框架的魅力所在,为其为HTML5实现的,无需任何本地支持,而且对浏览器的兼容性也是比较好,要求只有一个:浏览器支持HTML5就好了!(不过对于低版本的IE,就只能节哀了!).不多说,直接贴代码(.0开发):

在线演示地址:

Demo地址:

PDF.js可在官网下载 地址:

方案一(需要翻墙):

  <canvas id="the-canvas" class="the-canvas" style="position: absolute;
    left: 0;
    right: 0;
    margin: auto;">canvas><div class="m-t" style="position: fixed;
    right: 40px;"><button id="prev" nz-button class="m-r-md"><i class="anticon anticon-left">i>Previousbutton><span class="m-r-md">Page: <span id="page_num">span> / <span id="page_count">span>span><button id="next" nz-button>Next<i class="anticon anticon-right">i>button>div>

通过按钮控制页面加载

 previewPDF(url) {// url 为PDF文件的链接地址;const vm = this;const pdfjsLib = window['pdfjs-dist/build/pdf'];pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';let pdfDoc = null,pageNum = 1,pageRendering = false,pageNumPending = null,scale = 1.6,canvas = vm.el.nativeElement.querySelector('.the-canvas'),ctx = canvas['getContext']('2d');function renderPage(num) {pageRendering = true;pdfDoc.getPage(num).then(function (page) {const viewport = page.getViewport(scale);canvas['height'] = viewport.height;canvas['width'] = viewport.width;const renderContext = {canvasContext: ctx,viewport: viewport};const renderTask = page.render(renderContext);renderTask.promise.then(function () {pageRendering = false;if (pageNumPending !== null) {renderPage(pageNumPending);pageNumPending = null;}});});vm.el.nativeElement.querySelector('#page_num').textContent = num;}function queueRenderPage(num) {if (pageRendering) {pageNumPending = num;} else {renderPage(num);}}function onPrevPage() {if (pageNum <= 1) {return;}pageNum--;queueRenderPage(pageNum);}vm.el.nativeElement.querySelector('#prev').addEventListener('click', onPrevPage);function onNextPage() {if (pageNum >= pdfDoc.numPages) {return;}pageNum++;queueRenderPage(pageNum);}vm.el.nativeElement.querySelector('#next').addEventListener('click', onNextPage);pdfjsLib.getDocument(url).then(function (pdfDoc_) {pdfDoc = pdfDoc_;vm.el.nativeElement.querySelector('#page_count').textContent = pdfDoc.numPages;renderPage(pageNum);});}

结果如下图:

what!,页面太丑了……与官方的预览页面相比的确有那么一丢丢不满意,没事,下面来说使用本地预览PDF,与官方页面一样哦~~

预览一存在一个问题:访问网络需要支持翻墙(啥!还要翻墙,糗~~)。项目上线后大量用户反映无法预览PDF,归根结底就是许多用户根本没有翻墙,被老板狠批一顿,啪啪打脸!!!既然不满足需求,改呗!代码如下:

方案二(不需要翻墙):

方案二是不需要访问线上资源,本地渲染PDF展示。下载源码:

_预览文件格式仅1帧mpeg_预览文件栏如何关闭

step1:

将源码加入到项目中,目录如下:

在web目录下有.js文件

step2:

在.js 里面做如下修改:

var DEFAULT_URL = ''; // 将默认PDF路径路径置为空

step3:

在按钮点击事件中调用.open()


<head><meta charset="utf-8"><meta name=referrer content=never><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui"><meta name="renderer" content="webkit">
head>
<body>
<button onclick="preview()">PDF预览button>
body>
<script>function preview() {console.log('test');var pdf = 'pdf的URL';window.open('./js/pdf/web/viewer.html?file=' + pdf, 'PDF');}
script>
html>

至此OK了,老板再也不用当心用户没有翻墙了~~~

截图如下:

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了