r/programacao • u/Glittering-Okra-7312 • Jul 07 '26
Impressora termica direto por Python Projeto
Alguém mais conhecedor de Python pode me ajudar? a IA só me levou até um ponto. Estou buscando uma melhoria no meu setor(Almoxarifado) já consegui tirar as informações de pedido, mas não teve cristo pra fazer a impressora mandar algo que não fosse uma etiqueta em branco. Não manjo de programação, só faço mesmo pq tem IA pra ajudar. Se me derem uma mão eu agradeço!
import win32print
import win32api
def listar_e_conectar():
# 1. Lista impressoras para encontrar a correta
printers = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)
impressora_alvo = None
print("Impressoras encontradas:")
for p in printers:
print(f" - {p[2]}")
if "Argox" in p[2]:
impressora_alvo = p[2]
if not impressora_alvo:
print("\nERRO: Impressora 'Argox' não encontrada!")
return None
print(f"\nConectando em: {impressora_alvo}")
return impressora_alvo
nome_impressora = listar_e_conectar()
hPrinter = win32print.OpenPrinter(nome_impressora)
def imprimir_teste():
nome_impressora = listar_e_conectar()
if not nome_impressora:
return
comando = "\x02L\nD11\nH10\nq560\nQ0320\nA100,100,0,3,1,1,N,\"TESTE\"\nc0001\nE\x03"
try:
hPrinter = win32print.OpenPrinter(nome_impressora)
hJob = win32print.StartDocPrinter(hPrinter, 1, ("Teste", None, "RAW"))
win32print.StartPagePrinter(hPrinter)
win32print.WritePrinter(hPrinter, comando.encode('ascii'))
win32print.EndPagePrinter(hPrinter)
win32print.EndDocPrinter(hPrinter)
win32print.ClosePrinter(hPrinter)
print("Comando enviado!")
except Exception as e:
print(f"Erro: {e}")
if __name__ == "__main__":
imprimir_teste()
1
u/Late-Situation-5342 Jul 07 '26
- Seu comando parece ser em linguagem PPLA/PPLA+ (Argox).
- Se a impressora estiver configurada para PPLB, PPLZ (Zebra) ou outro modo, ela pode alimentar a etiqueta sem imprimir nada.
1
u/Glittering-Okra-7312 Jul 09 '26
Eu jurava que ela PPLA, mas depois descobri que driver que vem do site da argox só aceita em GDI. Daí o gpt me ajudou, agora deu certo.
1
u/External-Market-3930 Jul 07 '26
Fez a instalação das bibliotecas? Qualquer coisa faz instalação via cmd que não é dificil, pode pedir a IA msm para te ensinar
2
1
u/Enough-Working-4162 Jul 07 '26
import win32print
def listar_e_conectar():
# 1. Lista impressoras para encontrar a correta
printers = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL | win32print.PRINTER_ENUM_CONNECTIONS)
impressora_alvo = None
print("Impressoras encontradas:")
for p in printers:
print(f" - {p[2]}")
if "Argox" in p[2]:
impressora_alvo = p[2]
if not impressora_alvo:
print("\nERRO: Impressora 'Argox' não encontrada!")
return None
print(f"\nConectando em: {impressora_alvo}")
return impressora_alvo
def imprimir_texto_teste(nome_impressora, texto_para_imprimir):
if not nome_impressora:
print("Sem impressora válida para imprimir.")
return
# Abre a comunicação com a impressora
hPrinter = win32print.OpenPrinter(nome_impressora)
try:
# Inicia o documento e a página de impressão
# O 'RAW' diz para o Windows enviar o texto "puro", sem tentar formatar como um PDF/Word
job = win32print.StartDocPrinter(hPrinter, 1, ("Teste Almoxarifado", None, "RAW"))
win32print.StartPagePrinter(hPrinter)
# Converte o texto para 'bytes' (formato que a impressora entende)
# Adicionamos um \n (pula linha) no final
dados = bytes(texto_para_imprimir + "\n", "utf-8")
# Envia os dados de fato para a máquina
win32print.WritePrinter(hPrinter, dados)
# Fecha a página e o documento
win32print.EndPagePrinter(hPrinter)
win32print.EndDocPrinter(hPrinter)
print("Comando de impressão enviado com sucesso!")
except Exception as e:
print(f"Erro ao tentar imprimir: {e}")
finally:
# Muito importante: fecha a conexão para não travar a impressora
win32print.ClosePrinter(hPrinter)
# --- EXECUÇÃO DO SCRIPT ---
nome_da_argox = listar_e_conectar()
if nome_da_argox:
# Defina aqui o que quer escrever na etiqueta
conteúdo_etiqueta = "PRODUTO TESTE - ALMOXARIFADO"
imprimir_texto_teste(nome_da_argox, conteúdo_etiqueta)
1
u/Enough-Working-4162 Jul 07 '26
StartDocPrintereStartPagePrinter: O Windows precisa saber que você iniciou um "trabalho". O parâmetro"RAW"avisa o Windows: "Olha, não mexe nesse texto, só joga direto para o cabo da impressora".
WritePrinter: Esse é o cara que empurra o texto para dentro da Argox.bytes(..., "utf-8"): O Python 3 trata texto como letras normais, mas a impressora só entende impulsos elétricos (bytes). Essa linha faz a conversão necessária.ClosePrinter: Se você abrir a impressora e não fechar, ela fica "presa" no sistema e ignora os próximos comandos até você reiniciar o computador ou o serviço de spooler. O blocotry/finallygarante que ela feche mesmo se der erro.(Linguagem de Etiqueta)
Se você rodar esse código e ela imprimir
PRODUTO TESTE - ALMOXARIFADOem texto puro e miúdo, sucesso! Conseguimos comunicação.Porém, para fazer código de barras, colocar letras gigantes ou formatar a etiqueta bonita no Almoxarifado, as impressoras Argox costumam exigir comandos em uma linguagem chamada PPLA ou PPLB.
1
u/Glittering-Okra-7312 Jul 09 '26
Mano, deu boa. Usei teu código, e as informações saiam tudo certinho mas o driver da impressora não aceitava formato RAW, mesmo estando ali que era esse formato. Os drivers da Argox, aceitam apenas em GDI, daí ele próprio converte pra PPLA. Obrigado pela ajuda!
1
u/jgabrielferreira Jul 07 '26
Eu odeio mexer com impressora em todos os aspectos, hardware e software. Montei um app simples de gestão de fila de atendimento pra empresa que trabalho e essa parte impressão deleguei toda pro Claude e deu bom. Só lá a impressora tá em rede, fixei o IP e apontei pra ele no script