Java: How can I generate a PDF file from a JSP JSF page?
Asked Answered
R

3

7

I need to generate a PDF from a JSP JSF page. I have searched the net, but I didn't found any examples of how should I do this. I need to transform the whole page, or maybe only the charts that I have on that page.

P.S. I'm also using IceFaces.

Repulsive answered 27/12, 2009 at 13:6 Comment(0)
D
7

The easiest way is probably to capture the HTML using a Filter and convert that to PDF using a suitable API, then return the application/pdf data from the Filter. The IceFaces partial-submit support can probably be used to capture a subset of the component tree output, but you'll probably have to study the details of the IceFaces HTTP requests to figure out how to leverage that.

Dukedom answered 27/12, 2009 at 14:24 Comment(1)
That's indeed the way, but it's not as straightforward as it look like. For more detail: #1963658Rubin
S
2

As far as I know this isn't directly possible. You can use Jasper Reports to generate a pdf on the server side. Or, you can use PrintPDF which is a firefox plugin to create one from the web browser.

Scald answered 27/12, 2009 at 13:42 Comment(2)
+1 for jasper reports, and if you are using jfree chart for you charts, jasper reports will support them, and you can use the same charts in your report/pdf.Officinal
jasper uses iText to generate the PDF - unless there is another reason to use Jasper, it would be better to skip straight to iTextAboriginal
C
2

You will probably need the following:

  1. Capture the (X)HTML output of your page. This can be done via the following code in a servlet of yours :

    InputStream is = new URL("http://localhost/foo/page.jsf").openStream();
    
  2. Transform the captured content to pdf. See the Flying Saucer renderer (and additionally - this thread)

  3. "Send" the generated pdf. That is, simply write (print) your pdf to the response.getOutputStream(), and set a Content-Type header - response.setContentType("application/pdf")

Cogitate answered 27/12, 2009 at 17:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.