Модуль удаленной печати на Java

Я работаю над приложением, которое будет иметь веб-интерфейс для точек продаж.

ПК в торговой точке (на данный момент я не уверен, будет ли он работать на Linux или Windows) должен иметь подключенный к нему фискальный принтер, но, как и любое веб-приложение, это сервер, который обрабатывает все данные. И сервер, и PoS-машины находятся в одной локальной сети.

Я должен отправлять данные о продажах в режиме реального времени и через фискальный принтер, который использует последовательный порт, поэтому печать PDF или даже веб-страницы не вариант.

Мне сказали, что у меня может быть небольшое приложение, прослушивающее веб-службы на клиенте, которое, в свою очередь, общается с принтером, а не с сервером или браузером, но я не знаю, как это сделать. Кроме того, мне, скорее всего, потребуется выслушать любую обратную связь с принтером (например, номер купона, который генерируется принтером) и передать его обратно на сервер.

Любые идеи?


person schonarth    schedule 01.10.2008    source источник


Ответы (2)


Я делал что-то подобное пару лет. тому назад. Но в моем случае сервер и ПК находятся в одной локальной сети. Ваш 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) { 
    }
}
person OscarRyz    schedule 01.10.2008

Вот почему у вас есть апплеты. Но апплеты работают в изолированной программной среде безопасности. Однако, если апплету, работающему в веб-приложении, предоставлены правильные привилегии, он может открывать сокет, записывать в файлы, записывать в последовательный порт и т. д.

person anjanb    schedule 01.10.2008
comment
Не совсем, потому что веб-страница, на которой живет апплет, должна быть открыта всегда. Фоновое автономное приложение, использующее веб-сервис, может выполнять эту работу. - person OscarRyz; 01.10.2008