/**
* Licensed under the Artistic License; you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://displaytag.sourceforge.net/license.html
*
* THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.displaytag.export;
import java.io.IOException;
import java.io.OutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPageEventHelper;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
/**
* PDF exporter using iText.
* @author Jorge L. Barroso
* @version $Revision$ ($Author$)
*/
public class DefaultPdfExportView extends DefaultItextExportView
{
/**
* @see org.displaytag.export.BaseExportView#getMimeType()
* @return "application/pdf"
*/
public String getMimeType()
{
return "application/pdf"; //$NON-NLS-1$
}
/**
* Initializes the PDF writer this export view uses to write the table document.
* @param document The iText document to be written.
* @param out The output stream to which the document is written.
* @throws DocumentException If something goes wrong during initialization.
*/
protected void initItextWriter(Document document, OutputStream out) throws DocumentException
{
PdfWriter.getInstance(document, out).setPageEvent(new PageNumber());
}
/**
* Prints a page number at the bottom of each page. Based on
* http://itextdocs.lowagie.com/examples/com/lowagie/examples/directcontent/pageevents/PageNumbersWatermark.java
* @author Jorge L. Barroso
* @version $Revision$ ($Author$)
*/
private static class PageNumber extends PdfPageEventHelper
{
/**
* @see com.lowagie.text.pdf.PdfPageEventHelper#onEndPage(com.lowagie.text.pdf.PdfWriter,
* com.lowagie.text.Document)
*/
public void onEndPage(PdfWriter writer, Document document)
{
/** The headertable. */
PdfPTable table = new PdfPTable(2);
/** A template that will hold the total number of pages. */
PdfTemplate tpl = writer.getDirectContent().createTemplate(100, 100);
/** The font that will be used. */
BaseFont helv = null;
try
{
helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false);
}
catch (DocumentException e)
{
}
catch (IOException e)
{
}
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
// write the headertable
table.setTotalWidth(document.right() - document.left());
table.writeSelectedRows(0, -1, document.left(), document.getPageSize().height() - 50, cb);
// compose the footer
String text = "Page " + writer.getPageNumber();
float textSize = helv.getWidthPoint(text, 12);
float textBase = document.bottom() - 20;
cb.beginText();
cb.setFontAndSize(helv, 12);
float adjust = helv.getWidthPoint("0", 12);
cb.setTextMatrix(document.right() - textSize - adjust, textBase);
cb.showText(text);
cb.endText();
cb.addTemplate(tpl, document.right() - adjust, textBase);
cb.saveState();
}
}
}