Foros del Web » Programando para Internet » PHP »

Separar array en varias páginas para crear factura en pdf

Estas en el tema de Separar array en varias páginas para crear factura en pdf en el foro de PHP en Foros del Web. Estoy programando una aplicación de facturación que me envia via mail la facturación mensual para lo cual me convierte los registros en pdf. Para ello ...
  #1 (permalink)  
Antiguo 26/11/2012, 13:06
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 2 meses
Puntos: 2
Pregunta Separar array en varias páginas para crear factura en pdf

Estoy programando una aplicación de facturación que me envia via mail la facturación mensual para lo cual me convierte los registros en pdf. Para ello estoy utilizando la libreria mpdf que se adapta a lo que necesito y he conseguido montar una demo en html en varias hojas sin problemas, pero.... ahora viene mi problema, ya se que en cada hoja entran 11 líneas y que en la que aparece el total debe tener como máximo 7 líneas para que entre la caja del total y que si tengo por ejemplo 22 lineas, me tiene que poner 11 en cada una de ellas y el total en una página nueva, pero me estoy haciendo un lio que no veas, alguien sabe como puedo plantear esto? Ahora mismo lo que tengo es un array que recorro para que me muestre los resultados de esta forma:

Código PHP:

$total_lines 
count($invoice_lines);
foreach (
$invoice_lines as $invoice_line) {

 echo 
$invoice_line->name."--".$invoice_line->quantity."--".$invoice_line->price;


Para que me ponga una nueva linea tengo que añadir en el hml un
<pagebreak />
y para que me aparezca la parte del total tengo que añadir esto:
<pagebreak type="ODD" odd-footer-name="html_myfooter2" odd-footer-value="1" />'

Alguen sabe hacer las condiciones necesarias para que lo de arriba se cumla?

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #2 (permalink)  
Antiguo 26/11/2012, 14:03
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 11 años, 4 meses
Puntos: 10
Respuesta: Separar array en varias páginas para crear factura en pdf

Perdona, pero no se si lo he entendido quieres el total de líneas de las dos páginas?.
__________________
_________________________

Homlyne - Soporte Online
  #3 (permalink)  
Antiguo 26/11/2012, 17:11
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 2 meses
Puntos: 2
Respuesta: Separar array en varias páginas para crear factura en pdf

Buenas, pues te comento, imaginamos que tenemos 22 registros, por lo que vamos a tener 2 hojas de 11 lineas, en la que en cada una de ellas tenemos que añadir un <pagebreak /> y como en este caso la página estaría completa con 11 registros y no tenemos espacio para el total ya que las máximas líneas que nos admite esa hoja con total son 7, pues deberíamos añadir una nueva página y en ella añadir el total, ahora bien si en vez de 22 tengo:

29 lineas, tendría 1 hoja de 11, otra de 11 y otra de 7 con el total.
30 lineas, tendría 1 hoja de 11, otra de 11, otra de 8 y otra con el total
25 lineas, tendría 1 hoja de 11, otra de 11 y otra de 3 con el total
9 lineas, tendría 1 hoja de 9 líneas y otra con el total
7 lineas, 1 hoja con 7 lineas y el total
5 lineas, 1 hoja con 5 lineas y el total

No se si así se entiende algo más
__________________
asp, php, .net, adaptandose a las necesidades
  #4 (permalink)  
Antiguo 27/11/2012, 05:09
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 11 años, 4 meses
Puntos: 10
Respuesta: Separar array en varias páginas para crear factura en pdf

Tendrías que utilizar bucles para aplicar pagebreak y una condición:

$total_lines = count($invoice_lines);
if($total_lines > 7){ //La condición SI el total de líneas es mayor a 7
$total_lines = floor(($total_lines / 11)) +1; // total de lineas partido por el limite en este caso 11, y para aplicar el total de factura es el +1
}
$count_page=1;
foreach ($invoice_lines as $invoice_line) {
if($count_page > 0 && $count_page < $total_lines){
echo '<pagebreak type="ODD" odd-footer-name="html_myfooter2" odd-footer-value="1">';
}

echo $invoice_line->name."--".$invoice_line->quantity."--".$invoice_line->price;

if($count_page > 0 && $count_page < $total_lines){
echo '</pagebreak>';
}
$count_page++;
}

Esto es un ejemplo si lo utilizas no te va a funcionar pero está sería la idea que me imagino que buscas, aplicandolo al primer ejemplo:

29 lineas, tendría 1 hoja de 11, otra de 11 y otra de 7 con el total.

El total de líneas al ser mayor que 7 realiza la division de (29/11=2,63.. + 1 ), saldría 3 páginas incluyendo el total y eso se aplica con condiciones a pagebreak.

Lo que faltaría es realizar el contador de líneas dentro del bucle para que los pagebreak se impriman después de 11.

Espero haberte ayudado.

Saludos.
__________________
_________________________

Homlyne - Soporte Online

Etiquetas: factura, html, páginas, pdf, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:00.