Java之触发打印机打印


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()) );
		
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值