У меня есть принтер Epson TM-T88III на компьютере с Linux, подключенный к USB-порту. Все работает относительно хорошо, это распознается, я могу открыть устройство, я могу повторить «Hello World» в командной строке для принтера, и он печатает без проблем.
Однако в golang, когда я открываю устройство с помощью os.OpenFile и записываю некоторые тестовые последовательности в виде байтового слияния или строки, эта последовательность печатается только после того, как я сделаю еще одну запись.
Может кто-нибудь объяснить, если я что-то упустил в том, что мне нужно сделать? Я относительный новичок в Голанге, но я занимаюсь программированием на других языках.
Я открываю с:
f, err := os.OpenFile("/dev/usb/lppos",os.O_RDWR,0755)
if err != nil {
panic(err)
}
defer f.Close()
Затем я определяю некоторые команды esc и ловлю их в байтовом слое (для этого я использую пакет escpos из panjjo):
p := escposc.New()
p.Init()
p.SetSmooth(1)
p.SetFontSize(2, 3)
p.SetFont("A")
p.Write("test ")
p.SetFont("B")
p.Write("test2 ")
p.Formfeed()
p.SetFont("B")
p.SetFontSize(1, 1)
p.SetEmphasize(1)
p.Write("halle")
p.Formfeed()
p.SetUnderline(1)
p.SetFontSize(4, 4)
p.Write("halle")
p.SetReverse(1)
p.SetFontSize(2, 4)
p.Write("halle")
p.Formfeed()
p.FormfeedN(5)
p.Cut()
_,b:=p.Readbyte()
p.End()
Затем я записываю пойманный фрагмент b на устройство:
n,err:=f.Write(b)
if err != nil {
panic(err)
}
В этот момент ничего не происходит, и мне потребовалось некоторое время, чтобы выяснить, что если я сделаю последний:
f.WriteString(" ")
Затем все последовательности печатаются как следует со всеми стилями, переводами строки и обрезкой.
И все хорошо, но не без этого последнего WriteString.
Ах, да, ему нужен пробел или другой символ, запись пустой строки не работает.
Я также пытался написать строку команд вместо байтового среза, но мне нужна та же вторая строка WriteString, иначе она не будет выводиться на бумажный рулон.