Show a pdf stream in a new window

javascript, jquery, pdf, spring, stream

Solution

You can get base64 string of your pdf stream and pass it to response.

And your method change

$.ajax({
    type: "POST",
    url: url,
    data: {"data": JSON.stringify(myData)},
    success: function(data, textStatus, jqXHR) {
        var pdfWin= window.open("data:application/pdf;base64, " + data, '', 'height=650,width=840');
        // some actions with this win, example print...
    },
    error: function(jqXHR) {
        showError("...");
    }
});

Problem

I'm generating in a server a PDF document that I want to show then in the client. The server side looks like following: ``` ByteArrayOutputStream baos = generatePDF(); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=file.pdf"); response.setContentLength(baos.size()); baos.writeTo(response.getOutputStream()); ``` In the client, I have the following code to get retrieve the PDF: ``` $.ajax({ type: "POST", url: url, data: {"data": JSON.stringify(myData)}, success: function(data, textStatus, jqXHR) { window.open("data:application/pdf," + escape(data)); }, error: function(jqXHR) { showError("..."); } }); ``` It looks well, the new window is opened, but the PDF is not shown. It always appears an empty document. Nevertheless, if the client looks like following, it works fine: ``` var form = $("<form target='_blank'>").attr({ action : myURL, method : "POST" }); var input1 = $("<input type='hidden'>").attr({ "name": "data", value: JSON.stringify(myData) }); form.append(input1); $("body").append(form); form.submit(); form.remove(); ``` But I can't use the second way cause I need to manage the errors, and I can't do it using form.submit(). Any idea about what's happening with the PDF?

Original source