Да, действительно, это помогло. Вот итоговая функция с автоматическим определением длины строки которые позволяет печатать принтер.
Еще вопрос, не понятно для чего нужен последний блок: if not __is_last
function print_receipt_slip(__payment, __is_last, __print_data)
local text = 'return "' .. __payment.slip .. '"'
text = ukm.source(ukm.mashine.handle, text)
local print = ukm.get_printer(ukm.printer_type_master());
local width = print:get_width();
text = text:gsub("\x0D", " ")
text = text:gsub("\x0A", " ")
text = text:gsub("\n", " ")
text = text:gsub("\r", " ")
local line = ""
local lines = ""
for word in (text .. " "):gmatch("(.-) ") do
if ukm.str_len(line) + ukm.str_len(word) < width then
line = line .. " " .. word
else
lines = lines .. line .. '\n'
line = word
end
line = line:match("^%s*(.-)%s*$")
end
lines = lines:match('^\n*(.-)\n*$')
text = lines
if not __is_last then
local printer = ukm.get_printer(ukm.printer_type_master())
text = text .. '\n' .. string.rep('-', printer:get_width())
end
__print_data:add(text, ukm.printer_type_master())
end