移动端显示pdf文件

pdf.js 是一个技术原型主要用于在 HTML5 平台上展示 PDF 文档,无需任何本地技术支持。

在线演示地址:http://mozilla.github.com/pdf.js/web/viewer.html

PDF.js可在官网下载  地址:http://mozilla.github.io/pdf.js/

解压后得到的build目录就是PDF.js的核心文件,直接引入里面的pdf.js文件就可以使用。

html 代码示例:

 

<div class="pdf-view">
    <h1>练习</h1>     

        <canvas id="the-canvas"></canvas>  
        
        <div class="page">  
            <button id="prev">上一页</button>  

            <span>页数: <span id="page_num"></span> / <span id="page_count"></span></span>  
            
            <button id="next">下一页</button>  
                
        </div>  

</div>

<script src="../../bulid/pdf.js"></script>  //引入pdf.js文件

 

pdf的预览就是通过上面的canvas展现出来的,一般移动端页面都将用户缩放禁止了,但如果在移动端页面上显示有点模糊的话,可以允许用户缩放,而宽高大小等样式根据项目要求调整吧。

JS代码示例:

 

var url = './练习.pdf';  //pdf文件的地址
  
        PDFJS.workerSrc = '../../build/pdf.worker.js';   //引入主要文件
            
        var pdfDoc = null,  
            pageNum = 1,  
            pageRendering = false,  
            pageNumPending = null,  
            scale = 0.8,  
            canvas = document.getElementById('the-canvas'),  
            ctx = canvas.getContext('2d');  
            
        function renderPage(num) {  
            pageRendering = true;  
            pdfDoc.getPage(num).then(function(page) {  
            var viewport = page.getViewport(scale);  
            canvas.height = viewport.height;  
            canvas.width = viewport.width;  
            
            var renderContext = {  
                canvasContext: ctx,  
                viewport: viewport  
            };  
            var renderTask = page.render(renderContext);  
            
            renderTask.promise.then(function() {  
                pageRendering = false;  
                if (pageNumPending !== null) {  
                // New page rendering is pending  
                renderPage(pageNumPending);  
                pageNumPending = null;  
                }  
            });  
            });  
            
            document.getElementById('page_num').textContent = pageNum;  
        }  
            
        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);  
            
        PDFJS.getDocument(url).then(function(pdfDoc_) {  
            pdfDoc = pdfDoc_;  
            document.getElementById('page_count').textContent = pdfDoc.numPages;  
            
            renderPage(pageNum);  
        });  

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用Vant的Upload组件和pdf.js库来实现移动端PDF文件上传和预览功能。 首先,在你的Vue项目中安装Vant和pdf.js库: ``` npm install vant pdfjs-dist --save ``` 然后,在你的组件中引入Upload组件和pdf.js库: ```javascript <template> <div> <van-upload :max-count="1" :before-read="beforeRead" :after-read="afterRead" accept="application/pdf" :show-upload="false" > <van-button type="primary">上传文件</van-button> </van-upload> <div ref="pdfContainer"></div> </div> </template> <script> import { Upload, Button } from 'vant' import pdfjsLib from 'pdfjs-dist' export default { components: { VanUpload: Upload, VanButton: Button, }, methods: { beforeRead(file) { // 判断文件类型是否为PDF return file.type === 'application/pdf' }, afterRead(file) { // 读取文件并渲染PDF预览 const reader = new FileReader() reader.readAsArrayBuffer(file) reader.onload = () => { pdfjsLib.getDocument(new Uint8Array(reader.result)).promise.then(pdf => { pdf.getPage(1).then(page => { const canvas = document.createElement('canvas') const scale = 1.5 const viewport = page.getViewport({ scale }) const context = canvas.getContext('2d') canvas.height = viewport.height canvas.width = viewport.width page.render({ canvasContext: context, viewport }).promise.then(() => { this.$refs.pdfContainer.innerHTML = '' this.$refs.pdfContainer.appendChild(canvas) }) }) }) } }, }, } </script> ``` 在上面的代码中,我们使用了Vant的Upload组件来实现文件上传功能,并且设置了只能上传PDF文件。在afterRead方法中,我们使用pdf.js库来读取上传的PDF文件,并将PDF渲染到页面上。 需要注意的是,pdf.js库会异步加载PDF文件,因此我们需要在Vue组件中使用promise来处理异步操作。此外,为了在页面上显示PDF预览,我们需要使用canvas元素来渲染PDF页面。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值