PdfExportExample.java

/*
 * PdfExportExample.java
 *
 * Copyright (C) 2004-05 Side of Software (SOS)
 * All rights reserved.
 *
 *    http://www.sideofsoftware.com
 *    info@sideofsoftware.com
 */

package sos.examples;

import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import java.awt.*;
import java.awt.print.*;
import java.io.*;
import sos.reports.*;

/**
 * A sample method that demonstrates how one may use iText,
 * available at http://www.lowagie.com/iText/,
 * to export a report as pdf. This method was tested against
 * version 1.02b.
 *
 * @author Side of Software
 */
public class PdfExportExample
{
  public static void export( JReportPane reportPane, OutputStream outputStream )
  {
    try
    {
      // create a new document
      Document document = new Document();

      // the document is in the PDF format
      PdfWriter writer = PdfWriter.getInstance( document, outputStream );
      
      // open the document for writing
      document.open();

      // use the default page format (alternative: can pass it as a parameter)
      PageFormat format = new PageFormat();
      int width = (int)format.getWidth();
      int height = (int)format.getHeight();
      
      // create the pageable object
      Pageable pagedReport = reportPane.getFittedPageable( format );

      DefaultFontMapper mapper = new DefaultFontMapper();

      // for each page
      for( int i = 0; i < pagedReport.getNumberOfPages(); i++ )
      {
        // subsequent pages must be created explicitly
        if( i > 0 )
          document.newPage();

        // use a graphics object that converts to pdf
        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate tp = cb.createTemplate( width, height );
        Graphics2D g2 = tp.createGraphics( width, height, mapper);
        
        // fetch the page to render
        Printable printable = pagedReport.getPrintable( i );
        try
        {
          // render the page using the pdf graphics
          printable.print( g2, format, 0 );
          g2.dispose(); // crucial!
          cb.addTemplate( tp, 0, 0 );
        }
        catch( PrinterException pe )
        {
          // handle the print errors
          pe.printStackTrace();
        }
      }
      
      // close the document
      document.close();
    }
    catch( DocumentException de )
    {
      // handle exception here
      de.printStackTrace();
    }
  }
}