Automatización con Python en Text2 Barcode

Ejecuta lógica personalizada justo antes y después de cada impresión: ajusta impresoras, valida contenido, notifica por correo o convierte imágenes a ZPL, todo con un script de Python integrado en el servicio de impresión.

Esta función (Integra scripts de Python) está disponible solo en la versión Pro de Text2 Barcode.

Introducción

Cada servicio de impresión de Text2 Barcode puede ejecutar un script de Python propio mediante una clase PrintHandler con dos métodos: beforePrint() (antes de imprimir) y afterPrint() (después de imprimir).

Por dentro, Text2 Barcode inicia un proceso de Python y establece automáticamente el puente Py4J entre Java y tu script — no necesitas escribir código de conexión: solo defines la clase PrintHandler y el programa se encarga del resto.

Requisitos

  1. Instala Python desde la web oficial: https://www.python.org/downloads/
  2. Instala Py4J (comunicación entre Python y Text2 Barcode):
pip install py4j

Text2 Barcode detecta automáticamente la ruta de tu ejecutable de Python (where python en Windows, which python3 / which python en Mac y Linux). Si necesitas usar una instalación específica, puedes indicar la ruta manualmente en la pestaña Environment del editor de Python, o definir la variable de entorno PYTHON_EXECUTABLE_PATH con la ruta completa al ejecutable.

Activar el script en un servicio

El script de Python se configura por servicio, no de forma global:

  1. Abre o edita un Servicio en Text2 Barcode (Servicios > Agregar servicio o edita uno existente).
  2. Ve a la sección "Integra scripts de Python" y activa la casilla "Activar script".
  3. Da clic en "Abrir editor" para escribir tu código en la pestaña Script.
  4. Usa la pestaña Output para ver la salida de tu script mientras lo pruebas con ▶ Iniciar.

Estructura básica

Tu script debe definir una clase llamada exactamente PrintHandler, con los métodos beforePrint(event, service) y afterPrint(event, service):

class PrintHandler:
    """
    La clase PrintHandler gestiona eventos relacionados con el proceso de impresión.
    Incluye métodos que se ejecutan antes y después de la impresión.
    """

    def beforePrint(self, event, service):
        """
        Esta función se ejecuta antes de que comience el proceso de impresión.

        :param event: PrintEvent
        :param service: PrintService
        """
        pass  # Aquí se agrega la lógica para el manejo previo a la impresión

    def afterPrint(self, event, service):
        """
        Esta función se ejecuta después de que se ha completado el proceso de impresión.

        :param event: PrintEvent
        :param service: PrintService
        """
        pass  # Aquí se agrega la lógica para el manejo después de la impresión

Este es el mismo código de ejemplo que ves al abrir el editor por primera vez para un servicio nuevo.

Ejemplos completos

Enviar un correo después de imprimir

import smtplib
from email.mime.text import MIMEText

class PrintHandler:

    def afterPrint(self, event, service):
        # Construir detalles de las impresoras donde se imprimió
        printer_details = ""
        for printer in event.printers():
            printer_details += f"Impresora: {printer['name']}\n"
            printer_details += f"UID: {printer['uid']}\n"
            printer_details += f"Conexión: {printer['connection']}\n\n"

        # Obtener el contenido impreso (Base64)
        content_b64 = event.content()

        msg_details = (
            "Se ha completado una impresión.\n\n"
            f"Contenido (Base64):\n{content_b64}\n\n"
            f"Impresoras utilizadas:\n{printer_details}"
        )

        msg = MIMEText(msg_details)
        msg['Subject'] = 'Etiqueta impresa'
        msg['From'] = 'tuemail@example.com'
        msg['To'] = 'destinatario@example.com'

        with smtplib.SMTP('smtp.example.com', 587) as server:
            server.starttls()
            server.login('tuemail@example.com', 'tupassword')
            server.sendmail(msg['From'], [msg['To']], msg.as_string())

        print("Correo enviado con éxito")

Solución de problemas

  • "The value for 'printProcessor' must not be null": la impresora que le pasaste a service.send() / service.sendBase64() es un dict driver construido a mano (no salió de event.printers()) y le falta la clave printProcessor. Agrégala con uno de estos valores: "PRINT_RAW", "PRINT_DIRECT" o "PRINT_ALT_CUPS".
  • El script no imprime nada / se queda esperando: revisa la pestaña Output del editor — cualquier excepción de Python se muestra ahí en rojo.
  • No encuentra el ejecutable de Python: define la ruta manualmente en la pestaña Environment del editor, o crea la variable de entorno PYTHON_EXECUTABLE_PATH.

¿Tienes dudas o algo no funciona como esperas? Contáctanos y con gusto te ayudamos.