我正在构建基于HTML5的混合应用程序,需要从后端Sharepoint服务器下载,存储和显示PDF文档。为了查看PDF,我使用的是PDF.js.下载和存储PDF文档工作正常,我得到相应的成功消息。 现在,当我尝试从本地数据库中选择SELECT数据时,查询失败了,我不知道在哪里。用于检索数据的代码与PDF.js example
中提到的相同下面是下载,存储和检索我正在使用的数据的代码:
function getRawData(){
var xmlHTTP = new XMLHttpRequest();
xmlHTTP.open('GET','http://servername.com/TestDoc.pdf',true);
xmlHTTP.setRequestHeader("Authorization", "Basic " +"Base64String");
xmlHTTP.responseType = 'arraybuffer';
xmlHTTP.onload = function(e)
{
var arr = new Uint8Array(this.response);
saveToDb(arr);
};
xmlHTTP.send();
//This function is successful
}
function saveToDb(rwdt){
db.transaction(function (tx) {
tx.executeSql('INSERT INTO pdfdata (rawdata) VALUES (?)',[rwdt],SuccessInsert,errorInsert);
});
//This function is successful
}
function SuccessInsert(tx,result){
alert("Last inserted ID = " + result.insertId);//This is triggered
}
function retrieveFromTable(){
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM pdfdata',[],showpdfNew,selecterror);
});
}
function showpdfNew(tx,rs){
var r = rs.rows.item(0);
var url = r['rawdata'];
alert("Alerts work only till here");
PDFJS.workerSrc = 'js/pdf.worker.js';
// Asynchronous download PDF
PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf) {
// Fetch the first page
pdf.getPage(1).then(function getPageHelloWorld(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
// Prepare canvas using PDF page dimensions
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
}
相应的文件 - > pdf.js和pdf.worker.js包含在项目文件夹中,也包含在index.html中。 HTML页面只有3个简单的按钮, onclick 到上面显示的功能。 任何人都可以指出上述逻辑中缺少的东西吗?
修改: 如果我尝试直接在移动应用程序中显示PDF(而不是存储在本地数据库中然后打开),那么它会打开而没有任何问题。