2017-06-29 21 views
0

Angularアプリケーションでは、ボタンをクリックするとPDFを開く必要があります。 AngularコンポーネントのPDF blobを開く

は、私が最初の場所で thisポストによって与えられた指示に従ったので、私は今、これらの2つの方法があります:

サービスに呼び出し側コンポーネント

public PrepareDownload(){ 
    this._certificateService 
      .GetPdf(args) 
      .subscribe(
      result => { 
       this.BlobUri = URL.createObjectURL(result); 
      } 
} 

public Download() { 
    window.open(this.BlobUri);  
} 

public GetPdf() : any { 
    var headers = new Headers(); 
    headers.append("Content-Type", "application/json"); 
    var payload = {id:215}; 
    return this._http.post(this.requestUri, 
         JSON.stringify(payload), 
         { headers: headers, 
          responseType: ResponseContentType.Blob }) 
        .map((response: Response) => 
        { 
         return new Blob([response.blob()], { type: 'application/pdf' }); 
        }); 
} 

GetPdfの応答には配列が含まれています[ 37,80,68,70,45,49,46,...]のようになります。残念ながら、ダウンロードメソッドが呼び出されると、結果は無効なpdfと思われます。 firefoxでファイルをダウンロードしてtxtファイルに名前を変更すると、内容はバイナリではなく、完全なバイト配列が文字列として認識されます。

enter image description here

+0

ブロブの再ラッピングが必要であるとは思わないので、 '(response:Response)=> response.blob()'が普通に働いていました。 –

+0

タイプヘッダーを追加しないと、ブラウザはpdfビューアでこれを開こうとしません。これらのヘッダーを追加するには、私は再ラップします。 –

+1

さて、サーバーが正しいContent-Typeを最初に返すようにしてください。 –

答えて

0

@デビッドシロによるコメントで示されているように、サービスは、修正しなければなりませんでした。 リクエストは、バイト配列ではなくストリームを返します。これは、質問に記述されているように処理できます。

関連する問題