Java Tutorial/2D Graphics/PrinterJob

Материал из Java эксперт
Перейти к: навигация, поиск

Print Book

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





Printing setting

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PrinterSettingUpDialogPrint extends JFrame {
  DrawingCanvas canvas= new DrawingCanvas();
  JButton setUpButton= new JButton("Page Setup"), printButton= new JButton("Print"), cancelButton= new JButton("Cancel");
  PrinterJob printJob = PrinterJob.getPrinterJob();
  PageFormat pageFormat = printJob.defaultPage();
  PrintableCanvas printableCanvas;
  public PrinterSettingUpDialogPrint() {
    getContentPane().add(canvas);
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(1, 3));
    setUpButton.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent a){
        setup();
      }
    });
    panel.add(setUpButton);
    printButton.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent a){
        print();
      }
    });
    panel.add(printButton);
    cancelButton.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent a){
        cancel();
      }
    });
    panel.add(cancelButton);
    getContentPane().add(BorderLayout.SOUTH, panel);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 275);
    setVisible(true);
  }
  private void setup() {
    pageFormat = printJob.pageDialog(pageFormat);
    printJob.validatePage(pageFormat);
  }
  private void print() {
    printableCanvas = new PrintableCanvas(pageFormat);
    printJob.setPrintable(printableCanvas);
    boolean ok = printJob.printDialog();
    if (ok) {
      try {
        printJob.print();
      } catch (Exception pe) {
        System.out.println("Printing Exception Occured!");
        pe.printStackTrace();
      }
    }
  }
  private void cancel() {
    printJob.cancel();
  }
  public static void main(String arg[]) {
    new PrinterSettingUpDialogPrint();
  }
}
class DrawingCanvas extends JPanel {
  Font font = new Font("Dialog", Font.BOLD, 50);
  FontMetrics fontMetrics;
  int w = 400, h = 275;
  DrawingCanvas() {
    setBackground(Color.white);
    setSize(400, 275);
    fontMetrics = getFontMetrics(font);
  }
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2D = (Graphics2D) g;
    paintContent(g2D, w, h);
  }
  public void paintContent(Graphics2D g2D, int w, int h) {
    g2D.setFont(font);
    g2D.drawString("Java 2D", (float) (0.5 * (w - fontMetrics
        .stringWidth("Java 2D"))), (float) (0.5 * h - 1.25 * fontMetrics
        .getHeight()));
  }
}
class PrintableCanvas implements Printable {
  DrawingCanvas canvas;
  PageFormat pageFormat;
  public PrintableCanvas(PageFormat pf) {
    pageFormat = pf;
  }
  public int print(Graphics g, PageFormat pageFormat, int pageIndex)
      throws PrinterException {
    if (pageIndex >= 1) {
      return Printable.NO_SUCH_PAGE;
    }
    Graphics2D g2D = (Graphics2D) g;
    canvas = new DrawingCanvas();
    canvas.paintContent(g2D, (int) pageFormat.getImageableWidth(),
        (int) pageFormat.getImageableHeight());
    return Printable.PAGE_EXISTS;
  }
}