Print Book : PrinterJob « 2D Graphics « Java Tutorial






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);
  }
}








16.48.PrinterJob
16.48.1.Print Book
16.48.2.Printing settingPrinting setting