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 是瀏覽器端的,干不來這事兒,也不應該干這事兒,我想你最好換個方向