サーバーから次のPDFストリームを取得しました:
このストリームをAngularJSでどのように読み取ることができますか?次のコードを使用して、新しいウィンドウでPDFファイルとしてこれを開こうとしました:
.success(function(data) {
window.open("data:application/pdf," + escape(data));
});
しかし、開いているウィンドウにコンテンツが表示されません。
コントローラーコードを変更することでこれを達成しました
$http.get('/retrievePDFFiles', {responseType: 'arraybuffer'})
.success(function (data) {
var file = new Blob([data], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
});
Pleasは次のコードを確認します。
コントローラー側-
$http.get(baseUrl + apiUrl, { responseType: 'arraybuffer' })
.success(function (response) {
var file = new Blob([response], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
$scope.pdfContent = $sce.trustAsResourceUrl(fileURL);
})
.error(function () {
});
HTML側:
<div ng-controller="PDFController" class="modal fade" id="pdfModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content" onloadstart="">
<object data="{{pdfContent}}" type="application/pdf" style="width:100%; height:1000px" />
</div>
</div>
また、Angular ng-pdfviewerを使用して、jsファイルを使用してPDFを表示できます。
Java:Getメソッド
BLOB pdfData = getBlob_Data;
response.setContentType(pdfData.getContentType());
response.setHeader(ApplicationLiterals.HEADER_KEY_CONTENT, "attachment; filename=FileName.pdf");
response.getOutputStream().write(pdfData.getBinaryData());
response.getOutputStream().flush();
PDF.JS をご覧ください。これは、pdfストリームを取得してクライアント側にレンダリングできるクライアント側javascriptライブラリです。 AngularはPDFを読み込めないため、これはangularの問題ではありません。
Config.responseTypeの使用に関する問題は、$ httpサービスが引き続きデフォルトのresponseTransformerを実行し、応答をJSONに変換しようとすることです。また、デフォルトの受け入れヘッダーを送信しています。 (未テストの)代替案は次のとおりです。
$http.get('/retrievePDFFiles', {
headers: { Accept: "application/pdf"},
transformResponse: function(data) {
return new Blob([data], {type: 'application/pdf'});
}}).success(function (data) {
var fileURL = URL.createObjectURL(data);
window.open(fileURL);
});