En este artículo voy a mostrarte los tamaños máximos soportados en mi GOOJPRT PT-210 para saber:

  • Cuántos caracteres soporta por línea usando el texto nativo
  • Cuántos caracteres soporta por línea usando texto en imagen
  • Cuántos pixeles debe medir una imagen para que no se distorsione y salga completa

Aunque he hecho las pruebas específicamente con la PT-210 esto debería aplicar para todas las impresoras de 58 milímetros.

Resumen

Tiene 384 puntos de ancho y esto aplica tanto para texto nativo como para imágenes.

El ancho máximo que deberías usar para imprimir imágenes es 384 pixeles, pues cada pixel de la imagen corresponde a un punto de la impresora.

Cuando imprimes texto nativo de ancho 1 soporta hasta 32 caracteres por línea sin romperse, pues cada char mide 12x24 puntos.

Si cambias el ancho o el alto solo multiplica el de la medida base por el modificador de ancho y alto.

Cantidad de caracteres

Cuando tiene la fuente con 1 de ancho y 1 de alto la impresora soporta máximo 32 caracteres por línea. Si imprimimos más entonces se van a bajar automáticamente

Ancho de imagen

Las impresoras térmicas no tienen límite en el alto de los recibos más allá del papel disponible, pero sí que lo tienen para el ancho.

Si queremos imprimir una imagen en una impresora térmica de 58 milímetros el máximo ancho es de 384 pixeles.

Obviamente podemos imprimir imágenes más anchas, para ello hay que ajustarlas antes, pero yo estoy escribiendo las capacidades máximas para cuando queremos que la relación sea 1:1 en la imagen impresa para que un pixel corresponda a un punto en la impresora térmica.

Cantidad de puntos

Entonces las impresoras térmicas de 58 mm por lo general tienen 384 puntos a lo ancho. Cada carácter, con la fuente por defecto, ocupa 12 puntos de ancho, por ello es que el límite es de 32 caracteres.

Otros tamaños de fuentes

Con las impresoras térmicas podemos cambiar el ancho y el alto de la fuente. Si la fuente de ancho 1 ocupa 12 puntos (para que quepan 32 caracteres en una línea) entonces la fuente de ancho 2 ocupa 24 puntos y caben 16 en una línea.

Así hasta llegar al ancho de 8 en donde cada char ocupa 96 puntos, con un máximo de 4 caracteres por línea.

Y en la altura no hay límite pero un carácter de ancho 8 y alto 8 va a ocupar (8x12) 96 puntos de ancho y (8x24) 192 de alto

Demostración en imágenes

Primero veamos el conteo de caracteres por línea y en cómo hacer que una imagen ocupe todo el ancho del ticket.

La imagen original sin imprimir es la siguiente. Observa que tiene marcado su borde y que también tiene texto así como algunas formas. También fíjate en que tiene un pixel color negro arriba de la M de AMERICANO.

Imagen digital que se va a imprimir

Al imprimir la imagen notamos que está ocupando todo el ancho y que es verdad que el máximo es 32 caracteres por línea. Otra cosa importante es que cada pixel corresponde a un punto ya que si revisas bien verás el punto impreso en el tiquet en el mismo lugar que la imagen digital (arriba de la M).

Recibo impreso en impresora térmica. Se aprecia una imagen

Hagamos otra prueba para ver qué tan precisos pueden salir nuestros pixeles. Tengo esta cuadrícula en donde cada cuadro mide 12x24.

Imagen digital de cuadrícula (12x24) para imprimir en thermal printer más adelante

Para esto tuve que imprimir la imagen de la cuadrícula, devolver el papel e imprimir texto nativo, demostrando 2 cosas: qué tan precisos salen los trazos en imágenes y cuántos pixeles o puntos ocupan los caracteres.

Demostrar cuánto ocupa cada carácter en una impresora térmica

Y con esto quedan demostradas las medidas de una impresora térmica. Puede parecer obvio una vez que ya está escrito, pero a mí siempre se me olvida cuántos caracteres tengo disponibles o cuál es el ancho máximo

Más precisión

Solo para probar, generé una cuadrícula donde cada cuadro mide 3 pixeles, y más adelante hice una prueba con 2 pixeles.

Juzga el resultado por ti mismo, ya que a mí me parece que sí se puede apreciar la cuadrícula al menos en la de 3 pixeles

Ticket impreso en impresora térmica con cuadrícula de 3 y 2 pixeles

Más de 32 caracteres por línea

Estuve haciendo pruebas y se pueden imprimir al menos 51 caracteres en una sola línea sin que pierda legibilidad. Esto es desde mi percepción, pero si haces pruebas más específicas y con determinada fuente puede que logres todavía más letras por línea sin sacrificar legibilidad.

Esto obviamente tiene un límite pues en algún momento cada letra ocupará un pixel y ya no será legible.

Aquí estoy usando la fuente LXGW WenKai Mono TC.

Ticket impreso en impresora térmica con 51 caracteres por línea

Código fuente generación de imágenes

Lo hice en Go. Para la cuadrícula es:


func otraImagen(ancho, alto float64) error {
	dc := gg.NewContext(int(ancho), int(alto))
	dc.SetRGB(1, 1, 1) // Fondo
	dc.Clear()
	dc.SetRGB(0, 0, 0) // Color del texto
	// Línea
	dc.SetLineWidth(1.0)
	anchoCuad := 3
	altoCuad := 3
	for i := 0; i <= int(ancho); i += anchoCuad {
		dc.DrawLine(float64(i), 0, float64(i), alto)
	}
	for i := 0; i <= int(alto); i += altoCuad {
		dc.DrawLine(0, float64(i), ancho, float64(i))
	}
	dc.Stroke()
	return dc.SavePNG(fmt.Sprintf("cuad.png"))
}

Para escribir texto en una imagen y romperlo en varias líneas de ser necesario:

func dibujarConFuenteDeUsuario2(ancho, alto, tamañoFuente float64, espaciadoDeLineas float64, texto string, alineacion int, ubicacionFuente string) error {
	dc := gg.NewContext(int(ancho), int(alto))
	dc.SetRGB(1, 1, 1) // Fondo
	dc.Clear()
	dc.SetRGB(0, 0, 0) // Color del texto
	if err := dc.LoadFontFace(ubicacionFuente, tamañoFuente); err != nil {
		return err
	}
	dc.DrawStringWrapped(
		texto,
		0, 0,
		0, 0,
		ancho, espaciadoDeLineas,
		gg.Align(alineacion))

	// Rectángulo
	dc.DrawRectangle(0, 0, ancho, alto) // x, y, ancho, alto
	dc.Stroke()
	return dc.SavePNG(fmt.Sprintf("text.png"))
}

Usando mi plugin

He hecho todas mis pruebas usando mi plugin para impresoras térmicas ya que me permite imprimir imágenes y texto nativo enviándole JSON.

Aquí dejo el JSON que he usado por si alguien lo necesita. En mi caso PT es el nombre de mi impresora.


{
    "operaciones": [
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "CargarImagenLocalEImprimir",
            "argumentos": [
                "C:\\Users\\parzibyte\\Desktop\\texto\\text.png",
                384,
                0,
                false
            ]
        },
        {
            "nombre": "Feed",
            "argumentos": [
                1
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Somos exactamente 32 caracteres!"
            ]
        },
        {
            "nombre": "Feed",
            "argumentos": [
                1
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Si nos pasamos entonces nos bajamos a la siguiente línea automáticamente, cortando el texto"
            ]
        },
        {
            "nombre": "Feed",
            "argumentos": [
                1
            ]
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                2,
                1
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Dieciséis letras"
            ]
        },
        {
            "nombre": "Feed",
            "argumentos": [
                1
            ]
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                8,
                1
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Hola"
            ]
        },
        {
            "nombre": "Feed",
            "argumentos": [
                1
            ]
        }
    ],
    "nombreImpresora": "PT",
    "serial": ""
}

Aproximación de 80mm

No tengo impresora de 80mm pero le caben 41 caracteres por línea, así que imagino que tiene 492 puntos.

Esta fotografía es cortesía de un cliente que tiene una impresora de 80 milímetros.

Demostración de que un ticket de 80mm permite hasta 41 letras por línea
Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto