H5页面上传PDF文档时候可以使用pdfJS插件,这里以笔记形式记录H5引入pdfJS的步骤。

一、下载pdfJS插件;

官网网址:http://mozilla.github.io/pdf.js/getting_started/#download

下载解压后的结构:

其中build中pdf.js和pdf.worker.js文件。

二、html文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="js/common/jquery-2.0.3.js"></script><script src="build/pdf.js"></script>
</head>
<body>
<h1>PDF.js Previous/Next example</h1>
<div><input id="upload" type="file" accept="application/pdf"  /> <br><button id="save" οnclick="savePdf()">Save</button>
</div>
<div><button id="prev" οnclick="goPrevious()">Previous</button><button id="next" οnclick="goNext()">Next</button><span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
</div>
<canvas id="the-canvas"></canvas>
</body>
<script src="js/pdfjs.js"></script>
</html>

三、js文件:

//引入pdf.js之后
var url = 'web/09.pdf';
//加载核心文件
PDFJS.workerSrc = 'build/pdf.worker.js';
//
// Disable workers to avoid yet another cross-origin issue (workers need the URL of
// the script to be loaded, and currently do not allow cross-origin scripts)
//if(window.File && window.FileList && window.FileReader && window.Blob) {document.getElementById('upload').addEventListener('change', selectedFile, false);
} else {document.write('您的浏览器不支持File Api');
}PDFJS.disableWorker = true;var pdfDoc = null,pageNum = 1,scale = 1,canvas = document.getElementById('the-canvas'),ctx = canvas.getContext('2d');//
// Get page info from document, resize canvas accordingly, and render page
//
function renderPage(num) {// Using promise to fetch the pagepdfDoc.getPage(num).then(function(page) {var viewport = page.getViewport(scale);canvas.height = viewport.height;canvas.width = viewport.width;// Render PDF page into canvas contextvar renderContext = {canvasContext: ctx,viewport: viewport};page.render(renderContext);});// Update page countersdocument.getElementById('page_num').textContent = pageNum;document.getElementById('page_count').textContent = pdfDoc.numPages;
}//
// Go to previous page
//
function goPrevious() {if (pageNum <= 1)return;pageNum--;renderPage(pageNum);
}//
// Go to next page
//
function goNext() {if (pageNum >= pdfDoc.numPages)return;pageNum++;renderPage(pageNum);
}//
// Asynchronously download PDF as an ArrayBuffer
//
PDFJS.getDocument(url).then(function getPdfHelloWorld(_pdfDoc) {pdfDoc = _pdfDoc;renderPage(pageNum);
});//文件选择
function selectedFile(event) {//将本地pdf变成数据流event = event || window.event;var oFile = event.target.files[0];if (window.FileReader) {var reader = new FileReader();reader.readAsDataURL(oFile);//监听文件读取结束后事件reader.onloadend = function (e) { url = e.target.result;}; }}function savePdf(){PDFJS.getDocument(url).then(function getPdfHelloWorld(_pdfDoc) {pdfDoc = _pdfDoc;renderPage(pageNum);});
}

四、运行结果:

但是运行结果中pdf需要上下翻页,达不到加载全部,页面滚动条浏览的效果,进行如下修改

一、html页面:

<!DOCTYPE html><html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="js/common/jquery-2.0.3.js"></script><script src="build/pdf.js"></script><style>.pdfClass{border:1px solid black;}</style>
</head>
<body>
<h1>全部显示</h1>
<div><input id="upload" type="file" accept="application/pdf" οnchange="selectedFile(event)"  /> <br><button id="save" οnclick="savePdf()">Save</button>
</div>
<div class="wrapper" id="pdf-container"></div></body><script src="js/pdfJS-2.js"></script>
</html>

二、JS页面

var url = 'web/09.pdf';//文件选择
function selectedFile(event) {//将本地pdf变成数据流event = event || window.event;var oFile = event.target.files[0];if (window.FileReader) {var reader = new FileReader();reader.readAsDataURL(oFile);//监听文件读取结束后事件reader.onloadend = function (e) {// $(".img").attr("src",e.target.result);    //e.target.result就是最后的路径地址 url = e.target.result;};}}function createPdfContainer(id,className) {var pdfContainer = document.getElementById('pdf-container');var canvasNew =document.createElement('canvas');canvasNew.id = id;canvasNew.className = className;var br =document.createElement('br');  //添加上br元素,防止页面变大时候pdf并排显示pdfContainer.appendChild(br);pdfContainer.appendChild(canvasNew);
};//渲染pdf
//建议给定pdf宽度
function renderPDF(pdf,i,id) {pdf.getPage(i).then(function(page) {var scale = 0.5;   //pdf大的放大倍数var viewport = page.getViewport(scale);////  准备用于渲染的 canvas 元素//var canvas = document.getElementById(id);var context = canvas.getContext('2d');canvas.height = viewport.height;canvas.width = viewport.width;//// 将 PDF 页面渲染到 canvas 上下文中//var renderContext = {canvasContext: context,viewport: viewport};page.render(renderContext);});
};
//创建和pdf页数等同的canvas数
function createSeriesCanvas(num,template) {var id = '';for(var j = 1; j <= num; j++){id = template + j;createPdfContainer(id,'pdfClass');}
}
//读取pdf文件,并加载到页面中
function loadPDF(fileURL) {//清除所有元素 var pdfContainer = document.getElementById('pdf-container');var childs = pdfContainer.childNodes;for(var i = childs.length - 1; i >= 0; i--) {pdfContainer.removeChild(childs[i]);}// pdfContainer.clear;PDFJS.getDocument(fileURL).then(function(pdf) {//用 promise 获取页面var id = '';var idTemplate = 'cw-pdf-';var pageNum = pdf.numPages;console.log("页码:"+pageNum)//根据页码创建画布createSeriesCanvas(pageNum,idTemplate);//将pdf渲染到画布上去for (var i = 1; i <= pageNum; i++) {id = idTemplate + i;renderPDF(pdf,i,id);}});
}function savePdf(){ loadPDF(url);
}function fsubmit() {var form=document.getElementById("form1");var fd =new FormData(form); $.ajax({url: "server.php",type: "POST",data: fd,processData: false,  // 告诉jQuery不要去处理发送的数据contentType: false,   // 告诉jQuery不要去设置Content-Type请求头success: function(response,status,xhr){console.log(xhr);var json=$.parseJSON(response);var result = '';result +="个人信息:<br/>name:"+json['name']+"<br/>gender:"+json['gender']+"<br/>number:"+json['number'];result += '<br/>头像:<img src="' + json['photo'] + '" height="100" style="border-radius: 50%;" />';$('#result').html(result);}});return false;
}

三、运行结果:

H5+pdfJS的实现相关推荐

  1. pdfjs viewer 开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...

  2. pdfjs插件 PDF页面在移动设备上显示不全

    在Vue项目中,可以使用pdfjs-dist这个包代替pdfjs. 我们可以在网上找到很多示例的代码. loadFile(url) {this.showLoading = true;PDF.getDo ...

  3. 移动端h5显示pdf的3种方法总结

    移动端显示h5我目前已经尝试了3种方法: 我使用的是vue的2.X版本 后端返回一个pdf的链接,然后前端直接使用location.href = 'http://www.XXX.com/test.pd ...

  4. Android WebView 加载http网址的h5 不显示

    感觉好奇怪 加载百度以及其他的地址就显示,加载前端给的h5就是不显示 最后添加了适应h5显示了 设置如下 WebSettings webSettings = webView.getSettings() ...

  5. Android 支付宝H5 没有回调

    今天测试反馈问题,说,手机上没有安装支付宝的,调用支付宝支付之后,没有回调.不提示成功也不提示失败. 我自己试了半天也都是没有问题 .后来终于可以试出来了. 发现原来是,清单里面注册的Activity ...

  6. pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

    pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件. 注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决. svg模式渲染存在缺陷,只能渲染普通pd ...

  7. h5有缓存css,taro H5配置 cdn css js 缓存 hash 配置

    1.taro使用详情请参考本https://nervjs.github.io/taro/docs搭建 2.关于文件的配置,在config/index.js添加相关配置 使得pages下面对应的文件夹可 ...

  8. h5 video视频播放的同时加水印,图片加水印同样的原理

    经常能看到播放视频的网站上加水印的效果,记录下成果以备后续看: 效果图如下: h5页面视频播放的同时加水印,有以下3种方法可尝试: 在原视频上添加,由于每次登陆的用户不一样,需要根据用户名动态确定水印 ...

  9. flash h5录音_博乐h5网站建设案例-AI优网络

    沈阳滑翔网站建设/设计沈阳荷兰村网站建设/设计沈阳和泰新城网站建设/设计沈阳黑山网站建设/设计沈阳红旗台网站建设/设计沈阳浑河堡网站建设/设计沈阳浑南中路网站建设/设计沈阳浑河站西网站建设/设计沈阳浑 ...

最新文章

  1. Python-4 两个变量相互交换
  2. ArcGIS_系列中文教程下载
  3. HTML中Select的使用详解
  4. EF框架中,在实体中手动更新字段,数据库数据未同步到程序中应该怎么解决呢?
  5. 数据结构栈的知识_数据知识栈
  6. 手写实现java中的trim_JS中字符串trim()使用示例
  7. 吴恩达作业6:梯度检验
  8. jq追加元素最前面_DNF:哈林史诗百鬼夜行最理想的首饰搭配,海博伦应选贤者之欲...
  9. mate10鸿蒙系统,华为将发布 MatePad Pro:搭载鸿蒙系统,麒麟 9000 处理器
  10. 这可能是今年最值得推荐的数据分析工具!
  11. 系统设计与任务分配(团队作业)
  12. 浅学几天统计(SPSS)
  13. big类型和double类型
  14. 2007年度中文博客百条经典语录
  15. win10--笔记本能连上手机热点,但不能连接WIFI
  16. c语言 寻找相同的数字,用c语言编写寻找既是完全平方数,又有两位数字相同的三位正整数,例如121,144等。...
  17. 5G网络架构与组网部署
  18. 如何计算EEG信号的香农熵Shannon entropy(附Matlab程序)
  19. android如何从json字符串中取自己想要的数据
  20. 大福利:4000余本数学书下载地址

热门文章

  1. docker快速搭建几个常用的第三方服务
  2. java 向 mysql数据库存储图片_基于java向mysql数据库中存取图片
  3. Android 模拟器 PC电脑通信
  4. Linux 查看系统版本
  5. 热烈欢迎成都市武侯区人社局领导莅临璞华考察参观
  6. java五子棋判断输赢算法
  7. C# NUnit的安装
  8. boonton 功率测试软件,骑力、FTP与训练功率:检测你目前的骑乘能力
  9. 金属标记/荧光标记/功能化改性/官能团表面包覆聚苯乙烯微球
  10. man手册翻译神器——星际译王