Node.js 如何在angularjs中将从nodejs服务器发送的pdf数据转换为pdf

Node.js 如何在angularjs中将从nodejs服务器发送的pdf数据转换为pdf,node.js,angularjs,pdf,download,html-pdf,Node.js,Angularjs,Pdf,Download,Html Pdf,我正在尝试下载在nodejs服务器上生成的pdf文件。当我发送pdf文件的数据时,它将到达angularjs前端,但我尝试将blob对象转换为pdf,但pdf没有显示任何数据 已经尝试了其他答案中提到的{responseType:'arraybuffer'},但我的pdf仍然没有显示任何数据 以下是将提供pdf数据的nodejs服务器: var pdff = require('html-pdf'); pdff.create(html, options).toFile('./report.pdf'

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

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对象必须是第三个参数


如果坚持使用POST请求,则
$http.POST
方法的第二个参数需要是请求主体的数据。options对象需要是第三个参数。

您是否在前端尝试了
{responseType:'octet stream'}
,在后端尝试了
键入:“application/octet stream”
?@Abdelkarim EL-AMEL刚刚尝试了不工作,如果您想将响应主体作为blob,您所需要的就是
responseType:'blob'
。但是你为什么不直接使用window.open('/mngmnt/consolidate_grv')(并使用GET而不是POST)?@JBNizet我甚至无法解释我有多高兴,你的想法对我起了作用,非常感谢你在前端尝试了
{responseType:'octet stream}
,并且
键入:“application/octet stream”
在您的后端?@Abdelkarim EL-AMEL刚刚尝试不工作,如果您想将响应主体作为一个blob,您只需要
响应类型:“blob”
。但是你为什么不直接使用window.open('/mngmnt/consolidate_grv')(并使用GET而不是POST)?@JBNizet我甚至无法解释我有多高兴,你的想法对我很有用谢谢