Ver Mensaje Individual
  #5 (permalink)  
Antiguo 17/06/2015, 09:50
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Crear txt con php

Una vez tuve un problema similar, en principio el cliente los imprimia con una laser y todo andaba de maravillas, pero por cuestiones de costos desidio comprar una epson de matriz y todo el contenido se descajeto.

Tras investigar un poco descubri que el problema es que las impresoras de matriz no admiten el posicionamiento absoluto de de formas, solo imprimen caracteres de alto fijo.

Asi que lo hice fue lo siguiente: genere un archivo txt a mano con 500 renglones donde en cada renglon puse los numeros y las letras, luego, mande a imprimir ese txt sobre el un formulario preinpreso, luego, me fije cuantas letras entraban por renglon, cuantos renglones por pagina y cuales de esas letras encajaban en los campos a completar del preimpreso y en las posiciones que encontraba las cargaba en un array a modo de template, luego con esos datos armaba la pagina y funcionaba bastante bien, te paso un ejemplo:
Código PHP:
Ver original
  1. <?php
  2.     function txt_page($template, $data)
  3.     {
  4.         $page = "";
  5.         foreach($template["fields"] as $key => $dims)
  6.         {
  7.             // Default value.
  8.             $value = (isset($data[$key]) ? $data[$key] : "");
  9.             // Length of field.
  10.             $length = $dims[1]-$dims[0];
  11.            
  12.             $page = str_pad($page, $dims[0] - 1, " ", STR_PAD_LEFT).
  13.                     str_pad(substr($value, 0, $length), $length + 1, " ", STR_PAD_BOTH);        
  14.         }
  15.        
  16.         return str_pad($page, $template["length"], " ", STR_PAD_RIGHT);        
  17.     }
  18.    
  19.     // Supongamos que una pagina tiene 1000 caracteres, entre el 150 y el 200 va un nombre, y entre el 400 y el 430 va un teléfono, por decir alguna gilada, definimos el template asi:
  20.     $template = [
  21.         "length" => 1000,
  22.         "fields" => [
  23.             "nombre" => [150, 200],
  24.             "telefono" => [400, 430],
  25.         ]
  26.     ];
  27.  
  28.     // Luego cargamos los datos de algun lado, respetando siempre que las claves de aca son las mismas que las del template, o bien, alguna de las claves puede no estar.
  29.     $data = [ "nombre" => "NSD", "telefono" => 123456 ];
  30.    
  31.     echo txt_page($template, $data);

obviamente no debes imprimir nada de html, solo el texto plano, sin css ni javascript. hasta es recomendable cambiar manualmente los headers para indicar que lo que envias es text/plain, de esta forma te aseguras de que todo funcione bien.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios