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.

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).

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

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.

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

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.

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.
