Javascript 如何从浏览器提供pdf并由<;对象>;数据属性?
如何从浏览器提供pdf,以便可以从对象标记的数据属性引用它?关键是要尝试另一个uri方案,比如filesystem:或blob:-而不是data:,它不允许像(#zoom=50)这样的片段标识符。服务器返回需要使用数据uri显示的base64二进制数据。我曾尝试附加显示参数#zoom=50,但在使用数据uri时,就像对url一样。我无法更改服务器,必须支持Chrome 45 数据:不会解析片段标识符的uriJavascript 如何从浏览器提供pdf并由<;对象>;数据属性?,javascript,html,pdf,html5-filesystem,Javascript,Html,Pdf,Html5 Filesystem,如何从浏览器提供pdf,以便可以从对象标记的数据属性引用它?关键是要尝试另一个uri方案,比如filesystem:或blob:-而不是data:,它不允许像(#zoom=50)这样的片段标识符。服务器返回需要使用数据uri显示的base64二进制数据。我曾尝试附加显示参数#zoom=50,但在使用数据uri时,就像对url一样。我无法更改服务器,必须支持Chrome 45 数据:不会解析片段标识符的uri <object type="application/pdf" ng-attr-da
<object type="application/pdf" ng-attr-data="{{'data:application/pdf;base64,' + itemGraphUrl}}"></object>
我尝试过的替代数据方案(文件系统:和blob:)
window.requestFileSystem=window.requestFileSystem | | window.webkitRequestFileSystem;
requestFileSystem(window.TEMPORARY,8*1024*1024,onInitFs,errorHandler);
函数onInitFs(fs){
getFile('graph.pdf',{create:true,exclusive:false},函数(fileEntry){
//为我们的FileEntry(log.txt)创建一个FileWriter对象。
createWriter(函数(fileWriter){
fileWriter.onwriteend=函数(e){
//$scope.fsGraphUrl=url.replace(“文件系统:”,“文件系统:应用程序/pdf;base64)”;
$scope.fsGraphUrl=true?fileEntryURL:objectURL;
$scope.$apply();
};
fileWriter.onerror=函数(e){
log('Write failed:'+e.toString());
};
//创建一个新Blob并将其写入log.txt。
var blob=new blob([pdfData],{type:'application/pdf'});
var objectURL=URL.createObjectURL(blob);
var fileEntryURL=fileEntry.toURL();
console.log('URL.createObjectURL为'+objectURL);//'blob:http%3A//localhost%3A3000/80d971a2-6f49-4e0f-9266-0746ebc66598'
console.log('fileEntry.toURL是'+fileEntry.toURL());/'文件系统:http://localhost:3000/temporary/graph.pdf'
fileWriter.write(blob);
},errorHandler);
},errorHandler);
createObjectURL和toURL似乎都很接近工作状态,但我收到了Chrome消息“加载PDF文档失败”。如果我没有包含“data:application/PDF;base64”,这就是我为数据uri收到的同一条消息。是否有办法以同样的方式使用filesystem:或blob:和特定的“application/PDF;base64”
<object type="application/pdf" ng-attr-data="{{fsGraphUrl + '#zoom=50'}}">
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 8*1024*1024, onInitFs, errorHandler);
function onInitFs(fs){
fs.root.getFile('graph.pdf', {create: true, exclusive: false}, function(fileEntry){
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function (e) {
// $scope.fsGraphUrl = url.replace("filesystem:", "filesystem:application/pdf;base64,");
$scope.fsGraphUrl = true ? fileEntryURL : objectURL;
$scope.$apply();
};
fileWriter.onerror = function (e) {
console.log('Write failed: ' + e.toString());
};
// Create a new Blob and write it to log.txt.
var blob = new Blob([pdfData], {type: 'application/pdf'});
var objectURL = URL.createObjectURL(blob);
var fileEntryURL = fileEntry.toURL();
console.log('URL.createObjectURL is ' + objectURL); //'blob:http%3A//localhost%3A3000/80d971a2-6f49-4e0f-9266-0746ebc66598'
console.log('fileEntry.toURL is ' + fileEntry.toURL()); //'filesystem:http://localhost:3000/temporary/graph.pdf'
fileWriter.write(blob);
}, errorHandler);
}, errorHandler);