使用Uint8Array数组作为PDF.js(PDFJS.getDocument())的参数


 问题来由 

    这个话题来源于我自己遇到的一个问题——需要把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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM