package javacodebook.server.pdf; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import com.lowagie.text.*; import com.lowagie.text.pdf.PdfWriter; /** * Ausgabe eines typischen Berichts als PDF-Datei. */ public class PdfServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("application/pdf"); ServletOutputStream out = response.getOutputStream(); //Ein PDF-Dokument wird erzeugt, Seitengröße sowie Ränder (l,r,o,u) //werden gesetzt Document document = new Document(PageSize.A4, 72, 35, 50, 50); try { //Es wird ein PDFWriter erzeugt, der auf Änderungen im PDF-Dokument //lauscht und diese direkt in den angegebenen OutputStream schreibt PdfWriter.getInstance(document, out); //Eine Fusszeile mit Seitenzahlen wird erzeugt. HeaderFooter footer = new HeaderFooter(new Phrase("Seite "), true); footer.setBorder(Rectangle.NO_BORDER); footer.setAlignment(Element.ALIGN_RIGHT); document.setFooter(footer); //Das Dokument wird geöffnet document.open(); //Eine Tabellarische Auflistung über mehrere Seiten hinweg wird //erzeugt und ausgegeben. Dabei wird jeweils eine festgelegte //Anzahl Zeilen pro Seite ausgegeben. int rows = 100; int pageLength = 24; Table table = writePageTop(document, pageLength); for(int i = 0; i < rows; i++) { String[] row = getTableRow(); table.addCell(row[0]); table.addCell(row[1]); table.addCell(row[2]); if((i+1) % pageLength == 0) { document.add(table); document.newPage(); table = writePageTop(document, pageLength); } } document.add(table); } catch(DocumentException e) { e.printStackTrace(System.out); } document.close(); out.close(); //Puffer leeren response.flushBuffer(); } private Table writePageTop(Document document, int pageLength) throws DocumentException { document.add(new Paragraph("Adressliste")); Table table = new Table(3, pageLength); table.setAlignment(Element.ALIGN_LEFT); table.setPadding(2); table.setBorderWidth(1); table.addCell("Name"); table.addCell("Adresse"); table.addCell("Telefon"); return table; } private String[] getTableRow() { return new String[] { javacodebook.core.stringtools.StringToolbox.randomWord(15), javacodebook.core.stringtools.StringToolbox.randomWord(12), "0" + new Random().nextInt(1000) + "/" + new Random().nextInt(1000000) }; } }