我试图通过从base64格式的XHR请求获取PDF文件并将其输入标准PDF.js查看器的DEFAULT_URL变量,使用PDF.js(1.1.215和1.1.366)显示PDF
到目前为止,我已经尝试了两种解决方案:
1)直接传递base64
//Get the document
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","../../documents/get_document.php",false);
xmlhttp.send();
var pdf_document = xmlhttp.responseText;
var DEFAULT_URL = 'data:application/pdf;base64,' + pdf_document;
结果:
FF 40.0.2 - >行
Chrome 44.0.2403.155 - >行
Safari 8.0.6 + Mobile - >错误:检索PDF数据时意外的服务器响应(0):application / pdf; base64,JVBERi0xLjc ......
2)将base64字符串转换为Uint8Array
function base64ToUint8Array(base64) {
var raw = atob(base64); //This is a native function that decodes a base64-encoded string.
var uint8Array = new Uint8Array(new ArrayBuffer(raw.length));
for(var i = 0; i < raw.length; i++) {
uint8Array[i] = raw.charCodeAt(i);
}
return uint8Array;
}
//Get the document
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","../../documents/get_document.php",false);
xmlhttp.send();
var pdf_document = xmlhttp.responseText;
var DEFAULT_URL = base64ToUint8Array(pdf_document);
结果: 所有浏览器 - &gt;查看器窗口正常,但pdf未加载/显示(没有错误消息)
来自http://107.22.172.223:8877/c48a5fd7a46a111/examples/learning/helloworld64.html的示例 我知道应该有一种方法只是传递atob(base64)字符串,但我还没有想出如何在默认的viewer.js(=将其设置为DEFAULT_URL)中执行此操作。
额外信息
我也在PDF.js github项目中提出了这个问题,其中响应是改变XHR请求的responseType和响应属性。
BUT
提前多多感谢!