Java中的远程打印模块

时间:2020-03-06 14:57:21  来源:igfitidea点击:

我正在开发一个基于Web的销售点界面的应用程序。

销售点PC(到目前为止,我尚不确定它是否将在Linux或者Windows上运行)必须添加有财务打印机,但是像任何Web应用程序一样,它是处理所有内容的服务器。服务器和PoS机器都在同一LAN上。

我必须通过使用串行端口的财务打印机实时发送销售数据,因此无法打印PDF甚至是网页。

有人告诉我,我可以有一个小应用程序来监听客户端上的Web服务,该应用程序进而与打印机而不是服务器或者浏览器进行通信,但是不知道如何进行操作。另外,我极有可能需要听取打印机的任何反馈(例如,由打印机生成的优惠券编号)并将其交还给服务器。

有任何想法吗?

解决方案

我做了几年类似的事情。前。但是在我的情况下,服务器和PC在同一局域网中。PoS是否在局域网内?如果是这样,我会向我们解释。

同时,如果我们涵盖了"小应用程序",则可以查看以下内容:

http://java.sun.com/j2se/1.4.2/docs/api/javax/print/PrintService.html

打印服务具有一种方法,可以发现正在其上运行的计算机中注册的打印机。因此,从应用程序服务器上收到消息后,我们只需执行与上面链接中显示的代码类似的操作即可:

摘自http://java.sun.com/j2se/1.4.2/docs/api/javax/print/PrintService.html

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestHashAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
             PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
   DocPrintJob pj = pservices[0].createPrintJob();
   // InputStreamDoc is an implementation of the Doc interface //
   Doc doc = new InputStreamDoc("test.ps", flavor);
   try {
         pj.print(doc, aset);
    } catch (PrintException e) { 
    }
}

这就是为什么有小程序。但是小程序在安全沙箱中运行。但是,如果为在Webapp中运行的applet赋予了正确的特权,则它可以打开套接字,写入文件,写入串行端口等。