关于pdf.js的使用问题

落_潇 2017-03-14 04:25:53
从网上找到了该方面的代码,现在出现了一些问题。

var fileUrl = "${pdfUrl}";
//定义全局变量
var DEFAULT_URL ;
var path = "${resourcesPath}";

$(document).ready(function(){
$.ajax({
type:"post",
async: false,
contentType:"application/pdf;charset=utf-8",
url:fileUrl,
success:function(data){
var pdfAsDataUri = data;
var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
DEFAULT_URL = pdfAsArray;
}
});
});
function convertDataURIToBinary(dataURI) {
var rawLength = dataURI.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for(i = 0; i < rawLength; i++) {
array[i] = dataURI.charCodeAt(i) & 0xff;
}
return array;
}

使用pdf流的方式返回后,最终DEFAULT_URL 是Uint8Array方式的数组,然后到viewer.js中
var queryString = document.location.search.substring(1);
var params = parseQueryString(queryString);
var file = 'file' in params ? params.file : DEFAULT_URL;

在这个文件中全文就这么一个DEFAULT_URL,最后file肯定就等于这个数组了
然后,
if (file && file.lastIndexOf('file:', 0) === 0) {
// file:-scheme. Load the contents in the main thread because QtWebKit
// cannot load file:-URLs in a Web Worker. file:-URLs are usually loaded
// very quickly, so there is no need to set up progress event listeners.
PDFViewerApplication.setTitleUsingUrl(file);
var xhr = new XMLHttpRequest();
xhr.onload = function() {
PDFViewerApplication.open(new Uint8Array(xhr.response), 0);
};
try {
xhr.open('GET', file);
xhr.responseType = 'arraybuffer';
xhr.send();
} catch (e) {
PDFViewerApplication.error(mozL10n.get('loading_error', null,
'An error occurred while loading the PDF.'), e);
}
return;
}

if判断明显都过不去...最后Uncaught (in promise) TypeError: file.lastIndexOf is not a function而结束..
大神们怎么解决..
...全文
1406 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36772452 2017-10-13
  • 打赏
  • 举报
回复
楼主,好了吗 我的是可以的谷歌火狐等浏览器下预览pdf,但是就是在ie下报错!
super_Light_L 2017-08-07
  • 打赏
  • 举报
回复
题主做好了吗?我也得用pdf.js读取服务器上的文件 , 想用流的方式读取,但是没成功,file后面拼路径都好使就是读取文件流不行
Go 旅城通票 2017-03-15
  • 打赏
  • 举报
回复
引用 5 楼 zzj9022 的回复:
[quote=引用 4 楼 showbo 的回复:]你干嘛要自己用ajax请求一次fileUrl?你要加载指定的文件直接传递文件路径就行了,注意是相对于当前页面的 如你加载pdf.js的html为test.html,那么你要加载同目录下的pdf直接...
问题不是在这里,dom ready这块我可以改一下去掉 因为pdf在文件服务器上,我不能直接读取路径,所以Ajax去后台读取的文件流信息返回前台, viewer.js现在是在最后放置的,里边的DEFAULT_URL 定义我也删除掉了。 现在的情况是我的DEFAULT_URL 就是一串Uint8Array格式的数组, 所以根据viewer.js中的var file = 'file' in params ? params.file : DEFAULT_URL;这句话, 这个file就是数组串,然后肯定是过不了file.lastIndexOf('file:', 0) === 0这句话的..[/quote] ╮(╯▽╰)╭。。你先搞清楚路径问题吧,你路径还没搞清楚。。你只需要配置file参数,插件会帮你自动加载服务器的路径文件,不需要你自己加载
落_潇 2017-03-15
  • 打赏
  • 举报
回复
引用 4 楼 showbo 的回复:
你干嘛要自己用ajax请求一次fileUrl?你要加载指定的文件直接传递文件路径就行了,注意是相对于当前页面的 如你加载pdf.js的html为test.html,那么你要加载同目录下的pdf直接...
问题不是在这里,dom ready这块我可以改一下去掉 因为pdf在文件服务器上,我不能直接读取路径,所以Ajax去后台读取的文件流信息返回前台, viewer.js现在是在最后放置的,里边的DEFAULT_URL 定义我也删除掉了。 现在的情况是我的DEFAULT_URL 就是一串Uint8Array格式的数组, 所以根据viewer.js中的var file = 'file' in params ? params.file : DEFAULT_URL;这句话, 这个file就是数组串,然后肯定是过不了file.lastIndexOf('file:', 0) === 0这句话的..
Go 旅城通票 2017-03-15
  • 打赏
  • 举报
回复
引用 3 楼 zzj9022 的回复:
[quote=引用 2 楼 showbo 的回复:] 说明你那个file对象没有lastIndexOf方法罗,自己alert(file);alert(file&&file.lastIndexOf)看输出什么东东
这个viewer.js中就是这么定义的,之前这个file是接收路径的,现在需要接收数据流转化的Uint8Array格式才行,用过这个东西的大神们,怎么改...[/quote]你干嘛要自己用ajax请求一次fileUrl?你要加载指定的文件直接传递文件路径就行了,注意是相对于当前页面的 如你加载pdf.js的html为test.html,那么你要加载同目录下的pdf直接 test.html?file=xxxx.pdf就行了,上级目录的就test.html?file=../xxxx.pdf 你这个问题是因为你的ajax请求是dom ready在加载的,而if判断在dom ready前就执行了,你没有给DEFAULT_URL赋值,那么是undefined,你调用lastIndexOf肯定报错了 去掉 $(document).ready(function(){这层代码,并且你的第一段代码要放到viewer.js上,并且去掉viewer.js中 var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf'; 这句,要不重新赋值就不是你ajax请求到的内容了
落_潇 2017-03-15
  • 打赏
  • 举报
回复
引用 2 楼 showbo 的回复:
说明你那个file对象没有lastIndexOf方法罗,自己alert(file);alert(file&&file.lastIndexOf)看输出什么东东
这个viewer.js中就是这么定义的,之前这个file是接收路径的,现在需要接收数据流转化的Uint8Array格式才行,用过这个东西的大神们,怎么改...
Go 旅城通票 2017-03-14
  • 打赏
  • 举报
回复
说明你那个file对象没有lastIndexOf方法罗,自己alert(file);alert(file&&file.lastIndexOf)看输出什么东东
落_潇 2017-03-14
  • 打赏
  • 举报
回复
使用的是读取pdf文件流的方式。。。 大神呢,,,下班了么。

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧