問題來由
這個話題來源於我自己遇到的一個問題——需要把PDF文件的數據嵌入到一個html文件中,而且還要html能顯示中文。要顯示中文,html的編碼就要用utf-8、GBK等編碼,但pdf文件的二進制數據不能無損轉換成這些類型的字符串。提示一點, ISO-8859編碼是可以存儲二進制數據的,但不能顯示漢字。
解決方案
最后我找到了base64編碼。pdf文件數據轉為base64編碼后放在 $("#pdfCache") 這個div 中。
使用window.atob()函數(javascript庫函數)將base64編碼轉為原文件的編碼,再把pdf文件的編碼的字符串轉為Uint8Array數組即可。
關鍵代碼如下:
var data = char2buf(window.atob($("#pdfCache").text()));
PDFJS.getDocument(data).then(function(pdfDoc_) {
.........
}
/*string -> Unit8Array*/ function char2buf(str){ var out = new ArrayBuffer(str.length); var u16a= new Uint8Array(out); var strs = str.split(""); for(var i =0 ; i<strs.length;i++){ u16a[i]=strs[i].charCodeAt(); } return u16a; }
demo附上,解壓后直接用瀏覽器打開即可 https://files.cnblogs.com/files/xhy1018/PDFJS_demo%282%29.zip
以下是demo中的104行的部分截圖,這樣就把pdf文件嵌入到html中,不需要再從服務器請求pdf文件數據。
說個題外話
如何在html中嵌入其他類型的文件???
答案是base64編碼 + blob對象,這篇博客講得很好 https://www.cnblogs.com/hhhyaaon/p/5928152.html
