古詩詞大全網 - 字典詞典 - 如何創建pdf的buffer,讓pdf.js實現預覽pdf文件

如何創建pdf的buffer,讓pdf.js實現預覽pdf文件

PDF.js 是基於開放的 HTML5 及 JavaScript 技術實現的開源產品。簡單說就是壹個 PDF 解析器。運用HTML5JavaScript(即pdf.js僅使用安全的web語言,不包含任何攻擊者可以用的本地代碼塊)的PDF閱讀器pdf.js,直接在標準的HTML頁面上載入和渲染PDF文件, 還可以提高安全性(不需要安裝第三方插件,安全性由瀏覽器保證),瀏覽器所做的安全措施已經為pdf.js提供了安全的運行環境。其對IE和 FireFox瀏覽器的要求是IE9+, FireFox19+。

在線示例: /pdfjs-helloworld-v2/1/edit , /pdfjs-prevnext-v2/1/edit

源碼:/mozilla/pdf.js

官網:patibility.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>