Печать внутри кассового чека

Редактировать

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

Разрешение

Для печати произвольных данных внутри кассового чека, в манифесте приложения необходимо объявить разрешение:

<uses-permission android:name="ru.evotor.permission.receipt.printExtra.SET" />

Печать произвольных данных внутри кассового чека

Чтобы печатать произвольные данные внутри кассовых чеков:

  1. Создайте службу, производную от IntegrationService, которая будет передавать данные для печати, например MyPrintService.

  2. В манифесте приложения, в intent-фильтре службы MyPrintService, укажите действие, которое определяет в чеке какого типа требуется печатать переданные службой данные:

    <service
     android:name=".MyPrintService"
     android:enabled="false"
     android:exported="true">
     <intent-filter>
         <!-- Печать произвольных данных в чеке продажи -->
         <action android:name="evo.v2.receipt.sell.printExtra.REQUIRED" />
         <!-- Печать произвольных данных в чеке возврата -->
         <action android:name="evo.v2.receipt.payback.printExtra.REQUIRED" />
         <!-- Печать произвольных данных в чеке покупки -->
         <action android:name="evo.v2.receipt.buy.printExtra.REQUIRED" />
         <!-- Печать произвольных данных в чеке возврата покупки -->
         <action android:name="evo.v2.receipt.buyback.printExtra.REQUIRED" />
     </intent-filter>
    </service>
    
  3. В службе MyPrintService, подпишите процессор PrintExtraRequiredEventProcessor на событие PrintExtraRequiredEvent, которое указывает тип чека, в котором будут напечатаны данные:

    Map<String, ActionProcessor> processorMap = new HashMap<>();
         processorMap.put(
                 /**
                  * Возможные события:
                  * NAME_SELL_RECEIPT – данные будут напечатаны в чеке продажи.
                  * NAME_PAYBACK_RECEIPT – данные будут напечатаны в чеке возврата.
                  * NAME_BUY_RECEIPT – данные будут напечатаны в чеке покупки.
                  * NAME_BUYBACK_RECEIPT – данные будут напечатаны в чеке возврата покупки.
                  */
                 PrintExtraRequiredEvent.NAME_SELL_RECEIPT,
                 new PrintExtraRequiredEventProcessor() {
                   //Тело процессора.
                 }
         );
    
  4. Передайте в процессор массив данных для печати и реализуйте один из классов пакета ru.evotor.framework.receipt.print_extras, которые определяют где в чеке будут напечатаны данные:

    new PrintExtraRequiredEventProcessor() {
        @Override
        public void call(String s, PrintExtraRequiredEvent printExtraRequiredEvent, Callback callback) {
            List<SetPrintExtra> setPrintExtras = new ArrayList<SetPrintExtra>();
            setPrintExtras.add(new SetPrintExtra(
                    /**
                     * Класс, который указывает место, где будут распечатаны данные.
                     * В данном случае данные будут распечатаны сверху от чека: после клише, до текста "Кассовый чек".
                     */
                    new PrintExtraPlacePrintGroupTop(null),
                    //Массив данных, которые требуется распечатать.
                    new IPrintable[]{
                            new PrintableText("<Текст>"),
                            new PrintableBarcode("<Штрихкод>", PrintableBarcode.BarcodeType.CODE39),
                            new PrintableImage(BitmapFactory.decodeFile("<путь к файлу изображения>"))
                    }
            ));
          }
        };
    

Посмотрите пример службы для печати произвольных данных в чеке продажи.

См. также