Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Window.Open with PDF stream instead of PDF location

Based on the question Open PDF in new browser full window, it looks like I can use JavaScript to open a new window with a PDF file with the following code:

window.open('MyPDF.pdf', '_blank'); 

I'd like to do so on a return trip from the server by adding a byte array instead of the file name to use as the URL location in window.open

I'm currently returning PDF files like this:

Response.Clear(); Response.ContentType = "application/pdf"; Response.BinaryWrite(pdfByteArray); Response.Flush(); 

Is there a way to open a new window with a PDF byte array in javascript.

Something like this:

var script = "window.open('" + pdfByteArray + "', '_blank');"; ScriptManager.RegisterClientScriptBlock(Parent.Page, typeof(Page), "pdf", script, true); 
like image 255
KyleMit Avatar asked Mar 31 '14 20:03

KyleMit


1 Answers

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.

like image 74
KyleMit Avatar answered Sep 17 '22 15:09

KyleMit