Ваше приложение может печатать произвольные данные внутри кассовых чеков, которые сопровождают продажу, возврат, а также покупку и возврат покупки. Вы также можете точно указать в какой части чека будут напечатаны данные.
Для печати произвольных данных внутри кассового чека, в манифесте приложения необходимо объявить разрешение:
<uses-permission android:name="ru.evotor.permission.receipt.printExtra.SET" />
Чтобы печатать произвольные данные внутри кассовых чеков:
Создайте службу, производную от IntegrationService
, которая будет передавать данные для печати, например MyPrintService
.
В манифесте приложения, в 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>
В службе 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
приведут к исключению.Посмотрите пример службы для печати произвольных данных в чеке продажи.