Search code examples
javascriptasp.net.netpdfwindow.open

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);

Solution

  • 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.