PrinterJob e Graphics2D imprimir mais de um Graphics2D

Ola, tenho um Graphics2D e com um PrinterJob consigo imprimir o mesmo, mas gostaria de poder imprimir mais de um Graphics2D, li algumas coisas sobre Book mas não consegui implementar, alguém teria alguma idéia de como posso trabalhar com o mesmo?

Segue código:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.util.Random;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Points extends JPanel {

	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		Graphics2D g2d = (Graphics2D) g;

		Dimension size = getSize();
		Insets insets = getInsets();

		int w = size.width - insets.left - insets.right;
		int h = size.height - insets.top - insets.bottom;

		Random r = new Random();

		for (int i = 0; i < 4000; i++) {
			int x = Math.abs(r.nextInt()) % w;
			int y = Math.abs(r.nextInt()) % h;

			if (i % 2 == 0)
				g2d.setColor(Color.blue);
			else
				g2d.setColor(Color.red);

			g2d.drawLine(x, y, x, y);
		}
	}
}
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class Imprimir implements Printable {
	private PageFormat pageFormat;
	private PrinterJob printerJob;
	private Component comp;
	boolean scaleWidthToFit = true;

	public Imprimir(Component comp) {
		pageFormat = new PageFormat();
		printerJob = PrinterJob.getPrinterJob();
		this.comp = comp;
		printDialog();
	}

	private void printDialog() {
		if (printerJob.printDialog()) {
			printerJob.setPrintable(this, pageFormat);
			try {
				printerJob.print();
			} catch (PrinterException e) {
				e.printStackTrace();
			}
		}
	}

	public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
			throws PrinterException {

		double scale = 1.0;
		Graphics2D graphics2D;

		graphics2D = (Graphics2D) graphics;
		comp.setSize((int) pageFormat.getImageableWidth(),
				(int) pageFormat.getImageableHeight());
		comp.validate();

		if ((scaleWidthToFit)
				&& (comp.getMinimumSize().getWidth() > pageFormat
						.getImageableWidth())) {
			scale = pageFormat.getImageableWidth()
					/ comp.getMinimumSize().getWidth();
			graphics2D.scale(scale, scale);
		}

		graphics2D.setClip((int) (pageFormat.getImageableX() / scale),
				(int) (pageFormat.getImageableY() / scale),
				(int) (pageFormat.getImageableWidth() / scale),
				(int) (pageFormat.getImageableHeight() / scale));

		if (pageIndex > 0) {
			return Printable.NO_SUCH_PAGE;
		}

		graphics2D.translate(graphics2D.getClipBounds().getX(), graphics2D
				.getClipBounds().getY());

		comp.paint(graphics2D);
		return Printable.PAGE_EXISTS;
	}
}
import java.awt.print.Printable;

public abstract class Main implements Printable {

	public static void main(String[] args) {
		new Imprimir(new Points());
	}
}