Java如何调用TSC打印机进行打印详解
前言
最近项目中用到了打印机,最开始的完全不懂,现在弄好了,所以做了总结,该篇包括后台的调用打印(两种方式)跟前端的js的打印,但是只有IE现在支持打印,而且如果想远程连接打印机,二维码的生成和直接由打印机的命令进行操作,就要把修改浏览器的安全配置,下面再做详细的介绍
第一种后台打印:
使用javax中的PrintServiceLookup类进行打印,可以直接调用默认的打印机,也可以使用下列的方法进行筛选打印:
PrintServiceLookup.lookupMultiDocPrintServices(flavors,attributes);
可执行代码如下:
publicstaticvoidmain(String[]args){ FileInputStreamtextStream=null; try{ textStream=newFileInputStream("地址"); }catch(FileNotFoundExceptione){ e.printStackTrace(); } if(textStream!=null)//当打印内容不为空时 { //指定打印输出格式 DocFlavorflavor=DocFlavor.INPUT_STREAM.PDF;//SERVICE_FORMATTED.PRINTABLE //定位默认的打印服务 PrintServiceprintService=PrintServiceLookup.lookupDefaultPrintService(); //创建打印作业 DocPrintJobjob=printService.createPrintJob(); //设置打印属性 PrintRequestAttributeSetpras=newHashPrintRequestAttributeSet(); //设置纸张大小,也可以新建MediaSize类来自定义大小 pras.add(MediaSizeName.ISO_A4); DocAttributeSetdas=newHashDocAttributeSet(); //指定打印内容 Docdoc=newSimpleDoc(textStream,flavor,das); //不显示打印对话框,直接进行打印工作 try{ job.print(doc,pras);//进行每一页的具体打印操作 }catch(PrintExceptionpe){ pe.printStackTrace(); } }else{ //如果打印内容为空时,提示用户打印将取消 JOptionPane.showConfirmDialog(null, "Sorry,PrinterJobisEmpty,PrintCancelled!", "Empty",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE); } }
第二种后台打印:
注意:第二种跟第三种打印使用的是打印机的命令进行操作,这里需要jna的jar包,还有jdk要求是32位的,并且要要注册对应的dll,对应不同的系统要在不同的Windows下进行注册DLL,注册成功之后需要win+R,调用并运行 Regsvr32.exeTSCActiveX.dll指令
可执行代码如下:
publicclassJavaDemo{ publicinterfaceTscLibDllextendsLibrary{ TscLibDllINSTANCE=(TscLibDll)Native.loadLibrary("TSCLIB",TscLibDll.class); intabout(); intopenport(StringpirnterName); intcloseport(); intsendcommand(StringprinterCommand); intsetup(Stringwidth,Stringheight,Stringspeed,Stringdensity,Stringsensor,Stringvertical,Stringoffset); intdownloadpcx(Stringfilename,Stringimage_name); intbarcode(Stringx,Stringy,Stringtype,Stringheight,Stringreadable,Stringrotation,Stringnarrow,Stringwide,Stringcode); intprinterfont(Stringx,Stringy,Stringfonttype,Stringrotation,Stringxmul,Stringymul,Stringtext); intclearbuffer(); intprintlabel(Stringset,Stringcopy); intformfeed(); intnobackfeed(); intwindowsfont(intx,inty,intfontheight,introtation,intfontstyle,intfontunderline,StringszFaceName,Stringcontent); } publicstaticvoidmain(String[]args){ System.setProperty("jna.encoding","GBK");//支持中文 SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Stringtime=df.format(newDate()); StringqrCode="PD102011"; TscLibDll.INSTANCE.openport("TSCTTP-244Pro");//打印机型号 TscLibDll.INSTANCE.setup("70","40","5","8","0","2","0"); TscLibDll.INSTANCE.clearbuffer(); Stringcommand="QRCODE120,90,Q,8,A,0,M1,S7,\""+qrCode+"\"";//打印二维码的参数和内容 TscLibDll.INSTANCE.sendcommand(command);//传送指令 TscLibDll.INSTANCE.sendcommand("TEXT3007036000arial"+"办公耗材-标签纸"); //TscLibDll.INSTANCE.windowsfont(300,70,36,0,0,0,"arial","办公耗材-标签纸"); TscLibDll.INSTANCE.printlabel("1","1"); TscLibDll.INSTANCE.closeport(); } }
注意:这种打印方式,需要USB连接(ttp-244pro),如果想在线生成,远程连接,需要使用第三种方式
第三种JS打印
在使用JS进行打印的时候要主要浏览器的限制,目前只有IE浏览器进行支持,在进行打印时,控制台出现Automation服务器不能创建对象的,请调节浏览器的安全中的自定义级别中的ActiveX中相关的设置为启用,代码如下:
functionprintQRcode(){ varTSCObj=newActiveXObject("TSCActiveX.TSCLIB");//打印机使用的dll //TSCObj.ActiveXabout();//打印机信息 TSCObj.ActiveXopenport("TSCTTP-244Pro");//打印机名称,不能写错 //TSCObj.ActiveXdownloadpcx("D:/myeclipseproject/filesManager/trunk/doc/02-参考资料/03-二维码打印机/01-开发帮助/PHP调用范例/TSCActiveX.DLL-PHP-Example/","123.PCX"); TSCObj.ActiveXsetup("70","40","4","15","0","2.5","0");//打印机设置 //TSCObj.ActiveXsetup("标签宽度","标签高度","打印速度","打印浓度(0-15)","感应器类别字串型,0表示使用垂直間距感測器(gapsensor),1表示使用黑標感測器(blackmarksenso)","Gap/Blackmark垂直间距(mm)","Gap/Blackmark偏移距离(mm)"); //TSCObj.ActiveXformfeed(); //TSCObj.ActiveXnobackfeed(); TSCObj.ActiveXsendcommand("DIRECTION1");//设置标签方向,DIRECTION1左上角(x,y)={0,0};DIRECTION0右下角(x,y)={0,0}; TSCObj.ActiveXsendcommand("SETTEARON"); TSCObj.ActiveXclearbuffer(); //TSCObj.ActiveXsendcommand("PUTPCX0,0,\"123.PCX\""); /* 1、ActiveXprinterfont采用机器内置编码通常用来打英文。 2、ActiveXwindowsfont可以输出汉字,但是必须是系统中存在的字体。 TSCObj.ActiveXprinterfont("a","b","c","d","e","f","g"); a:字符串,文字X方向起始点,以点表示。 b:字符串,文字Y方向起始点,以点表示。 c:內建字型名称,共12种(1:8*12dots2:12*20dots3:16*24dots4:24*32dots5:32*48dotsTST24.BF2:繁體中文24*24TST16.BF2:繁體中文16*16TTT24.BF2:繁體中文24*24(電信碼)TSS24.BF2:簡體中文24*24TSS16.BF2:簡體中文16*16K:韓文24*24L:韓文16*16) d:字符串,旋转角度 e:字符串,X方向放大倍率1-8 f:字符串,Y方向放大倍率1-8 g:字符串,打印内容 ActiveXwindowsfont(a,b,c,d,e,f,g,h) 说明:使用WindowsTTF字体打印文字。 参数: a:整数类型,文字X方向起始点,以点表示。 b:整数类型,文字Y方向起始点,以点表示。 c:整数类型,字体高度,以点表示。 d:整数类型,旋转角度,逆时针方向旋转。0-旋转0°,90-旋转90°,180-旋转180°,270-旋转270°。 e:整数类型,字体外形。0:标签;1:斜体;2:粗体;3:粗斜体。 f:整数类型,下划线,0:无下划线;1:加下划线。 g:字符串类型,字体名称。如:Arial,TimesnewRoman。 h:字符串类型,打印文字内容。 */ //TSCObj.ActiveXwindowsfont(500,200,48,90,0,0,"Arial","\u7f16\u7801"); TSCObj.ActiveXwindowsfont(260,60,60,0,2,0,"Arial","XX专用"); //varcmd='QRCODE条码X方向起始点,条码Y方向起始点,纠错级别,二维码高度,A(A和M),旋转角度,M2(分为类型1和类型2),S1(s1-s8,默认s7),\"1231你好2421341325454353\"'; varcmd='QRCODE80,80,H,7,A,0,M2,S1,\"'+"123456789"+'\"'; TSCObj.ActiveXsendcommand(cmd); TSCObj.ActiveXwindowsfont(280,150,40,0,0,0,"Arial","123456789"); TSCObj.ActiveXwindowsfont(180,260,30,0,0,0,"Arial","XXXXXXXX"); TSCObj.ActiveXprintlabel("1","1");//(打印份数,每页打印张数) TSCObj.ActiveXclearbuffer();//清除 TSCObj.ActiveXcloseport();//关闭打印端口 }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。