• 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()) );
    		
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
  • 相关阅读:
    七夕给女朋友准备的小惊喜网站制作(html+css+js)
    class.forName() 里面都发生了啥?一文搞懂 Spi 机制
    SSM流浪动物救助系统毕业设计-附源码191631
    快手指纹之十八罗汉
    【Oracle】多表联合查询超时问题排查
    C++模拟实现vector
    搭建私人图床结合内网穿透实现公网访问,让您的摄影作品连接世界
    CSS 常见属性设置
    小程序day04
    电脑重做系统---win10
  • 原文地址:https://blog.csdn.net/qq_43528792/article/details/134033746