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




Я делал что-то подобное через пару лет. тому назад. Но в моем случае сервер и компьютер находятся в одной локальной сети. Ваш 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) {
}
}
Вот почему у вас есть апплеты. Но апплеты работают в изолированной программной среде безопасности. Однако, если апплету, работающему в веб-приложении, предоставлены нужные привилегии, он может открывать сокет, записывать в файлы, записывать в последовательный порт и т. д.
Не совсем так, потому что веб-страница, на которой находится апплет, должна открываться всегда. Фоновое автономное приложение, использующее веб-сервис, может выполнять эту работу.