Q:

GWT: Showing PDF created as POST response

I have a servlet in an GWT app thats creates a PDF file with the data given with the post request and sends the responst back:
public void service(HttpServletRequest request, HttpServletResponse response) {
        try {
            String text = request.getParameter("text");
            if (text == null || text.trim().length() == 0) {
                text = "no data";
            }

            //PDF Creation with iText
            Document document = new Document();
            ByteArrayOutputStream b = new ByteArrayOutputStream();
            PdfWriter.getInstance(document, b);
            document.open();
            document.add(new Paragraph(text));
            document.close();

            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control",
                    "must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Pragma", "public");
            response.setContentType("application/pdf");

            response.setContentLength(b.size());
            OutputStream os = response.getOutputStream();
            b.writeTo(os);
            os.flush();
            os.close();

        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }

I want to show the created PDF to the User. I got this far on the client:
final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
                GWT.getModuleBaseURL() + "PdfServlet");

    rb.setHeader("Content-type", "application/x-www-form-urlencoded");
    StringBuffer postData = new StringBuffer();
    postData.append(URL.encode("text")).append("=")
            .append(URL.encode(Text));

        rb.setRequestData(postData.toString());
        rb.setCallback(new RequestCallback() {

            @Override
            public void onResponseReceived(Request request,
                    Response response) {
                if (200 == response.getStatusCode()) {
                    //What to do here?
                } else {
                    //TODO:Something
                }
            }

            @Override
            public void onError(Request request, Throwable exception) {
                /TODO:...

            }
        });
        try {
            rb.send();
        } catch (RequestException e) {
            e.printStackTrace();
        }

So my question is:
How do I show this PDF to the user?
All i managaged to do is show the pdf with "no data" in it..
Thank you for you help :)

A:

Instead of using a RequestBuilder, you can simply use Window.Location.setUrl(yourDowloadUrl?key=value) and include your parameters in the query String. Note however that you must set the Content-disposition header: attachment header so the browser will prompt you to save or open the file, and not replace your GWT app.
Better even, create a hidden iframe in your html page, and call setUrl on that widget.
The downside of using this approach is that it doesn't allow your client code to capture feedback if something goes wrong server-side and instead of a pdf the call returns HTML with an error string from your web server. If that's very important to you, you should use a polling mechanism that requests the document, which is then produced and saved on the server, and checks every n seconds whether there is something to download. I have implemented something like this, which also prevents timeout issues with large documents. Let me know if you're interested

A:

you should create pdf file from your servlet and stored at somewhere on server. You need to return file path where you stored on the server. And now from GWT you can prompt window to user to download file. Below is the example for downloading file from GWT:
Window.open(GWT.getHostPageBaseURL() + your return path from server, "", "");

