Create a servlet to output the PDF stream to the client.
Map this servlet to some name that ends in ".pdf".
Set the Content-Disposition HTTP Header.
Set the Mime Type to "application/pdf".
As to iText: I have found it to be most convenient to read a template PDF file via getResourceAsStream("/WEB-INF/res/template.pdf") and then have iText just fill in the blanks.
This way, you can use your word-processor-du-jour to create a nice-looking PDF (template) without coding every image, line, text block ...