1
resposta

Impressao em impressora zebra via remota

Bom dia,

Atualmente possua uma aplicação Django para impressão de etiquetas em uma impressora Zebra GX430T, no windows localmente. Estou utilizando o comando abaixo, para pega as impressoras locais:

    zebra_usb = Zebra()    
    queue = zebra_usb.getqueues()
    zebra_usb.setqueue(queue[int(fila)])    
    label = "Teste de etiqueta"
    zebra_usb.output(label)

No windows local funciona perfeitamente, mas quando crio um container ubuntun para hospedar minha aplicação , o sistema da erro. Faz sentido porque a impressora não esta local e o camando não serve para linux.

Como posso hospedar minha view em linux e ela reconhecer a impressora remota que vai estar em um endereco ip compartilhada ? segue minha view :

def imprimir_Etiqueta(request):
    fila = request.POST.get('impressora')
    codcli= qtd = request.POST.get('cliente')
    copias = request.POST.get('copias')
    qtde = request.POST.get('qtde')
    part_number = request.POST.get('partnumber')
    produto = request.POST.get('produto')
    desc = request.POST.get('desc')    
    cliente = Cliente.objects.using('totvs').get(codigo=codcli)   
    if desc is None:
          desc = Sb1020.objects.using("totvs").get(b1_cod=produto)
    zebra_usb = Zebra()    
    queue = zebra_usb.getqueues()  
    zebra_usb.setqueue(queue[int(fila)])       
    if request.POST and produto and part_number:
          label = """
           ^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR4,4~SD30^JUS^LRN^CI0^XZ
           ^XA
           ^MMT
           ^PW945
           ^LL0591
           ^LS0
           ^FO0,96^GFA,03840,03840,00120,:Z64:
           eJztzTENADAMBLFIAVL+LAqsUkrhth9yJuAqSZK0xhnihV4o9TI3+TIdeqHUK2mDDyTYycQ=:ABCA
           ^FO11,11^GB919,545,4^FS
           ^FO15,229^GB914,0,4^FS
           ^FT25,148^AFN,26,13^FH\^FDDW Codigo^FS
           ^FT526,148^AFN,26,13^FH\^FDPart Number^FS
           ^FO505,118^GB0,111,4^FS
           ^FT25,263^AFN,26,13^FH\^FDDescri\87ao^FS
           ^FO15,370^GB914,0,4^FS
           ^FT25,401^AFN,26,13^FH\^FDQuantidade^FS
           ^FT460,401^AFN,26,13^FH\^FDData^FS
           ^FO448,372^GB0,80,4^FS
           ^FO11,448^GB919,0,4^FS
           ^FT20,479^AFN,26,13^FH\^FDCliente/Fornecedor^FS
           ^FT59,206^A0N,46,50^FH\^FD"""+produto[0:30]+"""^FS
           ^FT550,206^A0N,46,50^FH\^FD"""+part_number[0:30]+"""^FS
           ^FT45,325^A0N,46,45^FH\^FD"""+desc.b1_desc[0:37]+"""^FS
           ^FT230,427^A0N,46,50^FH\^FD"""+qtde+"""^FS
           ^FT577,435^A0N,46,50^FH\^FD"""+data_atual()+"""^FS
           ^FT45,536^A0N,46,50^FH\^FD"""+cliente.nome[0:37]+"""^FS
           ^FT29,83^A0N,46,50^FH\^FDDaikin Ar Condicionado Amazonas LTDA^FS
           ^PQ"""+copias+""",0,1,Y^XZ
          """    
          try:           
              zebra_usb.output(label)
          except:
              print("Error with the connection")
    produtos = Sb1020.objects.using("totvs").filter(Q(b1_tipo=('PA')) | Q(b1_tipo=('UT')) | Q(b1_tipo=('MP')) | Q(b1_tipo=('MP')) ).order_by('b1_desc')
    clientes = Cliente.objects.using('totvs').all()   
    zebra_usb = Zebra()
    """
      Pegas as Impressoras ativas para montar o select da impressora 
    """
    queue_list = zebra_usb.getqueues()    
    context = {
        'produtos' : produtos,
        'clientes' : clientes,
        'queue' : queue_list, 
    }  
    return render(request,"cadastros/etiqueta_garantia.html", context)
1 resposta

Olá Claudio, como você está?

Peço desculpas pela demora em obter um retorno.

Atualmente na Alura não possuímos conteúdos que forneçam suporte ao conteúdo de impressão com Django e impressoras do tipo Zebra. Todavia, uma sugestão que pode te nortear é utilizar o driver Zebra EPL2 para Linux. Com ele, você pode enviar comandos EPL2 diretamente para a impressora, sem precisar de um driver específico para o sistema operacional.

Para utilizar o driver, você pode instalar o pacote "printer-driver-zebra" no Ubuntu:

sudo apt-get update
sudo apt-get install printer-driver-zebra

Depois, basta modificar o seu código para enviar os comandos EPL2 para a impressora, utilizando a biblioteca "socket" do Python. Segue um exemplo de código que pode ser utilizado para enviar os comandos EPL2 para a impressora:

import socket

def imprimir_etiqueta(ip, porta, label):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, porta))
    s.send(label.encode())
    s.close()

É importante ressaltar que o código deve ser adaptado conforme as especificidades da impressora e com os comandos EPL2 que você precisa enviar para a impressora. Além disso, é necessário que a impressora esteja configurada corretamente para receber os comandos EPL2.

Por fim, reitero que por ser um projeto pessoal e que vai além do conteúdo apresentado no curso e que envolve inclusive peças físicas, mais testes terão de ser feito para que você alcance um resultado satisfatório, mas espero que esta resposta seja um bom ponto de partida para o seu desafio.

Espero ter lhe ajudado.

Grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software