Window.Open with PDF stream instead of PDF location
It looks like window.open
will take a Data URI as the location parameter.
So you can open it like this from the question: Opening PDF String in new window with javascript:
window.open("data:application/pdf;base64, " + base64EncodedPDF);
Here's an runnable example in plunker, and sample pdf file that's already base64 encoded.
Then on the server, you can convert the byte array to base64 encoding like this:
string fileName = @"C:\TEMP\TEST.pdf";byte[] pdfByteArray = System.IO.File.ReadAllBytes(fileName);string base64EncodedPDF = System.Convert.ToBase64String(pdfByteArray);
NOTE: This seems difficult to implement in IE because the URL length is prohibitively small for sending an entire PDF.
Note: I have verified this in the latest version of IE, and other browsers like Mozilla and Chrome and this works for me. Hope it works for others as well.
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'); }}