Можно ли упростить взаимодействие с устройством JavaPOS с помощью PHP POS?

У нас есть POS, написанный на PHP, который должен взаимодействовать с POS-принтером. Принтер поддерживает JavaPOS. Состояние PHP POS заключается в том, что он генерирует счет и ожидает, пока пользователь выберет принтер.

Теперь проблема в том, что принтер JavaPOS не отображается. Я могу взаимодействовать с использованием тестового Java-кода, в котором есть необходимые драйверы и jpos.xml. Я хочу «установить» это.

Насколько я понимаю, последние четыре дня я просматривал руководства по JavaPOS от разных производителей [EPSON, Starmicronics, Diebold Nixdorfag], это невозможно. JavaPOS предназначен для POS-систем, написанных на Java [JavaFX to Spring].

Но мне очень странно в это верить. Я считаю, что этого не должно быть, потому что, если это правда, POS, написанному не на Java или .Net, будет очень сложно взаимодействовать с множеством POS-устройства и терминалы там.

Следовательно, возможно ли взаимодействовать с не Java и не .Net POS для отправки команды печати на устройство JavaPOS?

Обратите внимание, что простая установка устройства и отправка команды печати не решают проблему. Скажем, если я хочу добавить к квитанции логотип вместе с динамическими данными в нижнем колонтитуле квитанции, для .Net потребуется код Java, чтобы сделать ее «богатой». Теперь, где именно находится этот Java-код? Это какое-то виртуальное устройство, которое работает в фоновом режиме и притворяется принтером и отображается в диалоговом окне печати, скажем, в PHP POS?

Пример кода Java, написанного для взаимодействия с JavaPOS, с файлом jpos.xml в качестве ссылки.

public static void main(String[] args) {
    File f = new File(PrintFTest.class.getClassLoader().getResource("jpos.xml").getPath());

    System.setProperty(JposPropertiesConst.JPOS_POPULATOR_FILE_PROP_NAME, f.getAbsolutePath());
    //System.getProperties().list(System.out);
    FiscalPrinter fiscalPrinter = new FiscalPrinter();

    // Get Access to it
    try {
        fiscalPrinter.open("printf");
        fiscalPrinter.claim(1000);
        fiscalPrinter.setDeviceEnabled(true);
    } catch (JposException e) {
        System.out.println("Exception at Access");
        e.printStackTrace();
    }

    // Print 
    try {
        fiscalPrinter.resetPrinter();
        fiscalPrinter.beginFiscalReceipt(true);
        fiscalPrinter.printRecItem("Salame", 40000, 0, 0, 0, "");
        fiscalPrinter.printRecTotal(40000, 40000, "CONTANTI");
        fiscalPrinter.endFiscalReceipt(false);
    } catch (JposException e) {
        System.out.println("Exception at Print");
    }

    try {
        System.out.println("1FP - Fiscal Printer disabling");
        fiscalPrinter.setDeviceEnabled(false);
        System.out.println("2FP - Fiscal Printer releasing");
        fiscalPrinter.release();
        System.out.println("2FP - Fiscal Printer closing");
        fiscalPrinter.close();
    } catch (JposException e) {
        System.out.println("Exception at Close");
    }

}

}


person devyJava    schedule 08.01.2019    source источник


Ответы (1)


Он должен содержать метод установки/настройки/конфигурации в JavaPOS, предоставляемый каждым поставщиком принтера, и его руководство пользователя.

Пожалуйста, установите и настройте оборудование и программное обеспечение соответствующим образом.

Однако в целом принтеры JavaPOS редко признаются стандартными принтерными устройствами для соответствующих операционных систем.

Например, есть такая статья.
Начало разработки Java POS
Рабочая группа JavaPOS

Далее рекомендуется использовать эти программы для работы и проверки принтера только в среде Java.
emigonza /POStest
ntsggr/JavaPOS-POStest-2

Существует несколько способов использования Java из PHP следующим образом.
Интеграция PHP/Java
Использование мостов PHP-Java с Сервер WebLogic
Что такое мост PHP/Java?
Как это работает
Java Bridge
Как вызвать пользовательские методы Java из PHP?

Нет проблемы, если ее можно решить вышеуказанным методом, но я рекомендую следующий метод.

  • Объедините программу Java и JavaPOS, чтобы создать программу, работающую автономно.
  • Программа предоставляет функции, аналогичные блокам обработки POS, такие как «печать чека».
  • Эта программа взаимодействует с POS PHP простым и легким способом, таким как пустой сокет TCP/IP, так что выдача запроса, уведомление о завершении или подтверждение завершения могут выполняться асинхронно.

Дополнительно:

Ниже приведен пример POS-приложения, которое полностью создано на Java.
Поскольку это приложение с открытым исходным кодом, оно кажется справочником по программированию.
Однако неизвестно, используется ли элемент управления JavaPOS или нет.

Openbravo Java POS
Floreant POS

Ниже приведен пример POS-приложения с открытым исходным кодом, написанного на PHP.
Вероятно, JavaPOS не будет использоваться.

OpenSourcePOS
WallacePOS

person kunif    schedule 09.01.2019
comment
Поставщик предоставил класс jpos.xml и Java, чтобы проверить, работает ли он. Он работает без необходимости устанавливать принтер. Я прошел по всем ссылкам и был очень полезным. Чего я *действительно хочу добиться, так это вашего первого пункта, Java-программы и JavaPOS для автономной работы. В POS при нажатии создать квитанцию отображается типичное диалоговое окно печати с просьбой выбрать существующий принтер. Как мне с этим работать? Нужно ли создавать виртуальный Java-принтер, который берет PDF-файл из POS, анализирует его и печатает построчно на Java? - person devyJava; 09.01.2019
comment
@devyJava, обычно, когда вы создаете изображение квитанции с текстом перед созданием PDF, вы отправляете запрос на печать в программу принтера JavaPOS. Поскольку обычно подключается только один POS-принтер, нет необходимости выбирать принтер. - person kunif; 09.01.2019
comment
При нажатии кнопки для печати квитанции происходит то же самое, что и в Microsoft Word после нажатия Ctrl+P. У меня есть сомнения, когда в POS делается запрос на печать [написано на PHP], как мне вызвать принтер, совместимый с JavaPOS? Как вы сказали, на самом деле нет ни установки POS-устройства, которое можно увидеть с обычным бытовым принтером HP Injket, ни поставщика, как на сайте. Все, что у меня есть, это обычный TestPrint.java, jpos.xml и несколько других JAR-библиотек, чтобы заставить его работать. Считаете ли вы, что мост между PHP и Java необходим? - person devyJava; 09.01.2019
comment
Я просматривал руководства и даже в ваших ссылках не нашел никаких указаний, чтобы сделать JavaPOS независимым, автономным «принтером», который работает в фоновом режиме хост-компьютера. Теперь, если диалоговое окно печати открыто, появится устройство JavaPOS. Или я пропустил что-то важное на картинке? Об использовании POS, сделанного на Java, не может быть и речи, он написан на PHP. - person devyJava; 09.01.2019
comment
Это потому, что я думал, что механизм, рекомендованный приложением PHP POS, не годится, поскольку комбинация Java и JavaPOS становится сложной. Независимо от метода считается, что механизм использования устройства JavaPOS из приложения PHP POS не был анонсирован и не стал открытым исходным кодом. Итак, что касается этого, вам нужно развиваться с самого начала, когда вы становитесь пионером. - person kunif; 09.01.2019
comment
Извини, но я не стал следовать за тобой. Я все еще просматриваю PDF-файлы от других поставщиков и не понимаю одной вещи. Если принтер подключается удаленно через IP-адрес [не через USB], требуется ли драйвер для работы с принтером? Устройство соответствует спецификации UPOS. - person devyJava; 09.01.2019
comment
Я только что загрузил ProBase POS 2.6 с сайта здесь Я прочитал руководство, и оно заявляет, что промежуточное ПО является общим для всех UPOS. Это должно означать, что под ним должен работать термопринтер или фискальный принтер неосновного поставщика, если он поддерживает спецификацию UPOS. Правильно ли я понимаю? - person devyJava; 09.01.2019
comment
Для сетевого принтера это зависит от метода, который вы собираетесь использовать. Если вы используете его как принтер JavaPOS, вам не нужен драйвер устройства, но необходимо управление JavaPOS (! = драйвер устройства). Если вы используете его как простой принтер ESC/POS, считается нормальным, если вы можете взаимодействовать с сокетом TCP/IP. - person kunif; 09.01.2019
comment
Diebold Nixdorf является мощным участником UnifiedPOS. ProBasePOS поддерживает устройства JavaPOS. Однако то, что они поддерживают, сосредоточено на их устройстве. Подключение устройств, отличных от Nixdorf, возможно, но считается сложным. - person kunif; 09.01.2019
comment
Хорошо. Таким образом, кажется, что он вызывает любое действие на совместимом с JavaPOS устройстве [поддерживает LAN], например. термопринтер, фискальный принтер, можно обойтись без диспетчера устройств. Можно использовать сокет TCP/IP БЕЗ какого-либо драйвера устройства. Возвращаться к нашему POS, который находится в совместимости с PHP, jpos.xml и javaPOS, бесполезно. Единственный способ заставить его работать из POS без указания устройства, указанного в печати, - это 1) построить мост между PHP и Java. [Я даже не знаю, какие входные данные PHP отправит в back end Java, один единственный большой двоичный файл pdf, поток строк или что-то еще... - person devyJava; 09.01.2019
comment
Или полностью игнорировать файл jpos.xml и все, что связано с Java, и интегрировать его в приложение POS github.com /mike42/escpos-php Я не знаю, как работает PHP [я занимаюсь Java], но вызывается команда генерировать счет, что приводит к отображению диалогового окна печати, оно должно загрузиться вместо escpos-php... - person devyJava; 09.01.2019
comment
Я просмотрел ссылку, которую вы только что разместили, github.com/opensourcepos/opensourcepos/wiki / кажутся связанными с тем, с чем я сталкиваюсь. Устройство является фискальным принтером, поддерживает/следует стандарту UPOS. Драйвера устройства нет, но он поставляется с jpos.xml и необходимыми библиотеками Java, чтобы заставить его программно работать на Java. Я сделаю вывод, что необходим мост между PHP и Java. Вся концепция настройки виртуального принтера, которая появляется в звуках диалога печати, - это то, в чем я не разбираюсь в технических вопросах. - person devyJava; 09.01.2019
comment
Про последнюю часть я не владею знаниями, поэтому не могу обсуждать ее здесь. Пожалуйста, вы должны задать новый вопрос. - person kunif; 09.01.2019
comment
Я буду. Спасибо вам за помощь. Теперь я без сомнения знаю, что нет прямого способа создать стиль «драйвера», используя jpos.xml в Java для любого POS. JavaPOS предназначен для Java. Только. Спасибо :) … кажется, есть webPOS, который работает с JavaPOS/UPOS, написанный в WSPOS1_1_Technical_Specification_2011_June_15.pdf, который работает со спецификацией UPOS через Интернет. - person devyJava; 09.01.2019
comment
@devyJava, последней версией WS-POS является версия 1.3, и спецификация находится здесь. UnifiedPOS - person kunif; 09.01.2019