/* @(#) SimplePrint.java 1.1 2001/21/11
 * Copyright (c) 2001 Lawrence Rodrigues
 */
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.awt.print.*;

/** This class prints an image without the need for a GUI component. 
  * It doesn't use MediaTracker to load images. 
  */
public class SimplePrint implements Printable, ImageObserver {

   protected Image awtImage = null;
   protected boolean printFlag = true;
   protected int imageWidth, imageHeight;
   protected Point printLoc = new Point(0,0);
   
   public void setPrintLocation(Point d) {
       printLoc = d;
   }

   public Point getPrintLocation() {
      return printLoc;
   }

   public void loadAndPrint(String filename){
      awtImage = Toolkit.getDefaultToolkit().getImage(filename);
      imageWidth = awtImage.getWidth(this);
      imageHeight = awtImage.getHeight(this);
      if((imageWidth <0 )|| (imageHeight <0)) printFlag = false;
      else print();
   }

   protected void print() {
      PrinterJob pj = PrinterJob.getPrinterJob();
      pj.setPrintable(this);
      //Include this statement if you need the print dialog
      //pj.printDialog();
      try{
          pj.print();
      }catch(Exception e){System.out.println(e);}
   }


   public int print(Graphics g, PageFormat f, int pageIndex){
       if(pageIndex >= 1) return Printable.NO_SUCH_PAGE;
       Graphics2D g2d = (Graphics2D) g;
       g2d.translate(f.getImageableX(), f.getImageableY());
       if(awtImage != null){
          printImage(g2d, awtImage);
          return Printable.PAGE_EXISTS;
       } else  return Printable.NO_SUCH_PAGE;
    }

    public void printImage(Graphics2D g2d, Image image){
       if((image == null)|| (g2d == null)) return;
       int x = printLoc.x;
       int y = printLoc.y;
       int wid = imageWidth;
       int ht = imageHeight;
       g2d.drawImage(image,x,y,wid,ht, this);
    }

    public boolean imageUpdate(Image img,
                             int infoflags,
                             int x,
                             int y,
                             int width,
                             int height){

       if((infoflags & ImageObserver.ERROR) != 0){
          System.out.println("ERROR in image loading or drawing");
          return false;
       }

       if((infoflags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS))!= 0) {
          if(printFlag == false) {
             imageWidth = width;
             imageHeight = height;
             print();
             printFlag = true;
          }
         return false;
       }
       return true;
   }

   public static void  main(String[] args){
      SimplePrint sp = new SimplePrint();
      if(args.length <1) {
         System.out.println("Enter a valid image file name");
         System.exit(0);
      }
      sp.loadAndPrint(args[0]);
   }

}