import java.awt.Font;
import java.awt.Graphics;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.util.Enumeration;
import java.util.Vector;
public class MainClass {
public static void main(String args[]) throws Exception {
PrinterJob pj = PrinterJob.getPrinterJob();
Book book = new Book();
PageFormat defaultFormat = new PageFormat();
defaultFormat = pj.defaultPage(defaultFormat);
PageFormat landscapeFormat = new PageFormat();
landscapeFormat.setOrientation(PageFormat.LANDSCAPE);
PagePrinter[] page = new PagePrinter[2];
int pageWidth = (int) defaultFormat.getImageableWidth();
int pageHeight = (int) defaultFormat.getImageableHeight();
Font font = new Font("Helvetica", Font.BOLD, 18);
page[0] = new PagePrinter();
page[0].addPrintElement(new MyItem("AAA", font, 100, pageHeight / 2));
page[0].addPrintElement(new MyItem("line", 0, pageHeight, pageWidth, pageHeight));
page[1] = new PagePrinter();
page[1].addPrintElement(new MyItem("rectangle", 100, 100, pageWidth - 200, pageHeight - 200));
page[1].addPrintElement(new MyItem("oval", 120, 120, pageWidth - 240, pageHeight - 240));
book.append(page[0], defaultFormat);
book.append(page[1], landscapeFormat);
pj.setPageable(book);
pj.print();
}
}
class PagePrinter implements Printable {
Vector pageContents;
public PagePrinter() {
pageContents = new Vector();
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
Enumeration printElements = pageContents.elements();
while (printElements.hasMoreElements()) {
MyItem pe = (MyItem) printElements.nextElement();
pe.print(g);
}
return Printable.PAGE_EXISTS;
}
public void addPrintElement(MyItem pe) {
pageContents.addElement(pe);
}
}
class MyItem {
static final int TEXT = 1;
static final int GRAPHICS = 2;
int type;
String text;
Font font;
String shape;
int x, y, width, height;
public MyItem(String text, Font font, int x, int y) {
type = TEXT;
this.text = text;
this.font = font;
this.x = x;
this.y = y;
}
public MyItem(String shape, int x, int y, int width, int height) {
type = GRAPHICS;
this.shape = shape.toUpperCase();
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public void print(Graphics g) {
Font oldFont = g.getFont();
if (type == TEXT) {
g.setFont(font);
g.drawString(text, x, y);
} else if (type == GRAPHICS) {
if (shape.equals("LINE")) {
g.drawLine(x, y, width, height);
} else if (shape.equals("OVAL")) {
g.drawOval(x, y, width, height);
} else if (shape.equals("RECTANGLE")) {
g.drawRect(x, y, width, height);
}
}
g.setFont(oldFont);
}
}