/*
关于java打印功能的最简单实现的学习笔记
*/
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import javax.print.event.*;
import java.net.URL;
public class PrintDemo{
public static void main(String[] args){
//第一步:定位打印服务(打印机)
//定义打印机支持的文档类型
DocFlavor fr = DocFlavor.URL.GIF;
/*
创建DocFlavor实例需要两个参数(String),
一个是表示MIME类型,一个是表示类的名称
*/
//很多情况下,不一定要创建DocFlavor实例
PrintService[] allps = PrintServiceLookup.lookupPrintServices(null,null);
//检索所有的可用打印机服务
for(int i=0;i<allps.length;i++){
System.out.println(allps[i].getName());
}
//通常情况下只要获取默认的打印服务就ok了
PrintService defaultps = PrintServiceLookup.lookupDefaultPrintService();
System.out.println(defaultps.getName());
//定义属性(javax.print.attribute包)
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
//这里的属性不能为null,否则,IIlegalArgumentException
PrintService select = ServiceUI.printDialog(null,100,100,allps,defaultps,null,attrs);
//第二步:创建打印任务
DocPrintJob job = defaultps.createPrintJob();//?这里的services是调用哪个对象,需要进一步验证
//第三步:获取打印数据
try{
URL url = new URL("http://localhost:8080/demo/printtest.gif");
DocFlavor flavor = DocFlavor.URL.GIF;
SimpleDoc doc = new SimpleDoc(url,flavor,null);
//第四步:初始化打印
//javax.print.attribute.standard包中有很多有用的实现!
//attrs.add(new Copies(2));
attrs.add(OrientationRequested.LANDSCAPE);
job.print(doc,attrs);
//监控打印任务(可选)
job.addPrintJobListener(new PrintJobAdapter(){
public void printDataTransferCompleted(PrintJobEvent event){
System.out.println("数据传输成功!!");
}
public void printJobNoMoreEvents(PrintJobEvent event){
System.out.println("该接口中没有更多的方法可以让打印机调用!!");
}
public void printJobCanceled(PrintJobEvent event){
System.out.println("取消打印服务!!");
}
public void printJobCompleted(PrintJobEvent event){
System.out.println("打印任务完成!!");
}
public void printJobFailed(PrintJobEvent event){
System.out.println("打印任务失败!!");
}
public void printJobRequiresAttention(PrintJobEvent event){
System.out.println("可以恢复的错误,如打印机缺纸!!");
}
});
}catch(Exception e){
e.printStackTrace();
}
}
}
这篇博客详细介绍了如何在Java中实现打印功能,包括定位打印服务、创建打印任务、获取打印数据以及监控打印任务的各个步骤。示例代码中展示了如何设置打印机属性、创建Doc对象并使用SimpleDoc进行打印操作,同时提供了错误处理和打印事件监听器的实现。
2788

被折叠的 条评论
为什么被折叠?



