Spanish Enviar archivo a impresora de etiquetas por medio de sockets

Christian28

New Member
Buen día
Como parte de un proyecto en B4A implementado en pistolas de radiofrecuencia, pretendo enviar un archivo que contiene un código de barras a una impresora Zebra
La comunicación entre Pistola e impresora se está haciendo por sockets, y pretendo enviar el archivo a la impresora para que se imprima
Si alguien pudiera apoyarme para el envío del archivo se lo agradecería mucho
 

roerGarcia

Active Member
Licensed User
Longtime User
La comunicacion es actualmente efectiva? Es decir, si se conectan, como se conectan, que se puede hacer mediante esa coneccion? Si la comunicacion se establece, enviar un archivo se imprime directamente o hay que hacer algo mas? - sondeo nada mas.
 

TILogistic

Expert
Licensed User
Longtime User
Para entender bien que debe desarrollar debe separar las especificaciones en:.

1. tipo de conexión que desea conectar la impresora: Wifi, Bluetooth, Serial, USB, RJ45, RS232, etc.
2. tipo de emulación de comandos de impresora a utilizar: ZPL, CPCL, ESC/P, etc.

Si emula ZPL o ZPL II esto puede ayudar a generar la plantilla en un archivo o string a imprimir :


1634085281198.png


Bajar a Archivo:
1634085575154.png
 
Last edited:

drgottjr

Expert
Licensed User
Longtime User
ademas, hay que haber un protocolo para iniciar
la conexion. o sea, a la impresora le hace falta
un servidor escuchando senales de vida desde
el exterior (de si misma). y la app tiene que saber
cuales son estas senales. habra documentacion
alguna parte.

a veces ya existen librerias que posiblemente funcionan con b4a
(como aqui: https://github.com/w3blogfr/zebra-zpl)

he ojeado la documentacion rapidamente. no digo
que va a ser facil, pero normalmente una libreria
esconde mucho o todo el trabajo dificil. pero
tendras que estar a gusto con java y la interfaz
entre ella y b4a. si no, todo cuanto se efectua en
la libreria tendras que hacerlo tu a mano...
 

TILogistic

Expert
Licensed User
Longtime User
ademas, hay que haber un protocolo para iniciar
la conexion. o sea, a la impresora le hace falta
un servidor escuchando senales de vida desde
el exterior (de si misma). y la app tiene que saber
cuales son estas senales. habra documentacion
alguna parte.

a veces ya existen librerias que posiblemente funcionan con b4a
(como aqui: https://github.com/w3blogfr/zebra-zpl)

he ojeado la documentacion rapidamente. no digo
que va a ser facil, pero normalmente una libreria
esconde mucho o todo el trabajo dificil. pero
tendras que estar a gusto con java y la interfaz
entre ella y b4a. si no, todo cuanto se efectua en
la libreria tendras que hacerlo tu a mano...
Java:
    public static void printZpl(String zpl, String ip, int port) throws ZebraPrintException {
        Socket clientSocket = null;
        try {
            try {
                clientSocket = new Socket(ip, port);
                DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
                outToServer.writeBytes(zpl);
                clientSocket.close();
            } finally {
                if (clientSocket != null) {
                    clientSocket.close();
                }
            }
        } catch (IOException e1) {
            throw new ZebraPrintException("Cannot print label on this printer : " + ip + ":" + port, e1);
        }
    }
clientSocket = new Socket(ip, port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes(zpl);
 

TILogistic

Expert
Licensed User
Longtime User
Correcciones:

Nota:
Recuerde que el contenido del archivo label.txt puede ser un string con la plantilla a imprimir.

B4X:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    
    'Network library
    Private PrinterZebra As Socket
    Private PrinterIP As String = "192.168.0.100"
    Private PrinterPort As Int = 9100
    Private PrinterTimeOut As Int = 600
    
End Sub

Public Sub Initialize
    PrinterZebra.Initialize("PrinterZebra")
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
End Sub

Private Sub Button1_Click
    Dim Text As String = File.ReadString(File.DirAssets, "label.txt")
    Wait For (SendFileToPrinter(Text)) Complete (Success As Boolean)
    If Success Then Return
    xui.MsgboxAsync("Error en la conexion con impresora", "Advertencia")
End Sub

Sub SendFileToPrinter(ZPL As String) As ResumableSub
    PrinterZebra.Connect(PrinterIP, PrinterPort, PrinterTimeOut)
    Wait For PrinterZebra_Connected (Successful As Boolean)
    If Not(Successful) Then Return False
    
    Dim AStreams As AsyncStreams
    AStreams.Initialize(PrinterZebra.InputStream, PrinterZebra.OutputStream, "AStreams")

    For Each Command As String In Regex.Split(Chr(13) & Chr(10), ZPL)
        AStreams.Write(Command.GetBytes("UTF8"))
    Next
        
    PrinterZebra.Close
    Return True
End Sub
 

Attachments

  • TEST.zip
    15.5 KB · Views: 257
Last edited:
Hola!
soy el autor de este post, solo que perdi mis datos de acceso y tuve problemas para recuperarlo, así que me cree otra cuenta
agradezco sus comentarios, el comentario de TILogistic me permitió realizar la impresion, sin embargo el problema que tengo ahora es imprimirla porque estoy descargando el contenido del ZPL y mandandolo a la funcion SendToPrinter
y si saca las etiquetas pero vacías, cómo le pudiera hacer en ese caso?
 
Top