Выставление счетов иностранцам через POS-принтер и печать изображения

Я пытаюсь создать прототип для печати растровых данных для текстового файла на мой принтер epson pos с поддержкой локальной сети TM -T88V.

Хотя у меня нет проблем с отправкой текста и инструкциями по форматированию текста, я не понимаю, что мне нужно сделать, чтобы мой принтер распечатал данные сообщения Аресибо .

первые несколько строк:

00000010101010000000000
00101000001010000000100
10001000100010010110010
10101010101010100100100
00000000000000000000000
00000000000011000000000
00000000001101000000000
00000000001101000000000
00000000010101000000000
00000000011111000000000
00000000000000000000000
11000011100011000011000
10000000000000110010000
11010001100011000011010
11111011111011111011111
00000000000000000000000
00010000000000000000010
00000000000000000000000
00001000000000000000001

Сообщение состоит из 73 строк и 23 столбцов, что дает 1679 элементов изображения. Каждый из этих элементов определяется либо 1 для черного, либо 0 для белого и должен быть напечатан в виде квадрата 8x8 (или 16x16 )точек. результатом будет

Arecibo message
(источник:satsig.net)

Из технических характеристик принтера:

enter image description here

Пока, как я уже сказал, подключение и отправка на принтер не проблема, я просто не понимаю, что эта инструкция хочет мне сказать. Что было бы в случае сообщения Аресибо

Какие числа я должен отправить на принтер? Нужно ли отправлять каждую точку? Что означает nL, nH specify the number of dots of the image data in the horizontal direction as (nL + nH × 256).?

Вот моя простая программа на Python, которую я использую для прототипирования:

# -*- coding: utf-8 -*-
import struct
import socket

def sendInstructions(mySocket,l):
    for x in l:
        mySocket.send(struct.pack('h', *[x]),1)


def emphasizeOn(mySocket):
    sendInstructions(mySocket,[27,33,48])


def emphasizeOff(mySocket):
    sendInstructions(mySocket,[27,33,0])


def lineFeed(mySocket,number):
    for i in range(number):
        sendInstructions(mySocket,[0x0a,])


def paperCut(mySocket):
    sendInstructions(mySocket,[29,86,0])

def sendText(mySocket,string):
    mySocket.send(string.encode('UTF-8'))


def main():
    mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
    mySocket.connect(('192.168.1.15',9100))    


    lines = ["Hello,","World!"]
    emphasizeOff(mySocket)
    lineFeed(mySocket,2)
    for l in lines: 
        if lines.index(l) == 0:
            emphasizeOn(mySocket)
        else:
            emphasizeOff(mySocket)

        sendText(mySocket,l)
        lineFeed(mySocket,2)

    lineFeed(mySocket,4)
    paperCut(mySocket)

    mySocket.close()

if __name__=="__main__":
    main()
14
задан Glorfindel 22 August 2019 в 05:15
поделиться