0.
A.到官网 https://mozilla.github.io/pdf.js/getting_started/#download 下载最新版本
B 部署到IIS 中访问 pdf.js/web/viewer.html 查看效果

1. 后台返回pdf的base64字段,用pdf.js展示
https://www.jianshu.com/p/8fb76e21b05e

2. 在线查看PDF文件,pdf.js使用方法
https://www.cnblogs.com/zhanggf/p/8504317.html

3.官方实例
https://github.com/mozilla/pdf.js/tree/master/examples/learning

_______________________________________________________________________________________________

大部分都是关于引入pdf的路径,然后在前端页面展示出来的。关于base64编码后的pdf文件很少。直接引入pdf文件路径的方法,我就不介绍了,大家可以参考其他博客。我现在介绍一下,经过base64编码后的pdf文件如何在前端页面显示出来。

需要的知识点:大家需要知道 Unit8Array和arrayBuffer

首先说一下Unit8Array:(具体可自己查一下MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)

Uint8Array 数组类型表示一个8位无符号整型数组,创建时内容被初始化为0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。

语法结构:Uint8Array(length);//创建初始化为0的,包含length个元素的无符号整型数组

Uint8Array(typedArray);

Uint8Array(object);

          Uint8Array(buffer [, byteOffset [, length]]);

ArrayBuffer:又称类型化数组
  1. 数组里面可以放数字、字符串、布尔值以及对象和数组等,ArrayBuffer放0和1组成的二进制数据
  2. 数组放在堆中,ArrayBuffer则把数据放在栈中(所以取数据时后者快)
  3. ArrayBuffer初始化后固定大小,数组则可以自由增减。(准确的说,视图才应该跟数组来比较这个特点)

测试通的 base64 >> PDF 操作

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>pdf的使用</title>
</head>
<body>
<div id="container">
<div id="pop"></div>
</div>
<script src="jquery-1.10.2.js"></script>
<script src="../build/pdf.js"></script>
<script src="../build/pdf.worker.js"></script> <script>
/*将请求来的base64编码的pdf文件,替换多余的空格和换行(为了兼容其他浏览器)
* 再使用浏览器自带的atob()的方式解析
* */
/*转化编码格式*/
function converData(data) {
data = data.replace(/[\n\r]/g, '');
var raw = window.atob(data);
var rawLength = raw.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for (var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i)
}
return array
} /*将解码后的值传给pdfjsLib.getDocument(),交给pdf.js处理*/
var loadtask=null;
function showPdfFile(data) {
var fileContent = converData(data);
$('#container').show();
$('#pop').empty();
loadtask=pdfjsLib.getDocument(fileContent); loadtask.then(function getPdfHelloWorld(pdf) {
pages = pdf.numPages;
for (var i = 1; i < pdf.numPages; i++) {
var id = 'page-id' + i;
$('#pop').append('<canvas id="' + id + '"></canvas>');
showAll('', i, id);
}
})
} function showAll(url, i, id) {
loadtask.promise.then(function getPdfHelloWorld(pdf) {
pdf.getPage(i).then(function getPageHelloWorld(page) {
var scale = 2.0,
viewport = page.getViewport(scale),
canvas = document.getElementById(id),
context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
}
page.render(renderContext); }) })
} dataParameters={};
$.ajax({
url: 'http://localhost:20737/wind.CloudFile.Web/Home/Base64',
type: "post",
dataType: "json",
data: dataParameters,
beforeSend: function () {
// addLoadingEle();
},
success: function (data) {
console.log( 'msg:'+ JSON.stringify(data));
showPdfFile(data.Data);
},
complete:function(data){
// removeLoadingEle();
},
error: function (a) {
console.log(a);
}
}); </script>
</body>
</html>

最新文章

  1. python支持mysql
  2. RStudio技巧02_Extract Function
  3. HTML基本元素(一)
  4. node03-events
  5. exel中合并一列相同的数据到一行
  6. 软件工程—我的IT的新篇章
  7. sql2014 新建用户并登陆
  8. ASP.Net将图片以二进制方式存入数据库,并读取
  9. dip的全称
  10. Python之配置文件模块 ConfigParser
  11. linux mount命令的用法详细解析
  12. WCF配置文件详解 【转】
  13. 这才是正确删除 office 的方式
  14. JavaScript学习日志:关于js分号
  15. 网络远程唤醒 WOL Magic Packet
  16. git 使用https 和SSH 提交远程库小总结
  17. QT和JS的互相调用例子
  18. php排序学习之-冒泡排序
  19. SHELL异常处理
  20. 查看dns节点的内存是否够用

热门文章

  1. [转]TimeQuest之delay_fall clock_fall傻傻分不清楚
  2. (转)C# HTML解析示例---星星引发的血案
  3. poj1860 Currency Exchange(spfa判断正环)
  4. 安装两个XAMPP或者更新XAMPP时, PHP版本还是旧版本的问题
  5. mvc+EF - 有用文章
  6. C# 小球100米自由落下
  7. 洛谷P3356 火星探险问题(费用流)
  8. HDU6318-2018ACM暑假多校联合训练2-1010-Swaps and Inversions-树状数组
  9. Python之路番外:PYTHON基本数据类型和小知识点
  10. ubuntu15.04下安装docker