importjava.awt.print.PrinterAbortException;
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.io.OutputStream;
importjavax.print.CancelablePrintJob;
importjavax.print.Doc;
importjavax.print.DocFlavor;
importjavax.print.DocPrintJob;
importjavax.print.PrintException;
importjavax.print.SimpleDoc;
importjavax.print.StreamPrintService;
importjavax.print.StreamPrintServiceFactory;
importjavax.print.event.PrintJobAdapter;
importjavax.print.event.PrintJobEvent;
publicclassMain{
publicstaticvoidmain(String[]argv)throwsException{
try{
OutputStreamfos=newBufferedOutputStream(newFileOutputStream("filename.ps"));
DocFlavorflavor=DocFlavor.INPUT_STREAM.GIF;
InputStreamis=newBufferedInputStream(newFileInputStream("filename.gif"));
StreamPrintServiceFactory[]factories=StreamPrintServiceFactory
.lookupStreamPrintServiceFactories(flavor,DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType());
StreamPrintServiceservice=factories[0].getPrintService(fos);
finalDocPrintJobjob=service.createPrintJob();
Docdoc=newSimpleDoc(is,flavor,null);
PrintJobWatcherpjDone=newPrintJobWatcher(job);
if(jobinstanceofCancelablePrintJob){
CancelablePrintJobcancelJob=(CancelablePrintJob)job;
try{
cancelJob.cancel();
}catch(PrintExceptione){
}
}
job.print(doc,null);
pjDone.waitForDone();
is.close();
}catch(PrintExceptione){
if(e.getCause()instanceofPrinterAbortException){
System.out.println("Printjobwascancelled");
}
}
}
}
classPrintJobWatcher{
booleandone=false;
PrintJobWatcher(DocPrintJobjob){
job.addPrintJobListener(newPrintJobAdapter(){
publicvoidprintJobCanceled(PrintJobEventpje){
synchronized(PrintJobWatcher.this){
done=true;
PrintJobWatcher.this.notify();
}
}
publicvoidprintJobCompleted(PrintJobEventpje){
synchronized(PrintJobWatcher.this){
done=true;
PrintJobWatcher.this.notify();
}
}
publicvoidprintJobFailed(PrintJobEventpje){
synchronized(PrintJobWatcher.this){
done=true;
PrintJobWatcher.this.notify();
}
}
publicvoidprintJobNoMoreEvents(PrintJobEventpje){
synchronized(PrintJobWatcher.this){
done=true;
PrintJobWatcher.this.notify();
}
}
});
}
publicsynchronizedvoidwaitForDone(){
try{
while(!done){
wait();
}
}catch(InterruptedExceptione){
}
}
}
用Java取消打印作业
最新推荐文章于 2023-05-26 07:44:35 发布