1

我正在尝试下载在 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

4

1 回答 1

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 对象需要是第三个参数。

于 2019-04-13T20:19:25.363 回答