问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

pdf.js使用问题

发布网友 发布时间:2022-04-20 17:06

我来回答

2个回答

懂视网 时间:2022-05-15 02:13

这次给大家带来怎样在项目内使用PDF.js,在项目内使用PDF.js的注意事项有哪些,下面就是实战案例,一起来看一下。

一次在开发微信预览保单的时候所使用到的,由于安卓手机浏览器不支持解析PDF,所以才用了PDF.js来解析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的核心文件。

web目录是PDF.js的配置与显示文件。

viewer.html是负责显示PDF的,viewer.js是负责配置的文件。viewer.js中:

其中var DEFAULT_URL 是默认解析的PDF文件,可以对他进行替换。

pdf.js的使用方式(一):

对于简单只展示一张PDF文件的使用只需要将

默认路径配置好即可,但是很多情况这种方式不满足开发需求。

pdf.js的使用方式(二):

在地址栏后面传?file=test.pdf 即可完成对默认路径的修改

http://localhost:8080/pdfjs/web/viewer.html?file=test.pdf //这种最好不要传输中文 具体我没用试过

这里的test.pdf 取与viewer.html的相对路径即可(整个服务器的绝对路径也行)

pdf.js的使用方式(三):

通过为window.localStorage.pdf赋值修改PDF的路径(经过测试最好写http协议的路径)

例如:

window.localStorage.pdf= 'http://localhost:8080/pdf/20140620/000000091534588.pdf';
window.location.href=basePath+"jsTool/openPDF/web/viewer.html";

pdf.js的使用方式(四):

摘自(官网的例子)http://mozilla.github.io/pdf.js/examples/

1、页面引入pdf.js。

2、使用PDFJS.getDocument('helloworld.pdf')方式加载要打开的PDF文件。

3、通过PDFJS.getDocument('helloworld.pdf').then(function(pdf){// you can now use *pdf* here});then方式处理后续的方法

4、pdf.getPage(1).then(function(page){// you can now use *page* here});加载PDF的第一页

5、通过h5的canvas进行展示。

var scale = 1.5; 
var viewport = page.getViewport(scale); 
 
var canvas = document.getElementById('the-canvas'); 
var context = canvas.getContext('2d'); 
canvas.height = viewport.height; 
canvas.width = viewport.width; 
 
var renderContext = { 
 canvasContext: context, 
 viewport: viewport 
}; 
page.render(renderContext);

完整例子:

//引入pdf.js之后 
var url = '//cdn.mozilla.net/pdfjs/helloworld.pdf'; 
//加载核心文件 
PDFJS.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js'; 
 
var loadingTask = PDFJS.getDocument(url); 
loadingTask.promise.then(function(pdf) { 
 console.log('PDF loaded'); 
 
 var pageNumber = 1; 
 pdf.getPage(pageNumber).then(function(page) { 
 console.log('Page loaded'); 
 
 var scale = 1.5; 
 var viewport = page.getViewport(scale); 
 
 var canvas = document.getElementById('the-canvas'); 
 var context = canvas.getContext('2d'); 
 canvas.height = viewport.height; 
 canvas.width = viewport.width; 
 
 var renderContext = { 
 canvasContext: context, 
 viewport: viewport 
 }; 
 var renderTask = page.render(renderContext); 
 renderTask.then(function () { 
 console.log('Page rendered'); 
 }); 
 }); 
}, function (reason) { 
 console.error(reason); 
});

通过点击进行一页一页的查看:

页面:

<script src="//mozilla.github.io/pdf.js/build/pdf.js"></script> 
 
<h1>PDF.js Previous/Next example</h1> 
 
<p> 
 <button id="prev">Previous</button> 
 <button id="next">Next</button> 
 
 <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span> 
</p> 
 
<canvas id="the-canvas"></canvas>

js:

var url = '//cdn.mozilla.net/pdfjs/tracemonkey.pdf'; 
 
PDFJS.workerSrc = '//mozilla.github.io/pdf.js/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); 
});

对于该插件的功能很强大,有很多下载(下载手机端不可用)或者是跳转页面的功能,如果不想让客户查看的话可以去viewer.html中将相应的按钮隐藏或者删除即可

补充一点:viewer在解析和渲染pdf的时候有点耗费系统资源,尤其是cpu资源,不知道是不是因为我的本子配置较低的缘故,在页面加载等待的过程中,IE进程消耗掉了CPU资源的50-60%。点击翻页操作,或者改变IE的窗口大小会触发viewer对pdf进行重新解析和渲染。有时把IE前端的某个挡住他的程序窗口(比如一个txt)移开也会导致重新渲染,但是并不是每次都会触发,原因不详。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

怎样在实战项目中使用Installation插件

在案例中使用vue2.0+boostrap

热心网友 时间:2022-05-14 23:21

首先确认是不是文件本身问题,如果文件本身就有问题肯定不行,直接把第一个pdf文件拖到chrome浏览器里面看能不能正常显示,或者用常用的pdf软件打开看看;然后看下是不是可能是文件名引起的,直接弄个简单的1.pdf什么的试试看
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 pdf.js 如何预览本地文件 如何使用pdf.js播放pdf文件 pdfjs如何加载字体库 我的ipadmini2国行版插卡的,为什么卡槽打不开?是需要什么工具吗? 苹果显示与亮度自动锁定怎么更改? iphone屏幕亮度自动锁定无法调节 如何开启苹果手机显示与亮度的自动锁定 苹果手机来信息后屏幕一直亮不熄灭,“显示与亮度“-... 苹果手机怎么让亮度不自动调节 苹果不锁屏设置方法 ipad卡槽打不开怎么办 ipad2 的卡槽弹不出了怎么办????? 优酷客户端kux格式转换工具怎么转换mp4视频呢 kux怎么转换MP4? KUX格式转换工具如何转换视频文件? 如何将视频KUX格式转换成MP4格式? 盒装鸭血怎麽做 盒装鸭血是生的还是熟的 鸭血放冷藏还是冷冻 盒装鸭血用不完怎么保存 如何创建pdf的buffer,让pdf.js实现预览pdf文件 pdf.js 无法在线预览PDF 使用Pdf.js做一个动态展现pdf文档的功能。 展现出... PDF.js 如何取到PDF的目录页码 前台js 如何使用pdf.js预览pdf文件流(base64) pdf.js可以实现lazyload吗? pdfjs怎么设置页面开始默认为只读模式 使用js下载保存pdf文件 pdf.js 文件加载缓慢 有什么方法可以解决嘛? 或者... pdf.js如何兼容ie8 php网站pdf显示插件 pdf.js 浏览器打开大文件崩溃。 前端用pdf.js插件应该怎么写代码 如何在java中用javascript来打印pdf 如何处理流必须以PDF JS有数据错误 pdf.js 可以放在tp框架中吗 网红奶瓶酸奶怎么打开 安慕希酸奶怎么打开盖子? 盒装酸奶怎么打开 初饮酸奶带奶嘴怎么使用 袋装酸奶怎么打开