Ваше приложение может печатать произвольные данные внутри кассовых чеков, которые сопровождают продажу, возврат, а также покупку и возврат покупки. Вы также можете точно указать в какой части чека будут напечатаны данные.
Для печати произвольных данных внутри кассового чека, в манифесте приложения необходимо объявить разрешение:
<uses-permission android:name="ru.evotor.permission.receipt.printExtra.SET" />
Чтобы печатать произвольные данные внутри кассовых чеков:
Создайте службу, производную от IntegrationService, которая будет передавать данные для печати, например MyPrintService.
В манифесте приложения, в intent-фильтре службы MyPrintService, укажите действие, которое определяет в чеке какого типа требуется печатать переданные службой данные:
<service
 android:name=".MyPrintService"
 android:enabled="true"
 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>
В службе 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() {
               //Тело процессора.
             }
     );
Передайте в процессор массив данных для печати и реализуйте один из классов пакета 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("<путь к файлу изображения>"))
                }
        ));
      }
    };
IPrintable только теми элементами, которые требуется распечатать. Например, если на чеке необходимо распечатать только штрихкод, в массив следует добавить только элемент new PrintableBarcode("<Штрихкод>", PrintableBarcode.BarcodeType.CODE39). Пустые элементы в массиве IPrintable приведут к исключению.Посмотрите пример службы для печати произвольных данных в чеке продажи.