2016-05-29 8 views
1

FileSaverを使用して、生成されたPDFをサーバーからダウンロードしようとしています。しかし、それは仕事ではありません。生成されたPDFのダウンロードクライアント側のFileSaverとサーバ側のスナッピー

Laravelフレームワークでは、Snappyを使用してHTMLからPDFファイルを作成します。

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

クライアントからは、PDFファイルを取得するためにAngularJSの$ resourceサービスを適用します。

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が問題になりますが、私はそれを修正する方法がわからないと思います。

+0

固定しました。私の問題はレスポンスがblobファイルではないということです。レスポンスはオブジェクトです。私は応答でBLOBデータを抽出し、saveAs関数を入れなければなりません。私はブラウザのダウンローダでダウンロードします。しかし、FDM(フリーダウンロードマネージャー)は、ブラウザのダウンロード後にそれをキャッチします。 FDMをブラウザの前にキャッチさせるにはどうすればいいですか? –

+0

FDM(無料ダウンロードマネージャー)はBLOBファイルをダウンロードできません。 –

答えて

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'); 
}); 
関連する問題