Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show a pdf stream in a new window

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?

like image 271
Marc Gil Sendra Avatar asked Dec 05 '13 13:12

Marc Gil Sendra


People also ask

How do I get a PDF to open in a new tab?

Please try the following steps: Go to Edit (Windows), Adobe Reader / Adobe Acrobat DC (Mac) > Preferences > General > Select, Open documents as new tabs in the same window > OK. Restart the application and check.

How do I display a modal pop up PDF?

You can have an iframe inside the modal markup and give the src attribute of it as the link to your pdf. On click of the link you can show this modal markup.

How do I get pdfs to open in Windows?

Solution 1RegisterStartupScript(this. GetType(), "open", "window. open('"+path+"','_blank', 'fullscreen=yes');", true);


1 Answers

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("...");
    }
});
like image 57
Igor Semin Avatar answered Sep 28 '22 04:09

Igor Semin