diff --git a/imprimir_etiquetas.php b/imprimir_etiquetas.php index 60294981..65fafc7b 100644 --- a/imprimir_etiquetas.php +++ b/imprimir_etiquetas.php @@ -14,27 +14,30 @@ if (empty($codes)) { $display_name = count($product_names) > 0 ? "etiquetas_multiples" : str_replace(' ', '_', $single_product_name); $filename = $display_name . "_" . date("Y-m-d") . ".xls"; -// Funciones para generar el formato binario BIFF5 (Excel 97-2003) +// Funciones para generar el formato binario BIFF5 (Excel 5.0 / 95 / 97-2003 compatible) function xlsBOF() { - echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); + // 0x0809 = BOF, 0x0008 = Length, 0x0500 = Version (BIFF5), 0x0010 = Worksheet + echo pack("ssssss", 0x0809, 0x0008, 0x0500, 0x0010, 0x0, 0x0); } function xlsEOF() { - echo pack("ss", 0x0A, 0x00); + // 0x000A = EOF, 0x0000 = Length + echo pack("ss", 0x000A, 0x0000); } function xlsWriteLabel($Row, $Col, $Value) { $L = strlen($Value); - echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); + // 0x0204 = LABEL, Length = 8 + string length + echo pack("ssssss", 0x0204, 8 + $L, $Row, $Col, 0x0, $L); echo $Value; } -// Añadir registro de Codepage para que Excel reconozca el juego de caracteres Windows-1252 -function xlsCodepage() { - echo pack("sss", 0x0042, 0x0002, 0x04E4); // 1252 (Windows Latin 1) +function xlsDimensions($maxRow, $maxCol) { + // 0x0200 = DIMENSIONS, 0x000A = Length + echo pack("ssssss", 0x0200, 0x000A, 0, $maxRow, 0, $maxCol); } -// Configurar cabeceras para descarga de archivo binario XLS (Excel 97-2003) +// Configurar cabeceras para descarga de archivo binario XLS header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Cache-Control: max-age=0'); @@ -43,9 +46,11 @@ header('Content-Transfer-Encoding: binary'); // Iniciar el archivo Excel xlsBOF(); -xlsCodepage(); -// Escribir cabeceras de columnas +// Definir dimensiones (filas, columnas) +xlsDimensions(count($codes) + 1, 3); + +// Escribir cabeceras de columnas (usando Windows-1252 para compatibilidad) xlsWriteLabel(0, 0, mb_convert_encoding("Nombre del producto", 'Windows-1252', 'UTF-8')); xlsWriteLabel(0, 1, mb_convert_encoding("Codigo unico", 'Windows-1252', 'UTF-8')); xlsWriteLabel(0, 2, mb_convert_encoding("Codigo de barra (usar fuente)", 'Windows-1252', 'UTF-8')); @@ -54,8 +59,6 @@ xlsWriteLabel(0, 2, mb_convert_encoding("Codigo de barra (usar fuente)", 'Window $row = 1; foreach ($codes as $index => $code) { $p_name = isset($product_names[$index]) ? $product_names[$index] : $single_product_name; - - // Convertir a Windows-1252 para compatibilidad con el formato BIFF antiguo $p_name_encoded = mb_convert_encoding($p_name, 'Windows-1252', 'UTF-8'); xlsWriteLabel($row, 0, $p_name_encoded); @@ -66,4 +69,4 @@ foreach ($codes as $index => $code) { // Finalizar el archivo Excel xlsEOF(); -exit; \ No newline at end of file +exit; diff --git a/test_etiquetas.php b/test_etiquetas.php new file mode 100644 index 00000000..6327b083 --- /dev/null +++ b/test_etiquetas.php @@ -0,0 +1,124 @@ + + + +
+ +Nota: Al imprimir, asegúrate de seleccionar tu impresora REDPOS y en "Más ajustes" verifica que los márgenes estén en "Ninguno".
+