请问各位前辈,能不能用Java实现对打印机的监视?要监视的内容有打印机当前状态,有几个打印任务,正在打印的任务有多少页。如能实现对打印池的监视就更好了!

解决方案 »

  1.   

    我也没有做过,关注,应该可以,雕用API咯
      

  2.   

    能不能提供些实现思想?像应该调用哪些API什么的?谢谢了!
      

  3.   

    一个小例子
    import javax.swing.*;
    import java.awt.print.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
    class PrinterWindow extends JFrame implements ActionListener,Printable   
    {   
        int m,n=3,p=1,i=1;    //m:总行数、n:每页打印的行数,p:总页数,i:打印的页码。
        PrinterJob  printerJob;
        JButton buttonPrint;
        JLabel label;
        JTextArea text; 
        CharArrayWriter out;
        CharArrayReader in;
        BufferedReader readIn; 
        Container con;
        PrinterWindow(String s) 
        {  
          super(s);        
          setSize(360,200);
          setLocation(120,120);
          setVisible(true);
          label=new JLabel("单击按钮开始打印第"+i+"页");
          buttonPrint=new JButton("打印第"+i+"页");
          buttonPrint.addActionListener(this);
          text=new JTextArea();
          con=getContentPane();
          JPanel panel=new JPanel(new GridLayout(1,2));
          panel.add(label);
          panel.add(buttonPrint);
          con.add(new JScrollPane(text),BorderLayout.CENTER);
          con.add(panel,BorderLayout.SOUTH);
          validate();
          setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        } 
       public void actionPerformed(ActionEvent e) 
        {
           try
           { 
               label.setText("正在打印第"+i+"页");
             
               if(i==1)
                 {  
                    out=new CharArrayWriter();
                    char message[]=text.getText().toCharArray();
                    out.write(message);               //将文本区中的内容写入内存。
                    m=text.getLineCount();
                    p=(m%n==0)?(m/n):(m/n+1);
                    in=new CharArrayReader(out.toCharArray());
                    readIn=new BufferedReader(in);
                 }
              if(i<=p)            
                { 
                  printerJob=PrinterJob.getPrinterJob();
                  PageFormat pageFormat=printerJob.pageDialog(printerJob.defaultPage());
                  text.setText(null);
                  String str=null;
    int number=1; 
    text.append("这是第"+i+"页\n\n");
                  while((number<=n)&&(str=readIn.readLine())!=null) //读入需要的行数。
                  {
                        text.append(str+"\n");
                        number++;
                  }
                 boolean boo=printerJob.printDialog() ;       //弹出打印对话框。
                 if(boo==true)
                   { 
                     printerJob.setPrintable(this,pageFormat);
                     printerJob.print();
                     i++;
                     buttonPrint.setText("打印下一页吗?");    
                   }
                }
               else
                {
                  label.setText("打印完毕,再打一份吗?");
                  i=1;
                  buttonPrint.setText("打印第"+i+"页");
                  in=new CharArrayReader(out.toCharArray());
                  readIn=new BufferedReader(in);
                  String str=null;
                  text.setText(null);
                  while((str=readIn.readLine())!=null) //文本区恢复原有文本。
                  {
                        text.append(str+"\n");
                  }
                  out.close();
                  readIn.close();
                  in.close();
                }
           }
          catch(Exception ee)
           {
           }
        } 
      public int  print(Graphics graphics,PageFormat pageFormat,int pageIndex)
        {
           if(pageIndex==0)                          //只打印一页。
            { 
              graphics.translate(80,80);
              text.paintAll(graphics);
              return Printable.PAGE_EXISTS;       //通知打印机已经准备好了该打印页。
            }
           else                               
            {
              return Printable.NO_SUCH_PAGE;          //打印作业布置结束。
            }
        }
    }
    public class Example
    {  
        public static void main(String args[])
        { 
          PrinterWindow win=new  PrinterWindow("窗口");
        }
    }
      

  4.   

    http://publib.boulder.ibm.com/iseries/v5r2/ic2989/index.htm?info/rzahh/javadoc/PrinterFileAttrs.html java 打印程序中打印机属性设置 
    使用如下方法可以获得PrintJob的实例用于控制打印操作:  
    Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop)  
    那么对于打印属性的设置可以通过对prop的属性设置来实现,打印属性包括:  
    awt.print.destination: 可以是"printer"或"file"  
    awt.print.printer: 打印机名  
    awt.print.fileName: 打印文件名  
    awt.print.numCopies: 打印份数  
    awt.print.options: 打印命令的打印选项  
    awt.print.orientation: 打印方向,可以是"portrait"或"landscape"  
    awt.print.paperSize: 纸张大小,可以是"letter","legal","executive"或"a4"  
      

  5.   

    我想用Java实现对打印机的监视,举个例子:我在word中打印一篇文档,用Java写的监视程序应该能监测到向打印机添加了打印任务,并能获取打印任务的各种属性。能不能实现?