Cómo hacer la paginación de una factura

Publicado el 26-07-2010

Hace unos días llegó a mí un proyecto de lo más interesante: el propietario de una web con venta online gestionaba las facturas desde la misma página web y tenía el problema de que a la hora de imprimir las facturas no estaban bien paginadas.

Como amante de la algorítmica que siempre he sido desde que descubrí esta “disciplina” en primero de carrera este proyecto me resultó un reto muy atractivo.

Conceptos previos:

Una factura está formada por una cabecera, las líneas de detalle de la factura y el pié de factura.

Cuando una factura impresa ocupa varias páginas, cada una de las páginas debe contener la cabecera, el número de página que es y el número total de páginas. Sólo la última de las páginas deberá contener el pié de factura.

Problema:

Si mostramos una factura en una página web está bien si se muestra la cabecera, las líneas y luego el pié, pero si a la hora de imprimir nos va a ocupar más de una página deberemos cumplir el requisito de repetir las cabeceras.

Solución:

En mi caso tuve que realizar las modificaciones en PHP, pero escribo el algoritmo en pseudocódigo para que sea entendible para todos los programadores.

Vamos a tener en cuenta que antes de ponernos a mostrar la factura por pantalla vamos a tener en variables los datos de cabecera, los datos del pie de factura y un array con las líneas de detalle de la factura.

fin_lineas_factura = falso
pagina_actual = 0
linea_actual = 0
total_lineas = tamaño(lineas_factura)
altura_hoja = 28
mientras (no (fin_lineas_factura)) hacer
    altura_informacion = 0
    pagina_actual = pagina_actual + 1
    escribir: cabecera_factura()
    altura_informacion = altura_informacion + 3
    escribir: "página " pagina_actual
    altura_informacion = altura_informacion + 1
    escribir: mostrar_inicio_tabla_detalles_factura (código, concepto, importe, descuento, etc.)
    mientras  ( (linea_actual < total_lineas) y (altura_informacion < altura_hoja) hacer
        escribir: lineas_factura[linea_actual]
        altura_informacion = altura_informacion + 1
        linea_actual = linea_actual + 1
    fin mientras
    si (linea_actual = total_lineas) hacer
        fin_lineas_factura = cierto
        escribir: pie_factura()
    si no hacer
        pagina_actual = pagina_actual + 1
        escribir: "continúa por la página "  página_actual
        salto_de_pagina*
    fin si
fin mientras

 

Para hacer el salto de página hay que utilizar unas desconocidas propiedades CSS2:

<div style="page-break-after: always;;">&nbsp;</div>

Espero que os sea de utilidad.

Categorías: Algoritmos

Comparte este artículo

Comenta este artículo

Web Project & Online Marketing Proogresa S.L. © 2020 | Condiciones Legales | Política de Privacidad | Política de Cookies | Mapa del Sitio | Compliance


¡Seguimos trabajando! Nos hemos adaptado a las medidas excepcionales que estamos viviendo y seguimos trabajando al 100% de nuestras capacidades. Más info.