Ich habe ein sehr ähnliches Problem/ PDF Blob - Popup-Fenster zeigt keinen Inhalt an , aber ich verwende Angular 2. Die Antwort auf Frage war, responseType auf arrayBuffer zu setzen, aber es funktioniert nicht in Angular 2 Der Fehler ist, dass der ReponseType im Typ RequestOptionsArgs nicht vorhanden ist. Ich habe auch versucht, es durch BrowserXhr zu erweitern, aber es funktioniert immer noch nicht ( https://github.com/angular/http/issues/83 ).
Mein Code lautet:
createPDF(customerServiceId: string) {
console.log("Sending GET on " + this.getPDFUrl + "/" + customerServiceId);
this._http.get(this.getPDFUrl + '/' + customerServiceId).subscribe(
(data) => {
this.handleResponse(data);
});
}
Und die handleResponse-Methode:
handleResponse(data: any) {
console.log("[Receipt service] GET PDF byte array " + JSON.stringify(data));
var file = new Blob([data._body], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
}
Ich habe auch versucht, die SaveAs-Methode von FileSaver.js zu speichern, aber es ist dasselbe Problem. PDF wird geöffnet, der Inhalt wird jedoch nicht angezeigt. Vielen Dank
Ich hatte viele Probleme beim Herunterladen und Anzeigen von PDF-Inhalten. Ich habe wahrscheinlich ein oder zwei Tage damit verschwendet, das Problem zu beheben. Daher werde ich ein Arbeitsbeispiel für das erfolgreiche Herunterladen von PDF oder das Öffnen in einem neuen Tab posten:
myService.ts
downloadPDF(): any {
return this._http.get(url, { responseType: ResponseContentType.Blob }).map(
(res) => {
return new Blob([res.blob()], { type: 'application/pdf' })
}
}
myComponent.ts
this.myService.downloadPDF().subscribe(
(res) => {
saveAs(res, "myPDF.pdf"); //if you want to save it - you need file-saver for this : https://www.npmjs.com/package/file-saver
var fileURL = URL.createObjectURL(res);
window.open(fileURL); / if you want to open it in new tab
}
);
HINWEIS
Es ist auch erwähnenswert, dass wenn Sie die Http
-Klasse erweitern, um headers
alle Ihre Anforderungen oder ähnliches hinzuzufügen, dies zu Problemen beim Herunterladen von PDF führen kann, da Sie RequestOptions
überschreiben, wo wir responseType: ResponseContentType.Blob
und hier hinzufügen erhalten Sie The request body isn't either a blob or an array buffer
Fehler.
ANGULAR 5
Ich hatte das gleiche Problem, das ich einige Tage verloren habe.
Hier kann meine Antwort anderen helfen, was dazu beigetragen hat, pdf zu erstellen.
Für mich, obwohl ich als responseType erwähne: 'arraybuffer', konnte er es nicht nehmen.
Dafür müssen Sie als responseType angeben: 'arraybuffer' als 'json'. ( Reference )
Arbeitscode
downloadPDF(): any {
return this._http.get(url, { responseType: 'blob' as 'json' }).subscribe((res) => {
var file = new Blob([res], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
}
}
Bezogen auf den untenstehenden Link
Amit, Sie können den Dateinamen umbenennen, indem Sie am Ende des Strings eine Variable hinzufügenso saveAs(res, "myPDF.pdf");
Wird
saveAs(res, "myPDF_"+someVariable+".pdf");
wobei someVariable ein Zähler sein kann oder mein persönlicher Favorit eine Datumszeitzeichenfolge.