package com.egt.model.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
public class PrintDemo {
public static void main(String[] args) {
File file = new File("f:/test.png"); //获取选择的文件
//构建打印请求属性集
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
//设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
//定位默认的打印服务
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//构造待打印的文件流
InputStream fis = null;
if(defaultService != null){
try {
DocPrintJob job = defaultService.createPrintJob(); //创建打印作业
fis = new FileInputStream(file);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das); //指定打印内容
job.print(doc, pras);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
以上代码实现的功能是不弹设置框直接打印,但是有缺陷,因本地打印机问题,只支持gif、jpeg、png的打印,以下代码可以检测本地打印机支持Java打印类型
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
System.out.println(service + " supports :");
DocFlavor[] flavors = service.getSupportedDocFlavors();
for (int i = 0; i < flavors.length; i++) {
System.out.println("\t" + flavors[i]);
}
如果哪位大神有直接打印HTML或者PDF的方法的话,欢迎交流!