Настройка агента происходит через файл конфигурации appsettings.json, который в свою очередь представляет из себя набор параметров, разбитых на блоки.
При необходимости внести изменения в работу агента пользователь открывает файл конфигурации в любом удобном ему редакторе и производит необходимые ему изменения
Файл конфигурации позволяет настроить как работу агента в целом, так и работу конкретного устройства в частности.
{
"CorsAllow": ["*"],
"Devices": [
{
"Id":"1",
"Name":"Atol"
"Model":"DK.Integrations.Atol.AtolJSON",
"PortName":"10.62.40.128:5555",
"BaudRate":"115200",
"LogicalNum":"1",
"AutoCloseShift":"true"
}
],
"Urls": "http://*:6101;https://*:7101",
"StartupValidationTolerance": "true",
"StatusTimer": 10000,
"RemoteConfigurationUri": "http://localhost:6003",
"RemoteConfigurationTimeout": "10"
}
Описание:
* EndFiscalDoc- Печать клише с отрезкой
* Cut - Полная отрезка без печати клише
* None-Отрезка отсутствует
* BlackMarkCut - Отрезка по "чёрной метке"
* PresenterCut - Отрезка с выдачей в презенторе
| Модель | Atol.AtolJSON | Shtrih.DrvFR | AtolDemo | EscPos.EscPosPrinter |
|---|---|---|---|---|
| MethodClosePrint | ✅ | ✅ | ✅ | ✅ |
| Codepage | ❌ | ❌ | ❌ | ✅ |
| Linewidth | ❌ | ❌ | ❌ | ✅ |
➤ Подключение через последовательный порт COMx,TCP ip:port и USB (потребуется драйвер LibUsbDotNet)
➤Запустить приложение libusb-win32 (путь по умолчанию C:\Program Files\LibUsbDotNet\libusb-win32) и выбрать нужынй принтер по VID и PID ( узнать их можно было через диспетчер устройств)


➤ Номер кодовой страницы передается в параметре конфига Codepage, значение по умолчанию 866
➤ Подключение через USB возможно через указание интерфейса USB, а также PID\VID устройства VID_03F0&PID_0F56\H181302683 | VID_03F0&PID_0F56
➤ Реализованы только методы нефискальной печати:
Управление шрифтом печати font (битовое поле, 0 — стандартный шрифт, 1 — альтернативный шрифт, 8 — полужирный, 16 — удвоенная ширина, 32 — удвоенная высота, 128 — подчеркнутый). Форматирование применяется ко всей строке
Печать одномерного ШК (UPCA, UPCE, EAN13, EAN8, CODE39, CODABAR, CODE93, CODE128 в спецификации Code B)управление высотой ШК BcHeight и печатью человекочитаемой строки под ШК BcPrintText
Печать двумерного ШК (только QR)
Печать логотипа из памяти, в PictureData надо передать номер изображения
Завершение "документа" в зависимости от параметра MethodClosePrint. (отрезка на месте, отрезка с промоткой, остановка или отрезка с выравниванием по черной метке)
Пример заполнения конфигурационного файла для работы с принтером Custom VKP80 по протоколу ESC/POS с отрезкой по черной метке:
<Printers>
<DeviceConfig>
<Id>3dc1</Id> - айди устройства
<Name>ESC POS Printer</Name> - наименование устройства
<Model>DK.Integrations.EscPos.EscPosPrinter</Model> - протокол ESC/POS
<PortName>VID_0DD4&PID_015D</PortName> - принтер подключен по USB
<BaudRate>115200</BaudRate> - скорость работы с устройством
<LogicalNum>0</LogicalNum>
<Codepage>866</Codepage> - кодировка текста (866 - кириллица для Custom VKP80)
<MethodClosePrint>BlackMarkCut</MethodClosePrint> - отрезка по черной метке (параметр должен быть включен в настройках самого принтера)
<Linewidth>504</Linewidth> - ширина области печати (ширина ленты)
</DeviceConfig>
</Printers>
x, y - координаты строки. Считаются от края печати в зависимости от параметра Direction.
Direction может принимать значения 0, 1, 2 и 3.
0 - горизонтальная печать, отсчет координат от верхнего левого угла направления печати
1 - снизу вверх, отсчет координат от левого нижнего угла направления печати
2 - справа налево, отсчет координат от нижнего правого угла направления печати
3 - сверху вниз, отсчет координат от левого верхнего угла направления печати
x и y задаются в точках. Ось х и ось у.
width - длина строки
height - высота строки
В случае вертикальной печати в страничном режиме, длина строки будет высотой строки, а высота - длиной. Ориентировано по направлению печати.

type - тип строки, возможные значения text или barcode
alignment - выравнивание, left, center, right
text - наполнение строки, текст для печати или состав barcode
font - размер шрифта
wrap - перенос строки при упоре в границу границу обозначенного размера строки, возможные значения none - всё лишнее обрезается, char - переносится на следующую строку, word - оставляется целое количество слов (до первого пробела).
"type": "pageMode",
"pageModeItems": [
{
"x": 300,
"y": 200,
"width": 100,
"height": 2000,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "БИЛЕТ НА АТТРАКЦИОН <ПОЕЗД НА РЕЛЬСАХ>",
"font": 8,
"wrap": "none"
}
]
},
{
"printing": [
{
"type": "pageMode",
"pageModeItems": [
{
"x": 300,
"y": 200,
"width": 100,
"height": 2000,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "БИЛЕТ НА АТТРАКЦИОН <ПОЕЗД НА РЕЛЬСАХ>",
"font": 8,
"wrap": "none"
}
]
},
{
"x": 250,
"y": 0,
"width": 100,
"height": 1000,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "Рейс",
"font": 8,
"wrap": "None"
}
]
},
{
"x": 250,
"y": 150,
"width": 100,
"height": 1050,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "123456",
"font": 0,
"wrap": "None"
}
]
},
{
"x": 250,
"y": 400,
"width": 100,
"height": 800,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "Дата",
"font": 8,
"wrap": "None"
}
]
},
{
"x": 250,
"y": 550,
"width": 100,
"height": 650,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "13.11.2025",
"font": 0,
"wrap": "None"
}
]
},
{
"x": 200,
"y": 0,
"width": 100,
"height": 1200,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "Билет",
"font": 8,
"wrap": "None"
}
]
},
{
"x": 150,
"y": 0,
"width": 100,
"height": 1200,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "Стоимость",
"font": 8,
"wrap": "None"
}
]
},
{
"x": 150,
"y": 270,
"width": 100,
"height": 950,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "1000.00 р.",
"font": 0,
"wrap": "None"
}
]
},
{
"x": 150,
"y": 600,
"width": 100,
"height": 700,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "Время продажи",
"font": 8,
"wrap": "None"
}
]
},
{
"x": 150,
"y": 970,
"width": 100,
"height": 350,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "15:13",
"font": 0,
"wrap": "None"
}
]
},
{
"x": 100,
"y": 0,
"width": 100,
"height": 1000,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "Дополнительные услуги",
"font": 8,
"wrap": "None"
}
]
},
{
"x": 0,
"y": 0,
"width": 100,
"height": 1500,
"direction": 3,
"printing": [
{
"type": "text",
"alignment": "left",
"place": "Before",
"text": "БИЛЕТ НАЧИНАЕТ ДЕЙСТВОВАТЬ ЗА 15 МИНУТ ДО ОТПРАВЛЕНИЯ!",
"font": 8,
"wrap": "None",
"lineWidth": 700
}
]
}
]
},
{
"type": "barcode",
"alignment": "center",
"text": "123-45678-90",
"doubleWidth": false,
"doubleHeight": false,
"wrap": "None",
"barcodeType": "CODE128",
"bcPrintText": false,
"bcHeight": 100
}
]
}