Solución:
Parece que window.open
tomará un URI de datos como parámetro de ubicación.
Entonces puede abrirlo así desde la pregunta: Abrir cadena PDF en una nueva ventana con javascript:
window.open("data:application/pdf;base64, " + base64EncodedPDF);
Aquí hay un ejemplo ejecutable en plunker y un archivo pdf de muestra que ya está codificado en base64.
Luego, en el servidor, puede convertir la matriz de bytes a codificación base64 como esta:
string fileName = @"C:TEMPTEST.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.
Nota: He verificado esto en la última versión de IE y en otros navegadores como Mozilla y Chrome y esto funciona para mí. Espero que también funcione para otros.
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," + base64EncodedPDF;
window.open(dataURI, '_blank');
}
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)