从网上找到了该方面的代码,现在出现了一些问题。 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而结束..
大神们怎么解决..
//定义全局变量
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而结束..
大神们怎么解决..
大神呢,,,下班了么。
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请求到的内容了
因为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这句话的..
因为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这句话的..
╮(╯▽╰)╭。。你先搞清楚路径问题吧,你路径还没搞清楚。。你只需要配置file参数,插件会帮你自动加载服务器的路径文件,不需要你自己加载