javascript - transparente - Ventana. Abrir con secuencia PDF en lugar de ubicación PDF
window.open javascript ejemplo (2)
Basado en la pregunta Abrir PDF en la ventana completa del nuevo navegador , parece que puedo usar JavaScript para abrir una nueva ventana con un archivo PDF con el siguiente código:
window.open(''MyPDF.pdf'', ''_blank'');
Me gustaría hacerlo en un viaje de regreso desde el servidor agregando una matriz de bytes en lugar del nombre del archivo para usar como la ubicación de la URL en window.open
Actualmente estoy devolviendo archivos PDF como this :
Response.Clear();
Response.ContentType = "application/pdf";
Response.BinaryWrite(pdfByteArray);
Response.Flush();
¿Hay alguna manera de abrir una nueva ventana con una matriz de bytes PDF en JavaScript?
Algo como esto:
var script = "window.open(''" + pdfByteArray + "'', ''_blank'');";
ScriptManager.RegisterClientScriptBlock(Parent.Page, typeof(Page), "pdf", script, true);
Nota : he verificado en la última versión de IE, y otros navegadores como Mozilla, Chrome y esto funciona para mí. Espero que funcione para otros también.
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'');
}
}
Parece que window.open
tomará un URI de datos como parámetro de ubicación.
Para que pueda abrirlo de la siguiente manera: Abriendo Cadena PDF en una nueva ventana con javascript :
window.open("data:application/pdf;base64, " + base64EncodedPDF);
Aquí hay un ejemplo runnable en plunker , y un archivo de muestra en PDF que ya está codificado en base64.
Luego, en el servidor, puede convertir la matriz de bytes a la codificación base64 de esta manera:
string fileName = @"C:/TEMP/TEST.pdf";
byte[] pdfByteArray = System.IO.File.ReadAllBytes(fileName);
string base64EncodedPDF = System.Convert.ToBase64String(pdfByteArray);
NOTA : Esto parece difícil de implementar en IE porque la longitud de la URL es prohibitivamente pequeña para enviar un PDF completo.