package com.haidilao.hipos.pc.utils;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.SimpleDoc;
/**
* 用于网络打印机 ip模式
*
* @author Xue Chen
*
*/
public class HiPrinterJobUsb extends PrinterJob {
private String printerName;
private OutputStream out = null;
private void setPrinter(String printerName) throws Exception {
this.printerName = printerName;
}
public void close() {
try {
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("closed!");
}
}
private HiPrinterJobUsb() {
}
/**
*
* @throws Exception
* @author Xue Chen Time :2013年3月14日 下午12:47:27
*/
public boolean printHTML() throws Exception {
try {
out = getOutputStream();
//这里实现你自己的打印任务,将打印数据写到out里
super.printHTML(out);
printDoc();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
close();
}
}
private OutputStream getOutputStream() {
OutputStream buff = new java.io.ByteArrayOutputStream();
return buff;
}
/**
*实现打印
*/
private void printDoc() throws Exception {
PrintService[] ps = java.awt.print.PrinterJob.lookupPrintServices();
boolean foundUsbSet=false;
for (PrintService p : ps) {
if (printerName.equalsIgnoreCase(p.getName())) {
foundUsbSet=true;
DocPrintJob job = p.createPrintJob();
byte[] data = ((ByteArrayOutputStream) out).toByteArray();
InputStream in = new java.io.ByteArrayInputStream(data);
// 这个是最关键的地方,一般的pos打印机都支持 DocFlavor.INPUT_STREAM.AUTOSENSE
Doc doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
job.print(doc, null);
return;
}
}
if(foundUsbSet==false){
System.err.println("Can not find the printer "+this.printerName);
}
}
}