Class ReportePdfService
Utiliza la librería iText (OpenPDF) para la creación programática de documentos complejos, gestionando el diseño corporativo mediante la definición de paletas de colores, fuentes tipográficas y estructuras de tablas personalizadas.
Permite exportar tanto la vista detallada de los fichajes diarios como los resúmenes acumulados, proporcionando archivos listos para su impresión o almacenamiento digital.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final Colorprivate static final Colorprivate static final com.lowagie.text.Fontprivate static final com.lowagie.text.Fontprivate static final com.lowagie.text.Fontprivate static final com.lowagie.text.Fontprivate static final com.lowagie.text.Fontprivate static final Color -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidagregarCabeceras(com.lowagie.text.Document document, String empresa, String subtitulo) Construye y añade la sección de cabecera corporativa al documento PDF.private voidagregarCeldaCabecera(com.lowagie.text.pdf.PdfPTable table, String texto, Color colorFondo) Crea y añade una celda de estilo cabecera a una tabla.private voidagregarCeldaDato(com.lowagie.text.pdf.PdfPTable table, String texto) Crea y añade una celda de datos estándar a la tabla.private voidagregarFilaTotalDetalle(com.lowagie.text.pdf.PdfPTable table, long totalMinutos, long totalExtras) Añade una fila final a la tabla de detalle con los sumatorios generales de tiempo.private voidagregarFilaTotalResumen(com.lowagie.text.pdf.PdfPTable table, long totalDias, long totalMinutos, long totalExtras) Añade una fila de sumatorios finales a la tabla de resumen.private voidconfigurarPieDePagina(com.lowagie.text.Document document) Configura el pie de página automático para todas las hojas del documento.private StringformatearMinutos(Long minutosTotales) Utilidad para convertir una cantidad de minutos en un formato legible de horas y minutos.byte[]generarPdfDetalle(String nombreEmpresa, String subtituloFiltro, List<ReporteDetalleDTO> datos) Genera un archivo PDF con el desglose detallado de todos los fichajes realizados por la plantilla.byte[]generarPdfResumen(String nombreEmpresa, String subtituloFiltro, List<ReporteResumenDTO> datos) Genera un archivo PDF con los totales acumulados por cada empleado en el periodo seleccionado.
-
Field Details
-
COLOR_CORPORATIVO
-
GRIS_CLARO
-
COLOR_TOTALES
-
FUENTE_TITULO
private static final com.lowagie.text.Font FUENTE_TITULO -
FUENTE_SUBTITULO
private static final com.lowagie.text.Font FUENTE_SUBTITULO -
FUENTE_FECHA_GEN
private static final com.lowagie.text.Font FUENTE_FECHA_GEN -
FUENTE_CABECERA
private static final com.lowagie.text.Font FUENTE_CABECERA -
FUENTE_CELDA
private static final com.lowagie.text.Font FUENTE_CELDA
-
-
Constructor Details
-
ReportePdfService
public ReportePdfService()
-
-
Method Details
-
generarPdfDetalle
public byte[] generarPdfDetalle(String nombreEmpresa, String subtituloFiltro, List<ReporteDetalleDTO> datos) Genera un archivo PDF con el desglose detallado de todos los fichajes realizados por la plantilla.El documento resultante se configura automáticamente en orientación horizontal (Landscape) para facilitar la lectura de las múltiples columnas de datos (fechas, turnos, entradas, salidas, tiempos y extras). Incluye separadores visuales que agrupan los registros por empleado y departamento.
- Parameters:
nombreEmpresa- Nombre oficial de la empresa para ser mostrado en el encabezado principal.subtituloFiltro- Descripción textual de los filtros aplicados (ej: "Desde 01/01 al 31/01").datos- Lista de objetos DTO que contienen la información procesada de cada fichaje.- Returns:
- byte[] El contenido binario del archivo PDF generado, apto para ser enviado en una respuesta HTTP.
- Throws:
RuntimeException- Si se produce un fallo técnico inesperado durante el flujo de construcción del PDF.
-
generarPdfResumen
public byte[] generarPdfResumen(String nombreEmpresa, String subtituloFiltro, List<ReporteResumenDTO> datos) Genera un archivo PDF con los totales acumulados por cada empleado en el periodo seleccionado.A diferencia del reporte detallado, este documento se presenta en orientación vertical (Portrait) y se centra en métricas agregadas: total de días laborados, suma de horas trabajadas y acumulado de horas extraordinarias por cada trabajador.
Incluye una fila de totales generales al final de la tabla para facilitar la revisión rápida de costes y tiempos por parte del departamento de administración.
- Parameters:
nombreEmpresa- Nombre oficial de la empresa para el encabezado.subtituloFiltro- Descripción del rango temporal o filtros aplicados (ej: "Resumen Mensual - Marzo").datos- Lista de objetosReporteResumenDTOcon los totales consolidados.- Returns:
- byte[] El contenido binario del archivo PDF generado.
- Throws:
RuntimeException- Si ocurre un fallo técnico crítico durante el proceso de maquetación del documento.
-
agregarCabeceras
private void agregarCabeceras(com.lowagie.text.Document document, String empresa, String subtitulo) throws com.lowagie.text.DocumentException Construye y añade la sección de cabecera corporativa al documento PDF.Esta sección incluye:
- Nombre de la empresa en mayúsculas y fuente destacada.
- Título descriptivo del reporte (Detallado o Resumen).
- Marca de tiempo precisa con el momento exacto de la exportación.
- Parameters:
document- El objetoDocumentde iText en proceso de construcción.empresa- Nombre de la organización a mostrar.subtitulo- Texto secundario que describe el tipo de reporte y filtros.- Throws:
com.lowagie.text.DocumentException- Si se produce un error al intentar añadir elementos al flujo del documento.
-
configurarPieDePagina
private void configurarPieDePagina(com.lowagie.text.Document document) Configura el pie de página automático para todas las hojas del documento. Incluye el nombre de la aplicación y la numeración de página.- Parameters:
document- El objeto Documento al que se le aplicará el pie de página.
-
agregarCeldaCabecera
private void agregarCeldaCabecera(com.lowagie.text.pdf.PdfPTable table, String texto, Color colorFondo) Crea y añade una celda de estilo cabecera a una tabla. Utiliza el color corporativo y texto en blanco con alineación centrada.- Parameters:
table- La tabla de iText a la que se añadirá la celda.texto- El contenido textual de la cabecera.colorFondo- El color de fondo para la celda.
-
agregarCeldaDato
Crea y añade una celda de datos estándar a la tabla.- Parameters:
table- La tabla de destino.texto- El valor a insertar en la celda.
-
agregarFilaTotalDetalle
private void agregarFilaTotalDetalle(com.lowagie.text.pdf.PdfPTable table, long totalMinutos, long totalExtras) Añade una fila final a la tabla de detalle con los sumatorios generales de tiempo.- Parameters:
table- Tabla de iText en construcción.totalMinutos- Suma total de minutos reales trabajados.totalExtras- Suma total de minutos extra generados.
-
agregarFilaTotalResumen
private void agregarFilaTotalResumen(com.lowagie.text.pdf.PdfPTable table, long totalDias, long totalMinutos, long totalExtras) Añade una fila de sumatorios finales a la tabla de resumen.- Parameters:
table- Tabla de destino.totalDias- Suma total de días trabajados reportados.totalMinutos- Suma total de minutos reales.totalExtras- Suma total de minutos extra.
-
formatearMinutos
Utilidad para convertir una cantidad de minutos en un formato legible de horas y minutos. Ejemplo: 125 -> "2h 5min"- Parameters:
minutosTotales- Cantidad de minutos a formatear.- Returns:
- String Cadena de texto formateada para el PDF.
-