1 /**
2 * Licensed under the Artistic License; you may not use this file
3 * except in compliance with the License.
4 * You may obtain a copy of the License at
5 *
6 * http://displaytag.sourceforge.net/license.html
7 *
8 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
9 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11 */
12 package org.displaytag.export;
13
14 import java.io.IOException;
15 import java.io.OutputStream;
16
17 import com.lowagie.text.Document;
18 import com.lowagie.text.DocumentException;
19 import com.lowagie.text.pdf.BaseFont;
20 import com.lowagie.text.pdf.PdfContentByte;
21 import com.lowagie.text.pdf.PdfPTable;
22 import com.lowagie.text.pdf.PdfPageEventHelper;
23 import com.lowagie.text.pdf.PdfTemplate;
24 import com.lowagie.text.pdf.PdfWriter;
25
26
27 /**
28 * PDF exporter using iText.
29 * @author Jorge L. Barroso
30 * @version $Revision$ ($Author$)
31 */
32 public class DefaultPdfExportView extends DefaultItextExportView
33 {
34
35 /**
36 * @see org.displaytag.export.BaseExportView#getMimeType()
37 * @return "application/pdf"
38 */
39 public String getMimeType()
40 {
41 return "application/pdf"; //$NON-NLS-1$
42 }
43
44 /**
45 * Initializes the PDF writer this export view uses to write the table document.
46 * @param document The iText document to be written.
47 * @param out The output stream to which the document is written.
48 * @throws DocumentException If something goes wrong during initialization.
49 */
50 protected void initItextWriter(Document document, OutputStream out) throws DocumentException
51 {
52 PdfWriter.getInstance(document, out).setPageEvent(new PageNumber());
53 }
54
55 /**
56 * Prints a page number at the bottom of each page. Based on
57 * http://itextdocs.lowagie.com/examples/com/lowagie/examples/directcontent/pageevents/PageNumbersWatermark.java
58 * @author Jorge L. Barroso
59 * @version $Revision$ ($Author$)
60 */
61 private static class PageNumber extends PdfPageEventHelper
62 {
63
64 /**
65 * @see com.lowagie.text.pdf.PdfPageEventHelper#onEndPage(com.lowagie.text.pdf.PdfWriter,
66 * com.lowagie.text.Document)
67 */
68 public void onEndPage(PdfWriter writer, Document document)
69 {
70 /** The headertable. */
71 PdfPTable table = new PdfPTable(2);
72 /** A template that will hold the total number of pages. */
73 PdfTemplate tpl = writer.getDirectContent().createTemplate(100, 100);
74 /** The font that will be used. */
75 BaseFont helv = null;
76 try
77 {
78 helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false);
79 }
80 catch (DocumentException e)
81 {
82 }
83 catch (IOException e)
84 {
85 }
86 PdfContentByte cb = writer.getDirectContent();
87 cb.saveState();
88 // write the headertable
89 table.setTotalWidth(document.right() - document.left());
90 table.writeSelectedRows(0, -1, document.left(), document.getPageSize().height() - 50, cb);
91 // compose the footer
92 String text = "Page " + writer.getPageNumber();
93 float textSize = helv.getWidthPoint(text, 12);
94 float textBase = document.bottom() - 20;
95 cb.beginText();
96 cb.setFontAndSize(helv, 12);
97 float adjust = helv.getWidthPoint("0", 12);
98 cb.setTextMatrix(document.right() - textSize - adjust, textBase);
99 cb.showText(text);
100 cb.endText();
101 cb.addTemplate(tpl, document.right() - adjust, textBase);
102 cb.saveState();
103 }
104 }
105 }