2017-01-06 14 views
0

私は Webアプリケーションのページを作成しています。ユーザーはリストから顧客を選択して、それらをメールで送付することができます。これらの文字はPDFsとしてアップロードされ、varbinaryとしてデータベースに保存されています。Javascript - APIから返されたBlobコンテンツを印刷

複数選択の場合、単純にbyte []を追加するので、ユーザーはすべての文字を含む1つのドキュメントを印刷して顧客に送信します。

blobをAPIから正常に取得してコンテンツタイプapplication-pdfで返すことができましたが、そこからどのように処理するのか分かりません。私はちょうどPDFをダウンロードし、PDFビューアを使用して印刷するようにユーザに促すことができます知っている

<iframe id="printFile" style="display:none"></iframe> 

this.printQueueService.getPrintContent(printRequests) //customers to receive letters 
      .subscribe((data: Blob) => { 
       var element: HTMLIFrameElement = <HTMLIFrameElement>document.getElementById('printFile'); 
       element.innerText = data + ""; //what do I do with the blob? 
       element.contentWindow.print(); 
}); 

HTML要素:

は、ここに私のAngular2コンポーネントAPI呼び出しのしかし、私はむしろユーザーに余分なステップを踏み出させることはしません。

ユーザーが適切なプラグインとブラウザをサポートしているため、ブラウザでPDFをレンダリングして印刷しないでください。

ブラウザにブロブを印刷するにはどのようなオプションがありますか?

+0

あなたはIFRAMEのSRCの一部としてそれを使用することができます。

代わりに、私は次のように新しいタブで生成されたPDFを開くことにしました。 –

+0

さらに優れています。そのようにあなたのAPIを設計しないでください - iframeのリクエストを使用してpdfを取得してください。それ以外の場合は、jsコンテキストを処理するための余分なメモリがたくさんあります。 –

+0

@ DanielA.White IFrameのAPIへの投稿リクエストはどのようにして作成しますか? PDFは動的に生成されます。 –

答えて

1

ダニエルA.ホワイトからの提案によると、私はこの問題を解決しました。私はこれらの印刷ファイルが大量になる可能性があり、print()機能にページ名が脚注として含まれているため、IFrameを使用しないことにしました。

if (window.navigator.msSaveOrOpenBlob) { 
    window.navigator.msSaveOrOpenBlob(data, "PrintedLetters.pdf"); //IE is the worst!!! 
} 
else { 
    var fileURL = URL.createObjectURL(data); 
    var a: HTMLAnchorElement = document.createElement('a'); 
    a.href = fileURL; 
    a.target = '_blank'; 
    document.body.appendChild(a); 
    a.click(); 
} 
関連する問題