【发布时间】:2016-04-02 02:05:35
【问题描述】:
我正在服务器上动态生成 PDF 以响应从 ajax 请求收到的参数。我需要在 ajax 中处理响应并将 PDF 作为数据对象传递给 PDF.js。
我不想将这些 PDF 写入服务器 - 我宁愿有一个干净的进程来返回 PDF 流
我使用 filereader 成功完成了类似的操作 - 将本地 PDF 作为 ArrayBuffer 加载到浏览器中的 PDF.js 中。
responseType 是“application/pdf”,原始 PDF 正在返回,但我似乎无法将其转换为 PDF.js 的 ArrayBuffer
var responseText = src
var len = responseText.length
console.log(len);
var buf = new ArrayBuffer(len);
console.log(buf);
var bufView = new Uint8Array(buf);
console.log(bufView);
for (var i=0; i < len; i++) {
bufView[i] = responseText.charCodeAt(i);
}
console.log(bufView);
var docInitParams = { data: bufView};
PDFJS.getDocument(docInitParams).then(function(pdf) {......
这是上面代码的输出
【问题讨论】:
-
你可以做
var docInitParams = {data: responseText};(见github.com/mozilla/pdf.js/blob/master/src/display/api.js#L379)你的解决方案也应该工作,所以我认为你的responseText包含损坏的数据。 -
在将 PDF 数据提供给 PDF.js
window.crypto.subtle.digest("SHA-1", bufView).then(function (d) { console.log(new Uint8Array(d)); })之前以及在将其作为流发送之前(在服务器上您可以执行例如openssl sha1 test.pdf),也尝试输出 sha1 跨度> -
哎呀 - 不喜欢那样.....TypeError: undefined is not an object (evalating 'window.crypto.subtle.digest')
-
我注意到它确实会加载 PDF 并调整画布大小以适应页面大小,但不会呈现它并给出 - 警告:不支持的功能“未知”
-
如果我使用 url 将 PDF 加载到 php 脚本,那么它可以很好地呈现 PDF,但是如果我尝试通过 data:src 方法从同一个 php 脚本中传递 ajax responseText 它会抛出上面的警告。
标签: pdf.js