Múltiples líneas en la descripción de los artículos

Ayer Roberto publicó este comentario en el artículo sobre Codeka MX:

«Hola ha todos este es un excelente programa CODEKA, me gustaría saber si hay una forma de realizar esto en la descripción al facturar, es decir escribir más en descripción del producto, por ejemplo ahora acepta como 50 carateres, y si escribo más, no hace el salto de línea, si no que se borran las demas letras, y se truncan en la misma linea. por ejemplo hace esto:

implantación y mantenimento de sold

y quiero esto:

implantación y mantenimento de soldura para
rayos x de segunda generacion.

Que acepte mas en descripción, que se pueda describir mas el producto o servicio, y que de su salto de línea, en la misma descripción-Gracias a todos por sus aportaciones.»

Veamos como resolver esto, primero y antes que nada, no esta de más hacer un respaldo al archivo imprimir_factura.php que esta en el directorio fpdf de codeka mx. Si algo sale mal siempre podemos regresar a nuestra versión anterior.

Ahora si, manos a la obra !!!. Al abrir el archivo imprimir_factura.php, alrededor de la línea 96 nos encontramos con el código que se encarga de mostrar la descripción en la factura.

$acotado = substr(mysql_result($rs_articulos,0,"descripcion"), 0, 45);
$pdf->Cell(112,4,$acotado,0,0,‘L’);

El culpable de que aparezcan las descripciones recortadas es la función substr de PHP, esta se encarga de limitar el texto a 45 letras. Podríamos aumentar el tamaño pero eso ocasionaría que el texto se empalmara con el precio unitario y con el subtotal.

Así que cambiaremos el código anterior por este:

$y = $pdf->GetY();
$acotado = mysql_result($rs_articulos,0,"descripcion");
$pdf->MultiCell(115,4,$acotado,0,‘L’); $pdf->SetXY(149,$y);

La función GetY nos guardará la posición de Y dentro del documento y lo almacenamos en una variable, al terminar de escribir la descripción regresamos nuestra posición a este valor para que el precio unitario y el subtotal aparezcan alineados con el resto.

Para mostrar la descripción, en lugar de usar la función Cell ahora usamos MultiCell que permite varias líneas en una celda. Eso hará el truco.

Un poco más adelante nos encontraremos con este código:

$pdf->Cell(20,4,$importe2,0,0,‘R’);
$pdf->Ln(10);

En este caso cambié el parámetro de la función Ln de 5 a 10 para que hiciera un salto más grande y no se empalmaran los renglones.

Y eso es todo. Al final la factura debe de ser muy similar a esta:

Varias líneas en la descripción de las facturas

Siguiendo esta lógica podrás modificar cualquier reporte de Codeka MX para que muestre varias líneas en la descripción de los articulos o cualquier otro campo que necesites.

6 comentarios en «Múltiples líneas en la descripción de los artículos»

  1. Una parte del codigo es el Siguiente:

    $pdf->SetFont(‘Arial’, ‘B’, 8);
    $pdf->Ln(3);
    $pdf->Multicell(120,8,»NOMBRE DEL SERVIDOR PUBLICO DE LA CUSTODIA DEL ACTIVO FIJO:\n».$_POST[‘nombre’].$_POST[‘tel’].$_POST[‘direccion’],1);

    Responder
  2. Buenas tardes! muy buen ejemplo, yo estoy realizando un formato de impresión para un Hospital, ya lo tengo en un 90% , estoy usando la función MULTICELL solo que al cargar los datos de la BD, los que son muy extensos de escritura hacen que el cuadro del MULTICELL se haga más grande y así pierde el formato del PDF, me podrían ayudar en decirme cómo hacer para que el MULTICELL sea estático y en las cadenas más largas en lugar de cambiar el cuadro, lo que cambie sea la letra a más pequeña.
    ¡¡ESPERO PRONTO SU RESPUESTA, GRACIAS!!

    Responder
  3. Buena solucion!! felicitaciones.

    <

    p>El unico problema es agregar otra linea despues de una linea con descripción larga. Como calcular la altura de la descripcion?
    Poner :

    $y2 = $this->GetY();
    

    Despues del MultiCell para saber cual fue la Y que genero la altura de la descripcion.

    despues solo pones ;

    $space = (isset($y2) ? $y2- $y : 0) + 2;
    $this->Ln($space);
    

    saludos

    Responder
  4. no me han servido estas funciones lo tengo asi, esta ese una parte del código de imprimir_factura:

          $acotado = substr(mysql_result($rs_articulos,0,"descripcion"), 0, 50);
          $pdf->Cell(-15);
          $pdf->Cell(100,4,$acotado,0,0,'L');
    
    
     //$y = $pdf->GetY();
     //$acotado = mysql_result($rs_articulos,0,"descripcion");
     //$pdf->MultiCell(100,4,$acotado,0,'L'); $pdf->SetXY(100,$y);

      $precio2= number_format(mysql_result($resultado2,$lineas,"precio"),2,".",",");
      $pdf->Cell(4,4,$precio2,0,0,'R');
    

      if (mysql_result($resultado2,$lineas,"dcto")==0)
      {
      $pdf->Cell(15,4,"",0,0,'C');
      }
      else
       {
        $pdf->Cell(15,4,mysql_result($resultado2,$lineas,"dcto") . " %",0,0,'C');
       }
    

    Responder

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.