Basierend auf der Frage PDF in neuem Browser-Vollfenster öffnen kann ich mit JavaScript ein neues Fenster mit einem PDFöffnen. _ Datei mit folgendem Code:
window.open('MyPDF.pdf', '_blank');
Ich möchte dies auf einer Rückreise vom Server tun, indem ich anstelle des Dateinamens ein Byte-Array als URL-Speicherort in window.open
hinzufüge.
Ich versende gerade PDF Dateien wie diese zurück :
Response.Clear();
Response.ContentType = "application/pdf";
Response.BinaryWrite(pdfByteArray);
Response.Flush();
Gibt es eine Möglichkeit, ein neues Fenster mit einem PDF Byte-Array in Javascript zu öffnen?.
Etwas wie das:
var script = "window.open('" + pdfByteArray + "', '_blank');";
ScriptManager.RegisterClientScriptBlock(Parent.Page, typeof(Page), "pdf", script, true);
Es sieht aus wie window.open
übernimmt einen Daten-URI als Standortparameter.
So können Sie es wie folgt aus der Frage öffnen: Öffnen PDF String in neuem Fenster mit Javascript :
window.open("data:application/pdf;base64, " + base64EncodedPDF);
Hier ist ein lauffähigesBeispiel im Plunker und Beispiel-PDF-Datei , das bereits base64-codiert ist.
Dann können Sie auf dem Server das Byte-Array wie folgt in Base64-Codierung konvertieren:
string fileName = @"C:\TEMP\TEST.pdf";
byte[] pdfByteArray = System.IO.File.ReadAllBytes(fileName);
string base64EncodedPDF = System.Convert.ToBase64String(pdfByteArray);
[~ # ~] Hinweis [~ # ~] : Dies scheint schwierig zu implementieren in IE wegen der URL-Länge ist unerschwinglich klein, um ein gesamtes PDF zu senden.
Hinweis: Ich habe in der neuesten Version von IE und anderen Browsern wie Mozilla Chrome und das funktioniert für mich. Hoffe, es funktioniert auch für andere.
if (data == "" || data == undefined) {
alert("Falied to open PDF.");
} else { //For IE using atob convert base64 encoded data to byte array
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
var byteCharacters = atob(data);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {
type: 'application/pdf'
});
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else { // Directly use base 64 encoded data for rest browsers (not IE)
var base64EncodedPDF = data;
var dataURI = "data:application/pdf;base64," + base64EncodedPDF1;
window.open(dataURI, '_blank');
}
}