【问题标题】:Download generated PDF use FileSaver on client side and Snappy on server side下载生成的 PDF 在客户端使用 FileSaver,在服务器端使用 Snappy
【发布时间】:2017-06-07 16:35:24
【问题描述】:

我尝试使用 FileSaver 从服务器下载生成的 PDF。但是,它不起作用。

在 Laravel 框架中,我使用 Snappy 从 HTML 创建 PDF 文件。

$pdf = \PDF::loadView('pub.view', $data);
//$pdf->save('myfile.pdf');    //It's saved successfully.
return $pdf->download('printing.pdf');

从客户端,我应用 AngularJS 的 $resource 服务来获取 PDF 文件。

printPDF: {
            method: 'GET',
            headers: {
                accept: 'application/pdf'
            },
            responseType: 'arraybuffer',
            cache: true,
            transformResponse: function (data) {
                var pdf;
                if (data) {
                    pdf = new Blob([data], {
                        type: 'application/pdf'
                    });
                }
                return {
                    response: pdf
                };
            },
            url:'/u/:id/exportTopdf',
            params:{id:'@id'}
        }

服务器响应后,FileSaver 将保存此文件。

myService.printPDF({id: myId},
function successCallback(response){    

   saveAs(response, 'filename.pdf');  //FileSaver function

}, function errorCallback(response){

});

运行时,问题出现在浏览器控制台中:

`TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided`.

我认为 FileSaver 会导致问题,但我不知道如何解决。

【问题讨论】:

  • 我修好了。我的问题是响应不是 blob 文件。响应是对象。我必须提取 blob 数据作为响应并放入 saveAs 函数。我通过浏览器的下载器下载它。但是,FDM(免费下载管理器)在浏览器下载后捕获它。如何让 FDM 在浏览器之前捕获它?
  • FDM(免费下载管理器)无法下载 blob 文件。

标签: angularjs laravel pdf filesaver.js


【解决方案1】:
param = {
  action: "downloadReport",
};
$http({
  method: 'POST',
  url: 'http://localhost:8080/ivftcwcm2/services/fundTransferServices/downloadFile',
  //url:'http://localhost:8080/FundTransferUI/resources/locales/Disclosure.pdf',
  data: param,
  responseType: 'arraybuffer'
}).then(function(response) {
  var file = new Blob([response.data], {
    type: 'application/pdf'
  });
  var fileURL = URL.createObjectURL(file);
  var a = document.createElement('a');
  a.href = fileURL;
  a.target = '_blank';
  a.download = 'pdfFile.pdf';
  document.body.appendChild(a);
  a.click();
}, function(response) {
  alert('call failed');
});

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2015-03-06
    • 2019-10-13
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2014-09-04
    相关资源
    最近更新 更多