import java.awt.Font;
import java.awt.Graphics;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
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.standard.Copies;
import javax.print.attribute.standard.Sides;
import javax.swing.JOptionPane;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 打印机类
* @author 0404011
*
*/
public class Printer {
private static final Logger logger = LoggerFactory.getLogger(Printer.class);
private Printer() {
//null
}
/**
* 通过打印机打印指定字符串
* @param msg
* @param ifTruncation
*/
public static void print(String msg,boolean ifTruncation) {
// 构建打印请求属性集
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1)); //份数
pras.add(Sides.DUPLEX);//单双面
// 设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
// // 查找所有的可用的打印服务
// PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
// 定位默认的打印服务
// PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// PrintService[] printServices = PrinterJob.lookupPrintServices();
// for (int i = 0; i < printServices.length; i++) {
logger.info(printServices[i].getName());
//
// //"\\\\192.168.0.99\\研发办公室打印机"
// if (printServices[i].getName().contains("yanmade")) {//默认的打印机服务
// service = printServices[i];
// break;
// }
// }
// 显示打印对话框
// PrintService service =
// ServiceUI.printDialog(
// null, 200, 200, printServices, defaultService, flavor, pras);
logger.info("要打印的信息 " + msg );
if (service != null) {
try {
DocPrintJob job = service.createPrintJob(); // 创建打印作业
InputStream fis = new ByteArrayInputStream(msg.getBytes());//也可以是文件流
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
if(ifTruncation)
printer();
} catch (Exception e) {
String errorMsg = String.format("打印ng点位数据出错。error:%s", e);
JOptionPane.showMessageDialog(null, errorMsg, "ERROR:", JOptionPane.ERROR_MESSAGE);
logger.error("errorMeg:{},printData:{},error:{}",errorMsg,msg,e);
}
}
else {
JOptionPane.showMessageDialog(null, "打印ng点位数据失败。请先设置默认打印机,然后重启上位机程序。");
}
}
private static void printer() {
//Book 类提供文档的表示形式,该文档的页面可以使用不同的页面格式和页面 painter
Book book = new Book(); //要打印的文档
//PageFormat类描述要打印的页面大小和方向
PageFormat pf = new PageFormat(); //初始化一个页面打印对象
pf.setOrientation(PageFormat.PORTRAIT); //设置页面打印方向,从上往下,从左往右
//设置打印纸页面信息。通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper paper = new Paper();
paper.setSize(10,30000);// 纸张大小
paper.setImageableArea(1,1,30,30000);// A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72
pf.setPaper(paper);
Printable p = new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
graphics.setFont(new Font("宋体",Font.BOLD,3));
graphics.drawString("", 20, 5);
return PAGE_EXISTS;
}
};
book.append(p,pf);
book.append(p, pf, 2);
PrinterJob job = PrinterJob.getPrinterJob(); //获取打印服务对象
job.setPageable(book); //设置打印类
try {
job.print();
} catch (PrinterException e) {
String errorMsg = String.format("截断打印纸出错。error:%s", e);
JOptionPane.showMessageDialog(null, errorMsg, "ERROR:", JOptionPane.ERROR_MESSAGE);
logger.error("errorMeg:{},error:{}",errorMsg,e);
}
}
public static void main(String[] args) {
// print("barcode:13241241234123;\r\nerrorStr:[59-60>300kohm,55-30>300kohm,23-24>300kohm,17-18>300kohm,17-19>300kohm,17-46>300kohm]\r\n");
String str = "barcode:000s11207028403201_P01\r\n"
// +
// "errCode:OPEN\r\n"+
// "errStr:[59-60>300kohm,\r\n" +
// "\t7-2>300kohm,\r\n" +
// "\t25-26>300kohm,\r\n" +
// "\t33-34>300kohm]\r\n" +
// "\t\r\n" +
// "-------------------------------------\r\n" +
// "\r\n" +
// "barcode:000s11207028403201_P03\r\n" +
// "errCode:LEAK\r\n"+
// "errStr:[59-60>300kohm,\r\n" +
// "\t7-2>300kohm,\r\n" +
// "\t25-26>300kohm,\r\n" +
// "\t33-34>300kohm]"+
// "\t\r\n" +
// "-------------------------------------\r\n" +
// "\r\n" +
// "barcode:000s11207028403201_P05\r\n" +
// "errCode:SILVER\r\n"+
// "errStr:[59-60>300kohm,\r\n" +
// "\t7-2>300kohm,\r\n" +
// "\t25-26>300kohm,\r\n" +
// "\t33-34>300kohm]"
;
// print(str,false);
// print(str,false);
// print(str,false);
// print(str,false);
// print(str,true);
String[] arr = ";OPEN;uSHORT;SILVER".split(";");
String[] arr1 = ";[29-89>300kohm,29-90>300kohm];[23-2516ohm];[-F23_S24+F83_S84,-F25_S26+F85_S86,-F29_S30+F89_S90,-F31_S32+F89_S90,-F33_S34+F89_S90,-F35_S36+F89_S90]".split(";");
// System.out.println();
// System.out.println();
// String aa = "aa";
// System.out.println(aa);
// System.out.println("-----------------------------------------------------");
// System.out.println( aa+"\r\n\r\n\r\n"+aa );
System.out.println( ("测试板" + (1) + "下发测试命令,开始写入30401寄存器") );
System.out.println( Arrays.toString(Arrays.copyOf( new String [] {"a","b","c","d"},10)) );
// printer();
// System.out.println("\tfoo200Bbar");
// print("abcdasdfasdfsadf");
// System.out.println( DocFlavor.hostEncoding );
// DocFlavor [] arr = new DocFlavor [] {DocFlavor.STRING.TEXT_HTML,DocFlavor.STRING.TEXT_PLAIN
//
// ,DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST ,DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_8
// ,DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_16 ,DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_16BE
// ,DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_16LE ,DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII
// ,DocFlavor.INPUT_STREAM.TEXT_HTML_HOST ,DocFlavor.INPUT_STREAM.TEXT_HTML_UTF_8
// ,DocFlavor.INPUT_STREAM.TEXT_HTML_UTF_16 ,DocFlavor.INPUT_STREAM.TEXT_HTML_UTF_16BE
// ,DocFlavor.INPUT_STREAM.TEXT_HTML_UTF_16LE ,DocFlavor.INPUT_STREAM.TEXT_HTML_US_ASCII
// ,DocFlavor.INPUT_STREAM.PDF ,DocFlavor.INPUT_STREAM.POSTSCRIPT
// ,DocFlavor.INPUT_STREAM.PCL ,DocFlavor.INPUT_STREAM.GIF
// ,DocFlavor.INPUT_STREAM.JPEG ,DocFlavor.INPUT_STREAM.PNG
// ,DocFlavor.INPUT_STREAM.AUTOSENSE
,DocFlavor.INPUT_STREAM.
,DocFlavor.INPUT_STREAM. ,DocFlavor.INPUT_STREAM.
,DocFlavor.INPUT_STREAM. ,DocFlavor.INPUT_STREAM.
// };
// for (int i = 0; i < arr.length; i++) {
//
// PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
// aset.add(MediaSizeName.ISO_A4);
// PrintService[] pservices =
// PrintServiceLookup.lookupPrintServices(arr[i], null);
// System.out.println(arr[i].toString()+",,"+Arrays.toString(pservices));
//
// }
// DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_HTML_HOST;
// PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
// aset.add(MediaSizeName.ISO_A4);
// System.out.println(PrintServiceLookup.lookupDefaultPrintService().toString());
// PrintService[] pservices =
// PrintServiceLookup.lookupPrintServices(null,null);
//
// for (int i = 0; i < pservices.length; i++) {
// System.out.println( pservices[i].toString()+",,"+
// Arrays.toString(pservices[i].getSupportedDocFlavors()) );
// }
//
// System.out.println(Arrays.toString(pservices));
//
// DocFlavor[] tArr = PrintServiceLookup.lookupDefaultPrintService().getSupportedDocFlavors();
// for (int i = 0; i < tArr.length; i++) {
// System.out.println(tArr[i].toString());
// }
//
// System.out.println( Arrays.toString(PrintServiceLookup.lookupDefaultPrintService().getSupportedDocFlavors()) );
}
}