/*********************
 *
 * Demo of generation of Multi-page PDF documents 
 * from large AWT drawings.
 *
 * Author: Julio Lerm (jcplerm@ameritech.net)
 *
 * Date: 12/02/2002
 *
 */

import java.awt.Rectangle;
import java.awt.Graphics2D;
import java.awt.Color;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.io.IOException;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.dom.GenericDOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DOMImplementation;
import org.apache.fop.svg.*;
import java.awt.*;
import org.apache.batik.ext.awt.g2d.*;

public class TestPDFGen {

    public void paintLargeGraph(Graphics2D g2d) {
        g2d.setColor(Color.black);

	g2d.setFont( new Font(
					"Arial",
					Font.PLAIN,
					150
					) );

	g2d.drawString("JLERM",700,400);
	g2d.drawRect(10,10,1500,1070);
	g2d.drawRect(100,100,100,100);
	g2d.drawRect(600,600,400,200);
	g2d.drawLine(200,200,600,600);

	g2d.drawLine(1000,700,1400,700);
	g2d.drawRect(600,600,400,200);
	g2d.drawRect(1400,600,100,200);    
    }


    public static void main(String [] args) throws IOException {

	// Initialize objects

	MultipagePDFDocumentGraphics2D PDFGenerator1=null;
	try {
	        // Create an instance of the SVG Generator
        	PDFGenerator1 = new MultipagePDFDocumentGraphics2D(true,System.out,800,1100);
	}
	catch (Exception e) {
		System.out.println("new MultipagePDFDocumentGraphics2D failed: " + e.getMessage());
	}
	PDFGenerator1.setGraphicContext(new GraphicContext());
	PDFGenerator1.create();
       	TestPDFGen test = new TestPDFGen();

	// Backup whatever is created for the first
	// page before anything is written to it
	String pagePrefix = PDFGenerator1.getString();

	// Adjust drawing area for first page
	PDFGenerator1.translate(0,0);
	PDFGenerator1.setClip(new Rectangle(0,0,800,1100));

	// Paint first page
        test.paintLargeGraph(PDFGenerator1);

	// Generate PDF for first page
	PDFGenerator1.makePage();

	// Reset PDF generator for new page, 
	// adding the content previously
	// backed up (pagePrefix)
	PDFGenerator1.resetCurrentStream();
	PDFGenerator1.add2Stream(pagePrefix);

	//  Adjust drawing area for second page
	PDFGenerator1.translate(-800,0);
	PDFGenerator1.setClip(new Rectangle(800,0,1600,1100));

	// Paint the second page
        test.paintLargeGraph(PDFGenerator1);

	// Finish PDF document
	PDFGenerator1.finish();
    }
}