DEFAULT_URL中的PDF.js提供base64无法在Safari(移动)

时间:2015-09-01 14:01:45

标签: javascript pdf safari mobile-safari pdf.js

我试图通过从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

  • 如果我是正确的,这只能在异步请求的情况下完成。而且我没有看到如何使用异步请求将文档提供到viewer.js的DEFAULT_URL中(在执行其余脚本之前必须完全接收文档)
  • 这并不能解释为什么它适用于FF / Chrome,但不适用于Safari

提前多多感谢!

0 个答案:

没有答案