我正在尝试下载在nodejs服务器上生成的pdf文件。当我发送pdf文件的数据时,它已经到了angularjs前端,但是我尝试将blob对象转换为pdf,但是pdf没有显示数据。
已经尝试了其他答案中提到的{responseType: 'arraybuffer'}
,但我的pdf仍未显示任何数据。
这是将提供pdf数据的nodejs服务器:
var pdff = require('html-pdf');
pdff.create(html, options).toFile('./report.pdf', function(err) {
if (err) return console.log(err);
res.contentType("application/pdf");
res.download("./report.pdf");
});
在上面的代码中-在服务器上完全生成report.pdf。
这是angularjs代码:
app.controller("ExampleCtrl",['FileSaver', 'Blob','$http', function(FileSaver, Blob,$http) {
var vm = this;
vm.consolidate=function(){
$http.post('/mngmnt/consolidate_grv',{responseType: 'arraybuffer'}).then(function(response){
//console.log(response.data);
console.log(response);
//var byteArray = new Uint8Array(response.data);
var blob = new Blob([response.data], { type: 'application/pdf'});
console.log(blob);
var fileURL = URL.createObjectURL(blob);
//FileSaver.saveAs(blob, 'report.pdf');
window.open(fileURL)
});
}
}]);
一切正常,但生成的pdf显示的数据与服务器端显示的数据不同。
我希望生成与服务器端相同的pdf
答案 0 :(得分:0)
app.controller("ExampleCtrl", function(FileSaver, Blob,$http) {
var vm = this;
vm.consolidate=function(){
$http.post('/mngmnt/consolidate_grv', {}, {responseType: 'blob'})
.then(function(response){
//console.log(response.data);
console.log(response);
//var byteArray = new Uint8Array(response.data);
var blob = response.data;
console.log(blob);
var fileURL = URL.createObjectURL(blob);
//FileSaver.saveAs(blob, 'report.pdf');
window.open(fileURL)
});
};
});
如果您坚持使用POST请求,则$http.post
方法的第二个参数必须是请求正文的数据。 options对象必须是第三个参数。