//获得默认打印服务
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
if(service == null){
System.out.println("No Print Service");
return;
}
DocPrintJob job = service.createPrintJob();

        addPrintJobListener(job); //增加监听打印机状态
StringBuffer buffer = new StringBuffer();
    
byte[] printData = buffer.toString().getBytes();
System.out.println(buffer.toString());

DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(printData, flavor, null);
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(new Copies(copies));
try{
  job.print(doc, attrs);
}catch(Exception ex){
  ex.printStackTrace();
}       public void addPrintJobListener(DocPrintJob job) {
job.addPrintJobListener(new PrintJobAdapter() {
public void printDataTransferCompleted(PrintJobEvent pje) {
System.out.println("数据已成功传输打印机");
} public void printJobCompleted(PrintJobEvent pje) {
System.out.println("通知客户端,作业成功完成");
} public void printJobFailed(PrintJobEvent pje) {
System.out.println("通知客户端无法完成作业,必须重新提交");
} public void printJobCanceled(PrintJobEvent pje) {
System.out.println("作业已被用户或者程序取消");
} public void printJobNoMoreEvents(PrintJobEvent pje) {
System.out.println("通知客户端,不需要再提供事件");
} public void printJobRequiresAttention(PrintJobEvent pje) {
System.out.println("通知客户端,缺纸...");
}
});

       以上程式是打印片断,执行时打印任务监听事件只执行了printDataTransferCompleted(..)
       与printJobNoMoreEvents(..).待任务打印完成后,并没有执行printJobCompleted(..),
       是我的写法有问题,还是?请各位帮忙,谢谢
         

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【mgj216】截止到2008-08-01 11:00:55的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=mgj216
      

  2.   

    http://java.sun.com/j2se/1.4.2/docs/api/javax/print/event/PrintJobAdapter.html#printJobNoMoreEvents(javax.print.event.PrintJobEvent)自己看文档,讲的很详细了
      

  3.   

    palm_civet,您好!
    PrintJobAdapter API我之前有看过,
    但我在实作几个PrintJobAdapter()几个method后,
    执行时打印任务监听事件只执行了printDataTransferCompleted(..) -->数据传送到打印服务
    与printJobNoMoreEvents(..).待任务打印完成后,没有去执行printJobCompleted(..)是不是因为任务已经丢给打印机,程式也结束了,打印机没有办法反馈给client端.
    所以,我就加入了Thread.wait()来进行等待,看打印机完成任务后,是否去执行printJobCompleted(..)
    好像还是不行.
    麻烦palm_civet再看一下,非常感谢!!
      

  4.   

    我网上查了一下,有人碰到过这样的问题,原文:printJobCompleted is specified to mean that the printer has reported
    that it has really printed (to media) the entire job.Someone might implement a service which does that but JRE doesn't
    track the job after its sent to the system spooler, so can't report that.If "No more events" is received without receiving any error condition
    that's as good as it gets in this implementation.原文网址:
    http://www.mail-archive.com/[email protected]/msg02709.html
    http://www.mail-archive.com/[email protected]/msg02710.html
      

  5.   

    Someone might implement a service which does that but JRE doesn't 
    track the job after its sent to the system spooler, so can't report that. 
    If "No more events" is received without receiving any error condition 
    that's as good as it gets in this implementation.
    很遺憾,我已測試No more events 執行,不能說明已列印任務
    還是非常感謝palm_civet的關注.
      

  6.   

    你好 不知道是否有人解决了这个问题,好像PrintJobAdapter无法监听到是否成功打印,如果监听不到,是否有人能否提供其他的解决方案呢!msn:[email protected]  欢迎一起探讨!本人还没研究出来  哈哈