you are unlikely to get the pdf back from an RPC in any useful form. The RPC mechanism is expecting a particular format, and manually mucking about with the response object is going to upset that expectation. Even if you did manage to get the bytes back via the RPC's XHR, what would you plan on doing with them?
basically, what you want to do is either use a form post to supply the generation parameters and target a new window where the receiving servlet could send the generated PDF, or use a 2 request system where you send your RPC with the parameters and cause the PDF to be generated, then a second request (new Window using a get request) to fetch the generated PDF. The 2 request method allows you to report any errors to the user via the Response or by throwing an exception. -jason On Apr 6, 2009, at 12:28 PM, Superman859 wrote: > > I want to use iText to generate a PDF file. Ideally, I can > incorporate a generatePDF() method into my interface and my Servlet > that is involved in GWT-RPC. When that method is called, I want it to > generate a PDF file and either display it to the user in a new window > or present a save dialog box or anything - something that leaves the > GWT app as it was and allows the user to view / save / print the PDF. > > Generating the PDF is not a problem. I can generate one and write it > to a file on the server without any trouble. However, I am having > trouble presenting the user with it (I would rather NOT write them to > files on the server, and just let the user save on their own machine > if they wish to do so). > > Here is code for a sample "Hello World" > > public boolean generatePDF(ReportDO report, int id) { > System.out.println("hello world to follow"); > // get request > //HttpServletRequest request = getThreadLocalRequest(); > > // get response > HttpServletResponse response = getThreadLocalResponse(); > > Document document = new Document(); > > // generate test PDF > try { > > ByteArrayOutputStream baos = new ByteArrayOutputStream(); > //PdfWriter.getInstance(document, new FileOutputStream > ("HelloWorld.pdf")); > PdfWriter.getInstance(document, baos); > document.open(); > document.add(new Paragraph("hello world")); > document.close(); > > // setting some response headers > response.setHeader("Expires", "0"); > response.setHeader("Cache-Control", "must-revalidate, > post-check=0, > pre-check=0"); > response.setHeader("Pragma", "public"); > > response.setContentType("application/pdf"); > > // content length is needed for MSIE > response.setContentLength(baos.size()); > > // write ByteArrayOutputStream to ServletOutputStream > ServletOutputStream out = response.getOutputStream(); > baos.writeTo(out); > out.flush(); > } > catch (Exception e) { > System.out.println("generatePDF:Exception " + > e.getMessage()); > } > > return true; > } > > This code is in my GWT-RPC Servlet, which extends > RemoteServiceServlet. Note if I use the currently commented line of > FileOutputStream("HelloWorld.pdf") it will generate the file and work > fine. However, if I try to send it to the browser, nothing appears, > and the AsyncCallback for GWT-RPC calls the onFailure() method. > > Does anyone know where the problem might be? I'm assuming it has to > do with response. RemoteServiceServlet has a method > getThreadLocalResponse() which returns HttpServletResponse, which is > what the iText examples use. I know very little about these response > objects. But it seems that somehow there is some interference between > that and GWT-RPC. The AsyncCallback is a success when writing to > file. However, when attempting to send to browser, it fails. > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---