A. 前台js 如何使用pdf.js预览pdf文件流(base64)
将pdf流生成pdf文件,然后在将pdf文件使用PDF.js进行查看。
你需要考虑浏览器兼容性,低版本浏览器可能没办法支持。
参照 File API 和URL API(URL.createObjectURL())
B. 如何创建pdf的buffer,让pdf.js实现预览pdf文件
pdf.js简介
PDF.js 是基于开放的 HTML5 及 javaScript 技术实现的开源产品。简单说就是一个 PDF
解析器。运用HTML5JavaScript(即pdf.js仅使用安全的web语言,不包含任何攻击者可以用的本地代码块)的PDF阅读器pdf.js,直接在标准的HTML页面上载入和渲染PDF文件, 还可以提高安全性(不需要安装第三方插件,安全性由浏览器保证),浏览器所做的安全措施已经为pdf.js提供了安全的运行环境。其对IE和 FireFox浏览器的要求是IE9+, FireFox19+。
在线示例: http://jsbin.com/pdfjs-helloworld-v2/1/edit
, http://jsbin.com/pdfjs-prevnext-v2/1/edit
源码:https://github.com/mozilla/pdf.js
官网:http://mozilla.github.io/pdf.js/
pdf.js VS 传统浏览器读取pdf
一般来说,PDF档案格式都是在浏览器中由外挂程式来描绘,通常是Adobe自己的PDF
reader或来自其他供应商的描绘工具,但这些外挂通常无法充分运用PDF的特点,而且由于含有大量的受信任代码,使得Google
Chrome浏览器必须运用SandBox沙箱原理,来检查PDF描绘工具是否遭到未知病毒感染。
使用adobe,必须在本地安装软件才能使用,而pdf.js不依赖环境、渲染速度快(测试过,确实很快)、安全性高。
pdf.js渲染PDF文件
pdf.js渲染PDF文件的流程:Fetch pdf (url / buffer) ——> canvas ——> 渲染
如果要深入pdf的渲染,需要去研究pdf.js源代码。pdf.js可通过pdf文件的地址或pdf数据流获取pdf,具体实现是调用接口函数 PDFJs.getDoc(url/buffer)将pdf载入html,通过canvas处理, 然后渲染pdf文件。网上给出的都是通过url来获取pdf的例子,而我在做项目的时候,后台(Python)要求是发pdf的数据流给前台,前台接收pdf的buffer,然后通过pdf.js来渲染。当然最初尝试buffer出现了很多问题,具体问题总结如下:
1)如何通过$.ajax接收后台发给前台的buffer数据;
2)如何将buffer传给pdf.js来处理(这里我使用了viewer.js, 所以需要考虑的是如何将buffer传给viewer.js来处理);
3)如何将pdf.js转换成pdf.js可以接收的buffer格式;
(对应问题解决见代码注释)
注:viewer.js是pdf.js的扩展,其将打印、翻页、缩放等功能进行了实现,且界面非常好看。也就是说如果你引入了viewer.js,pdf的渲染和渲染之后的功能界面都已经帮你实现了,你不用自己去写界面。
先从官网:http://mozilla.github.io/pdf.js/ 下载代码,然后使用文件viewer.html
, 我的html就是在viewer.html 的基础上修改的,下面我给出buffer的例子:
<!DOCTYPE html>
<html dir="ltr" mozdisallowselectionprint moznomarginboxes>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="google" content="notranslate">
<title>在线预览</title>
{% load static %}{% get_static_prefix as STATIC_URL %}
<link href="{{STATIC_URL}}css/preview.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="{{STATIC_URL}}pdfjs/web/viewer.css"/>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/compatibility.js"></script>
<link rel="resource" type="application/l10n" href="{{STATIC_URL}}pdfjs/web/locale/locale.properties"/>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/l10n.js"></script>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/build/pdf.js"></script>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/debugger.js"></script>
<script src="{{STATIC_URL}}js/jquery-1.8.3.js" type="text/javascript"></script>
<script type="text/javascript">
//convertDataURIToBinary()
//不知道什么原因如果后台直接将pdf的数据流发给前台,得到的是乱码,将数据转换成 Uint8Array始终不成功
//所以就让后台将发送之前的数据流做 了base64编码发给前台,前台再解码得到的数据就不是乱码了。
var BASE64_MARKER = ';base64,';
var preFileId = {{mark}};
//viewer.js全局变量,传入buffer,回答问题2
var DEFAULT_URL
$(document).ready(function(){
$.ajax({
type:"post",
async: false,
//ajax接收pdf数据流,注意dataType值的设置是否有错,如果不指定,jQuery将自动根据HTTP包MIME信息返回
//responseXML或responseText
. 回答问题1
contentType:"application/pdf;charset=utf-8",
url:"{% url netPan.File.views.browserFuf%}",
data:{
id: preFileId
},
success:function(data){
var pdfAsDataUri = data;
//如果引入了viewer.js , 处理方法
var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
DEFAULT_URL = pdfAsArray;
// 只引入了pdf.js, 未引入viewer.js, 处理方法
// var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
// PDFJS.getDocument(pdfAsArray).then(); 自己写pdf的处理函数
}
});
});
function convertDataURIToBinary(dataURI) { //编码转换,回答问题3
var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
var base64 = dataURI.substring(base64Index);
var raw = window.atob(base64);
var rawLength = raw.length;
//转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068
var array = new Uint8Array(new ArrayBuffer(rawLength));
for(i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}
</script>
<!--先设置全局变量DEFAULT_URL 的值,所以要后调入viewer.js -->
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/viewer.js"></script>
</head>
<body>
省略内容
</body>
</html>
C. 《JavaScript开发框架权威指南》pdf下载在线阅读全文,求百度网盘云资源
《JavaScript开发框架权威指南》网络网盘pdf最新全集下载:
链接: https://pan..com/s/17SRPdiy6pRI4eyfQg-VY4Q
D. 《JavaScript基础教程(第9版)》pdf下载在线阅读,求百度网盘云资源
《JavaScript基础教程(第9版)》([美] Dori Smith)电子书网盘下载免费在线阅读
资源链接:
链接:https://pan..com/s/1w3cOLdV3UXMKEjP4rFJDdg
书名:JavaScript基础教程(第9版)
作者:[美] Dori Smith
译者:陈剑瓯
出版社:人民邮电出版社
出版年份:2015-3
页数:404
内容简介:本书是经典的JavaScript入门书,以易学便查、图文并茂、循序渐进和善于用常见任务讲解语言知识而着称。书中从JavaScript语言基础开始,分别讨论了图像、框架、浏览器窗口、表单、正则表达式等内容,循序渐进地给出了JavaScript以及相关的CSS、DOM、Ajax和jQuery等技术。第9版全新改写,新增更多示例和技术介绍,使用流行的jQuery框架向网站轻松添加有用的功能。
本书适合有志于从事Web开发和设计的初学者.也是高等院校相关课程的理想入门教材。
作者简介:Dori Smith
世界知名的Web程序员和设计师,从事软件开发已有20多年。她是Web标准项目(WaSP)指导委员会委员,并发起成立了世界性的女性技术社区Wise-Women Web。
Tom Negrino
蜚声全球的技术作家,长期主持Macworld和许多其他技术杂志的专栏。自1995年开始,与Dori Smith合作着书,向初学者介绍Web,目前已着有数十本书。
E. 《Node.js开发指南》pdf下载在线阅读,求百度网盘云资源
《Node.js开发指南》(郭家宝(BYVoid))电子书网盘下载免费在线阅读
资源链接:
链接:
书名:Node.js开发指南
作者:郭家宝(BYVoid)
豆瓣评分:7.5
出版社:人民邮电出版社
出版年份:2012-7
页数:178
内容简介:
Node.js是一种方兴未艾的新技术,诞生于2009年。经过两年的快速变化,Node.js生态圈已经逐渐走向稳定。Node.js采用了以往类似语言和框架中非常罕见的技术,总结为关键词就是:非阻塞式控制流、异步I/O、单线程消息循环。不少开发者在入门时总要经历一个痛苦的思维转变过程,给学习带来巨大的障碍。 而本书的目的就是帮助读者扫清这些障碍,学会使用Node.js进行Web后端开发,同时掌握事件驱动的异步式编程风格,以便进一步利用Node.js的高级特性。
作者简介:
郭家宝(BYVoid),清华大学计算机系2010级本科生,曾获得信息学奥林匹克竞赛(NOI)金牌。他从中学开始涉足开源开发,参与过“汉典网”等许多Web项目的前后端设计开发,同时是Linux输入法ibus-pinyin的作者。他从2009年Node.js诞生之始,就一直在关注它的发展,有过许多用Node.js建立网站的经验,活跃于CNode社区。
F. 《Three.js开发指南原书第三版》pdf下载在线阅读全文,求百度网盘云资源
《Three.js开发指南原书第三版》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1uEcKOdIP2DTnOnj9vnIxOA
G. 《JavaScript设计模式与开发实践》pdf下载在线阅读,求百度网盘云资源
《JavaScript设计模式与开发实践》(曾探)电子书网盘下载免费在线阅读
资源链接:
链接:
书名:JavaScript设计模式与开发实践
作者:曾探
豆瓣评分:9.0
出版社:人民邮电出版社
出版年份:2015-5
页数:294
内容简介:
本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到JavaScript语言中,编写出优美高效、结构化和可维护的代码。
作者简介:
曾探
2007年毕业于吉林大学软件学院。就职于国内知名前端团队腾讯AlloyTeam,高级工程师。
曾参与Web QQ、QQ群、Q+开发者网站、微云、QQ兴趣部落等大型前端项目的开发。有过Java、Python和JavaScript的开发经验,业余作品有HTML5版街头霸王等。
平时喜欢电影和音乐,业务时间也是一名健身教练。
H. pdf.js可以实现lazyload吗
尊敬的用户,您好!很高兴为您答疑。
这是pdf.js的helloworld样例:
PDFJS.getDocument('helloworld.pdf').then(function(pdf) {
// Using promise to fetch the page
pdf.getPage(1).then(function(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
//
// Prepare canvas using PDF page dimensions
//
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
//
// Render PDF page into canvas context
//
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
根据pdf.js的helloworld代码来看,其应该是支持lazyload的,但是据这段赋值可以看出(canvas.height = viewport.height;canvas.width = viewport.width;)画布的长宽仍然是需要您手动指定的。当然,一般此类赋值我们可以认为其又一个官方默认值,这个可以从其提供的demo中体现出来。
希望我的回答对您有所帮助,如有疑问,欢迎继续咨询我们。
I. 《nodejs开发实战详解电子式》pdf下载在线阅读全文,求百度网盘云资源
《nodejs开发实战详解电子式》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1sx6HT1Ktwwq5R_IGauqWlQ?pwd=nkw0 提取码:nkw0
简介:本书共分为11章。涵盖的主要内容有:Node.js的概念、应用场景、环境搭建和配置、异步编程;Node.js的模块概念及应用、Node.js的设计模式;简单服务的搭建、Node.js静态资源管理、文件处理、Cookie和Session实践、Crypto模块加密、Node.js与Nginx配合;UDP服务器的搭建、Node.js与PHP之间合作;Node.js的实现机制、Node.js的原生扩展与应用;Node.js的编码习惯;Node.js操作MySQL和MongoDB;基于Node.js的Myweb框架的基本设计架构及实现;利用Myweb框架实现一个简单的Web聊天室;在线聊天室案例和在线中国象棋案例的实现;Node.js的日志模块、curl模块、crontab模块、forever模块、xml模块和邮件发送模块等应用工具。
本书非常适合从事编程开发的学生、教师、广大科研人员和工程技术人员研读。建议阅读本书的读者对的语法和PHP的相关知识有的了解。当然,如果你是初学者,本书也是一本难得的参考书。
J. 如何用js生成pdf
1,生成 PDF 这种事情通常由服务器端做
2,浏览器做的话要依赖于插件(ActiveX/Plugin,通常购买第三方的)
3,浏览器预览、打印倒是没问题(要装 PDF viewer,Firefox 自带的 PDF.js 扩展也可以)
4,总结,AngularJS 是浏览器端的,干不来这事儿,也不应该干这事儿,我想你最好换个方向