diff --git a/imprimir_etiquetas_termica.php b/imprimir_etiquetas_termica.php index cd2ed669..c08a320c 100644 --- a/imprimir_etiquetas_termica.php +++ b/imprimir_etiquetas_termica.php @@ -66,45 +66,44 @@ if (empty($codes)) { align-items: center; overflow: hidden; text-align: center; - padding: 5mm 1mm 1mm 1mm; /* Restaurado a 5mm para bajar el contenido */ + padding: 2mm 1mm 1mm 1mm; /* Reducido para dar más espacio vertical */ border: 0.1mm solid #eee; /* Guía visual en pantalla */ } .producto-nombre { font-size: 6px; - font-weight: normal; - line-height: 1; - margin-bottom: 1mm; + line-height: 1.1; + margin-bottom: 1.5mm; /* Aumentado para separar del código */ text-transform: uppercase; - white-space: nowrap; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; overflow: hidden; - text-overflow: ellipsis; width: 100%; + word-break: break-all; } .barcode-container { - height: 9mm; /* Revertido a 9mm */ + height: 9mm; display: flex; justify-content: center; align-items: center; - margin: 1mm 0; /* Margen vertical */ - padding: 0 1mm; + margin: 0.8mm 0; /* Ajuste milimétrico vertical */ + padding: 0 1mm; box-sizing: border-box; - width: 100%; /* Ocupa el ancho de la etiqueta para centrar */ + width: 100%; } .barcode-container svg { - height: 9mm; /* Revertido a 9mm */ + height: 9mm; width: auto; display: block; margin: 0 auto; - shape-rendering: crispEdges; } .sku-text { font-size: 7px; - font-weight: normal; - margin-top: 0.5mm; + margin-top: 1.2mm; /* Aumentado para separar del código */ letter-spacing: 0.5px; } @@ -152,8 +151,8 @@ if (empty($codes)) {
getBarcode($code, 1.1, 72); + // widthFactor 1.0 y barReduction 0.15 para separar un poco más las barras + echo $generator->getBarcode($code, 1.0, 72, 'black', 0.15); ?>
diff --git a/includes/barcode_generator.php b/includes/barcode_generator.php index f7fb133a..46144c60 100644 --- a/includes/barcode_generator.php +++ b/includes/barcode_generator.php @@ -11,7 +11,7 @@ class BarcodeGenerator $this->barcode_codes = $this->getCode128Map(); } - public function getBarcode($code, $widthFactor = 1, $height = 50, $foregroundColor = 'black') + public function getBarcode($code, $widthFactor = 1, $height = 50, $foregroundColor = 'black', $barReduction = 0) { $barcodeData = $this->getBarcodeData($code); if (!$barcodeData) return ''; @@ -22,9 +22,12 @@ class BarcodeGenerator $barArray = str_split($barcodeData['bars']); for ($i = 0; $i < count($barArray); $i++) { - $width = $widthFactor * (int)$barArray[$i]; + $val = (int)$barArray[$i]; + $width = $widthFactor * $val; if ($i % 2 == 0) { // Even indices are bars, odd are spaces - $bars .= ''; + // Apply bar reduction to increase white space between bars + $drawWidth = max(0.4, $width - $barReduction); + $bars .= ''; } $x += $width; } @@ -43,12 +46,26 @@ class BarcodeGenerator $len = strlen($code); $indices = []; - $indices[] = 104; // Start B - - for ($i = 0; $i < $len; $i++) { - $val = $this->getCharValue('B', $code[$i]); - if ($val !== null) { - $indices[] = $val; + // Check if code is purely numeric and has even length for Code 128C + // Or just use Code 128B as fallback + if (ctype_digit($code) && $len >= 2) { + $indices[] = 105; // Start C + for ($i = 0; $i < $len; $i += 2) { + if ($i + 1 < $len) { + $indices[] = (int)substr($code, $i, 2); + } else { + // Odd number of digits, switch to B for the last one + $indices[] = 100; // Code B + $indices[] = $this->getCharValue('B', $code[$i]); + } + } + } else { + $indices[] = 104; // Start B + for ($i = 0; $i < $len; $i++) { + $val = $this->getCharValue('B', $code[$i]); + if ($val !== null) { + $indices[] = $val; + } } } diff --git a/test_etiquetas.php b/test_etiquetas.php index cca94260..5a293c5b 100644 --- a/test_etiquetas.php +++ b/test_etiquetas.php @@ -61,44 +61,43 @@ $generator = new BarcodeGenerator(); align-items: center; overflow: hidden; text-align: center; - padding: 5mm 1mm 1mm 1mm; /* Restaurado a 5mm para bajar el contenido */ + padding: 2mm 1mm 1mm 1mm; /* Reducido para dar más espacio vertical */ } .producto-nombre { font-size: 6px; - font-weight: normal; - line-height: 1; - margin-bottom: 1mm; + line-height: 1.1; + margin-bottom: 1.5mm; /* Aumentado para separar del código */ text-transform: uppercase; - white-space: nowrap; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; overflow: hidden; - text-overflow: ellipsis; width: 100%; + word-break: break-all; } .barcode-container { - height: 9mm; /* Revertido a 9mm */ + height: 9mm; display: flex; justify-content: center; align-items: center; - margin: 1mm 0; + margin: 0.8mm 0; /* Ajuste milimétrico vertical */ padding: 0 1mm; box-sizing: border-box; width: 100%; } .barcode-container svg { - height: 9mm; /* Revertido a 9mm */ + height: 9mm; width: auto; display: block; margin: 0 auto; - shape-rendering: crispEdges; } .sku-text { font-size: 7px; - font-weight: normal; - margin-top: 0.5mm; + margin-top: 1.2mm; /* Aumentado para separar del código */ letter-spacing: 0.5px; } @@ -132,32 +131,48 @@ $generator = new BarcodeGenerator();
+
OPCIÓN 1: ACTUAL
+
' . $generator->getBarcode($sku, 1.0, 72, 'black', 0.15) . '
+
' . $sku . '
+
'; + } + + // Fila 2: Reforzada (Líneas más gruesas) + foreach ($skus as $sku) { + echo '
+
OPCIÓN 2: REFORZADA
+
' . $generator->getBarcode($sku, 1.1, 72, 'black', 0.05) . '
+
' . $sku . '
+
'; + } + + // Fila 3: Contraste Alto (Líneas más finas) + foreach ($skus as $sku) { + echo '
+
OPCIÓN 3: FINAS
+
' . $generator->getBarcode($sku, 1.0, 72, 'black', 0.25) . '
+
' . $sku . '
+
'; + } ?> -
-
PRODUCTO
-
- getBarcode($sku, 1.1, 72); - ?> -
-
-
- -
-

✅ Ajustes de Escaneo y Compatibilidad:

+
+

🔬 Prueba de Grosor de Líneas:

    -
  • Fuente: Cambiada a Verdana (más legible en impresoras térmicas).
  • -
  • Texto: Grosor mantenido en "normal" para evitar empaste.
  • -
  • Barras más negras: Aplicado crispEdges para máxima nitidez.
  • -
  • Ancho de Barra: Factor 1.1 (ligeramente más gruesas para mayor contraste).
  • -
  • Altura: 9mm.
  • +
  • Opción 1 (Actual): El equilibrio que veníamos usando.
  • +
  • Opción 2 (Reforzada): Las líneas negras son más anchas. Útil si tu impresora imprime muy "pálido".
  • +
  • Opción 3 (Finas): Las líneas negras son más delgadas, dejando más espacio blanco. Útil si la tinta térmica se "chorrea" o expande mucho.
+

¿Cuál de las 3 filas escanea más rápido con tu lector?