对于java的打印问题

  对于java的打印问题,各种书上谈的很少。我想主要可能是java的打印功能太弱了,没有什么可介绍的。最近,我因为工作的关系,用到了java的打印图像功能。不过因为缺少可参考的例子和教材,我只有查看jdk的API文档,并不很爽。下面就把我的程序给大家讲讲,顺便白话一下java的打印(是jdk1.2的)。java的打印类都在java.awt.print包下,主要有四个类和两个接口:PrinterJob、PageFormat、Paper、Book;Printable,Pageable。(详细的情况,请查看jdk的API文档,我只讲我程序中用到的部分)
  Interface包括Printable:主要是用来打印的接口,在打印的时候,它的print()方法PrinterJob:初始化
  打印操作,可以显示系统特定的打印对话框,例如windows的
  。PageFormat:描述可打印区。例如我的程序使用的几个方法
  public double getImageableX();
  公共双getImageableY();
  公共双getImageableWidth();
  公共双getImageableHeight();
  封装jinicup.printer;
  导入java.awt.*;
  导入java.awt.print.*;
  导入java.awt.event.*;
  导入javax.swing.JPanel;
  导入javax.swing.JFrame;
  导入javax.swing.ImageIcon;
  导入java.io.*;
  /************************************
  *打印机服务的实现
  ***********************************/
  公共类PrinterImpl扩展JPanel
  实现Printable{
  private Image图像;
  私有PrinterJob打印作业;
  私有双x,y,w,h;
  私有int imagew,imageh;
  PrinterImpl(){
  printJob=PrinterJob.getPrinterJob();
  printJob.setPrintable(this);
  printJob.printDialog();
  }
  public int print(Graphicsgraphics,PageFormat pageFormat,int pageIndex)throws PrinterException{
  System.out.println("pageIndex"+pageIndex);
  if(pageIndex>=1){
  return Printable.NO_SUCH_PAGE;}
  x
  =pageFormat.getImageableX();
  y=pageFormat.getImageableY();
  w=pageFormat.getImageableWidth();
  h=pageFormat.getImageableHeight();
  if(imagew>=imageh){
  h=w*imageh/imagew;
  }其他{
  w=h*imagew/imageh;
  System.out.println
  (x+""+y);
  System.out.println(w+""+h);
  绘制图形(图形);
  返回Printable.PAGE_EXISTS;
  }
  公共无效油漆(图形图形){
  drawGraphics(图形);
  }
  private voiddrawGraphics(图形图形){
  graphics.drawImage(图像,(int)x,(int)y,(int)w,(int)h,null);
  //Graphics.drawOval(10,10,100,50);
  }
  /************************************
  *开始打印
  * param byteArrayOfJPEGFile jpg文件的有效字节数组(可以直接来自相机)
  ***********************************/
  public void printByteArray(byte[]byteArrayOfJPEGFile){
  //Toolkit tool=Toolkit.getToolkit();
  //image=tool.createImage(byteArrayOfJPEGFile);
  图像=(new ImageIcon(byteArrayOfJPEGFile)).getImage();
  imagew=image.getWidth(null);
  imageh=image.getHeight(null);
  System.out.println(imagew+""+imageh);
  System.out.println("kkk");
  try{
  System.out.println("开始打印");
  printJob.print();
  System.out.println("打印已后台打印到打印机");
  }catch(Exception ex){
  System.out.println(ex);
  }
  返回;
  }
  /************************************
  *主要方法,仅用于文本目的
  * param args无参数使用
  **************************************/
  public static void main(String[]args){
  PrinterImpl pi=new PrinterImpl();
  尝试{
  FileInputStream fs=new FileInputStream("e:/test.jpg");
  System.out.println(fs.available());
  byte[]数组=new byte[fs.available()];
  fs.read(数组);
  pi.printByteArray(数组);
  }catch(Exception e){
  System.out.println(e);
  }}
  }