Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
sistemas
/
activosFijos
:
pdf.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php require_once('tcpdf/tcpdf.php'); // TCPDF versión 6.4.4 compatible con PHP 5.5+ include("../connection.php"); // Función para convertir imágenes a JPG si es necesario function convertirAJPG($archivo_origen, $mime_type) { try { $imagen = null; switch($mime_type) { case 'image/png': $imagen = imagecreatefrompng($archivo_origen); break; case 'image/gif': $imagen = imagecreatefromgif($archivo_origen); break; case 'image/webp': if (function_exists('imagecreatefromwebp')) { $imagen = imagecreatefromwebp($archivo_origen); } break; } if ($imagen) { $temp_jpg = tempnam(sys_get_temp_dir(), 'converted_') . '.jpg'; // Crear fondo blanco para imágenes con transparencia $fondo = imagecreatetruecolor(imagesx($imagen), imagesy($imagen)); $blanco = imagecolorallocate($fondo, 255, 255, 255); imagefill($fondo, 0, 0, $blanco); imagecopy($fondo, $imagen, 0, 0, 0, 0, imagesx($imagen), imagesy($imagen)); imagejpeg($fondo, $temp_jpg, 90); imagedestroy($imagen); imagedestroy($fondo); return $temp_jpg; } } catch (Exception $e) { // Si falla la conversión, retornar false } return false; } $con = connection(); // Verificar si se ha enviado el formulario if (isset($_POST['generar_pdf'])) { // Obtener los filtros del formulario $filtro_numero_acta = $_POST['numero_acta']; $filtro_tipo = $_POST['tipo']; $filtro_equipo = $_POST['equipo']; $filtro_fecha_inicio = $_POST['fecha_inicio']; $filtro_fecha_fin = $_POST['fecha_fin']; // Construir la misma consulta SQL que en buscarActivo.php $sql = "SELECT * FROM bajaActivos WHERE 1=1"; if (!empty($filtro_numero_acta)) { $sql .= " AND numero_acta LIKE '%$filtro_numero_acta%'"; } if (!empty($filtro_tipo)) { $sql .= " AND tipo LIKE '%$filtro_tipo%'"; } if (!empty($filtro_equipo)) { $sql .= " AND equipo LIKE '%$filtro_equipo%'"; } if (!empty($filtro_fecha_inicio) && !empty($filtro_fecha_fin)) { $sql .= " AND fecha BETWEEN '$filtro_fecha_inicio' AND '$filtro_fecha_fin'"; } $query = mysqli_query($con, $sql); $primer_acta = 'N/A'; if ($fila_primera = mysqli_fetch_assoc($query)) { $primer_acta = $fila_primera['numero_acta']; // Reposicionar el puntero del resultado para poder usarlo en el while luego mysqli_data_seek($query, 0); } if (!$query) { die('Error en la consulta SQL: ' . mysqli_error($con)); } // Crear nueva instancia de TCPDF $pdf = new TCPDF('L', PDF_UNIT, 'A4', true, 'UTF-8', false); // 'L' para orientación horizontal // Establecer información del documento $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Avicampo'); $pdf->SetTitle('Reporte de Baja de Activos Fijos'); $pdf->SetSubject('Reporte de Activos'); // Configurar márgenes $pdf->SetMargins(15, 30, 15); $pdf->SetHeaderMargin(5); $pdf->SetFooterMargin(10); // Configurar salto de página automático $pdf->SetAutoPageBreak(TRUE, 25); // Establecer fuente $pdf->SetFont('helvetica', '', 10); // Agregar página $pdf->AddPage(); // ENCABEZADO CON IMAGEN // Función para detectar tipo de imagen y convertir si es necesario function procesarImagenEncabezado($ruta_imagen) { if (!file_exists($ruta_imagen)) { return false; } $info = getimagesize($ruta_imagen); $tipo = $info[2]; // Si es PNG, convertir a JPG temporalmente if ($tipo == IMAGETYPE_PNG) { $imagen = imagecreatefrompng($ruta_imagen); $temp_jpg = tempnam(sys_get_temp_dir(), 'header_') . '.jpg'; // Crear fondo blanco para PNGs transparentes $fondo = imagecreatetruecolor(imagesx($imagen), imagesy($imagen)); $blanco = imagecolorallocate($fondo, 255, 255, 255); imagefill($fondo, 0, 0, $blanco); imagecopy($fondo, $imagen, 0, 0, 0, 0, imagesx($imagen), imagesy($imagen)); imagejpeg($fondo, $temp_jpg, 90); imagedestroy($imagen); imagedestroy($fondo); return $temp_jpg; } // Si es JPEG, usar directamente if ($tipo == IMAGETYPE_JPEG) { return $ruta_imagen; } // Si es JPG, usar directamente return $ruta_imagen; } $logo_path = '../img/encabezado.jpg'; // Buscar JPG primero if (!file_exists($logo_path)) { $logo_path = '../img/encabezado.png'; // Si no existe, buscar PNG } if (!file_exists($logo_path)) { $logo_path = '../img/encabezado.jpeg'; // Si no existe, buscar JPEG } $imagen_procesada = procesarImagenEncabezado($logo_path); if ($imagen_procesada) { $pdf->Image($imagen_procesada, 15, 10, 267, 30, 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false); // Si creamos un archivo temporal, eliminarlo if ($imagen_procesada != $logo_path) { unlink($imagen_procesada); } } // Mover cursor después del encabezado $pdf->Ln(35); // TÍTULO PRINCIPAL $pdf->SetFont('helvetica', 'B', 16); $pdf->Cell(0, 10, 'ACTA DE BAJA DE ACTIVOS FIJOS', 0, 1, 'C'); $pdf->Cell(0, 6, 'Número de Acta: ' . $primer_acta, 0, 1, 'R'); // FECHA ACTUAL $pdf->SetFont('helvetica', '', 10); $fecha_actual = date('d/m/Y H:i:s'); $pdf->Cell(0, 6, 'Fecha de generación: ' . $fecha_actual, 0, 1, 'R'); $pdf->Ln(5); // OBJETIVOS $pdf->SetFont('helvetica', 'B', 12); $pdf->Cell(0, 8, 'OBJETIVOS', 0, 1, 'L'); $pdf->SetFont('helvetica', '', 10); $objetivo_text = 'Dar de baja a los artículos del área de sistemas, los cuales ya no cuentan con las condiciones para darles utilidad dentro de la organización por daño total.'; $pdf->MultiCell(0, 6, $objetivo_text, 0, 'J'); $pdf->Ln(5); // DETERMINACIONES $pdf->SetFont('helvetica', 'B', 12); $pdf->Cell(0, 8, 'DETERMINACIONES', 0, 1, 'L'); $pdf->SetFont('helvetica', '', 10); $pdf->Cell(0, 6, 'Se da de baja al siguiente material:', 0, 1, 'L'); $pdf->Ln(3); // TABLA DE DATOS if (mysqli_num_rows($query) > 0) { // Encabezados de la tabla $pdf->SetFont('helvetica', 'B', 9); $pdf->SetFillColor(200, 200, 200); // Definir anchos de columnas para orientación horizontal $w = array(25, 20, 20, 35, 25, 30, 30, 25, 25, 25); // Ajustar según necesidad $pdf->Cell($w[0], 7, 'Nombre', 1, 0, 'C', 1); $pdf->Cell($w[1], 7, 'Cargo', 1, 0, 'C', 1); $pdf->Cell($w[2], 7, 'Tipo', 1, 0, 'C', 1); $pdf->Cell($w[3], 7, 'Motivo', 1, 0, 'C', 1); $pdf->Cell($w[4], 7, 'Equipo', 1, 0, 'C', 1); $pdf->Cell($w[5], 7, 'Referencia', 1, 0, 'C', 1); $pdf->Cell($w[6], 7, 'numero_acta', 1, 0, 'C', 1); $pdf->Cell($w[7], 7, 'Serial', 1, 0, 'C', 1); $pdf->Cell($w[8], 7, 'Fecha', 1, 1, 'C', 1); // Datos de la tabla $pdf->SetFont('helvetica', '', 9); $imagenes_evidencia = array(); $hashes_imagenes = array(); // Para detectar duplicados while ($row = mysqli_fetch_array($query)) { $pdf->Cell($w[0], 6, substr($row['nombre'], 0, 20), 1, 0, 'L'); $pdf->Cell($w[1], 6, substr($row['cargo'], 0, 15), 1, 0, 'L'); $pdf->Cell($w[2], 6, substr($row['tipo'], 0, 15), 1, 0, 'L'); $pdf->Cell($w[3], 6, substr($row['motivo'], 0, 25), 1, 0, 'L'); $pdf->Cell($w[4], 6, substr($row['equipo'], 0, 20), 1, 0, 'L'); $pdf->Cell($w[5], 6, substr($row['referencia'], 0, 25), 1, 0, 'L'); $pdf->Cell($w[6], 6, substr($row['numero_acta'], 0, 25), 1, 0, 'L'); $pdf->Cell($w[7], 6, substr($row['serial'], 0, 25), 1, 0, 'L'); $pdf->Cell($w[8], 6, $row['fecha'], 1, 1, 'L'); // Guardar imagen si existe if (!empty($row['evidencia'])) { $hash = md5($row['evidencia']); // Hash para identificar duplicados if (!in_array($hash, $hashes_imagenes)) { $imagenes_evidencia[] = $row['evidencia']; $hashes_imagenes[] = $hash; } } } } $pdf->Ln(10); // REGISTRO FOTOGRÁFICO if (!empty($imagenes_evidencia)) { $pdf->AddPage(); // Nueva página para las imágenes $pdf->SetFont('helvetica', 'B', 12); $pdf->Cell(0, 8, 'REGISTRO FOTOGRÁFICO', 0, 1, 'L'); $pdf->Ln(5); $x = 20; // Posición X inicial $y = 50; // Posición Y inicial $img_width = 70; // ← AUMENTA ESTE VALOR para imágenes más anchas $img_height = 40; // ← AUMENTA ESTE VALOR para imágenes más altas $margin = 10; // ← Puedes aumentar el margen entre imágenes $images_per_row = 3; // ← Reduce este número si las imágenes son muy grandes $current_image = 0; foreach ($imagenes_evidencia as $imagen_blob) { // Detectar tipo de imagen desde BLOB $finfo = new finfo(FILEINFO_MIME_TYPE); $mime_type = $finfo->buffer($imagen_blob); // Crear archivo temporal con extensión correcta $extension = ''; $formato_tcpdf = 'JPG'; // Por defecto JPG para TCPDF switch($mime_type) { case 'image/jpeg': $extension = '.jpg'; $formato_tcpdf = 'JPG'; break; case 'image/png': $extension = '.png'; $formato_tcpdf = 'PNG'; break; case 'image/gif': $extension = '.gif'; $formato_tcpdf = 'GIF'; break; default: $extension = '.jpg'; $formato_tcpdf = 'JPG'; } $temp_file = tempnam(sys_get_temp_dir(), 'img_') . $extension; file_put_contents($temp_file, $imagen_blob); // Calcular posición $col = $current_image % $images_per_row; $row = floor($current_image / $images_per_row); $pos_x = $x + ($col * ($img_width + $margin)); $pos_y = $y + ($row * ($img_height + $margin + 10)); // Verificar si necesitamos nueva página if ($pos_y + $img_height + $margin > 190) { // Ajuste dinámico $pdf->AddPage(); $pdf->Ln(5); $pdf->SetFont('helvetica', '', 10); $y = 50; // Reiniciar posición Y inicial $pos_y = $y; $row = 0; $col = 0; // Ajustar current_image para que no salte de posición $current_image = 0; } // Insertar imagen con formato detectado try { $pdf->Image($temp_file, $pos_x, $pos_y, $img_width, $img_height, $formato_tcpdf); } catch (Exception $e) { // Si falla, intentar convertir a JPG if ($formato_tcpdf != 'JPG') { $imagen_convertida = convertirAJPG($temp_file, $mime_type); if ($imagen_convertida) { $pdf->Image($imagen_convertida, $pos_x, $pos_y, $img_width, $img_height, 'JPG'); unlink($imagen_convertida); } } } // Eliminar archivo temporal unlink($temp_file); $current_image++; } } // FIRMAS - Nueva página $pdf->AddPage(); $pdf->SetFont('helvetica', 'B', 12); $pdf->Cell(0, 8, 'FIRMAS', 0, 1, 'C'); $pdf->Ln(5); $pdf->SetFont('helvetica', 'B', 10); $pdf->Cell(0, 6, 'FIRMAS (Garantes)', 0, 1, 'C'); $pdf->Ln(10); // Diseño de firmas en dos columnas $col_width = 130; $line_height = 20; // Primera fila de firmas $pdf->SetFont('helvetica', '', 9); // JEFE DE SISTEMAS $pdf->Cell($col_width, $line_height, '', 'B', 0, 'C'); $pdf->Cell(10, $line_height, '', 0, 0, 'C'); // Espacio $pdf->Cell($col_width, $line_height, '', 'B', 1, 'C'); $pdf->SetFont('helvetica', 'B', 9); $pdf->Cell($col_width, 6, 'JEFE DE SISTEMAS', 0, 0, 'C'); $pdf->Cell(10, 6, '', 0, 0, 'C'); $pdf->Cell($col_width, 6, 'JEFE AMBIENTAL', 0, 1, 'C'); $pdf->SetFont('helvetica', '', 8); $pdf->Cell($col_width, 5, 'ARLEY RESTREPO', 0, 0, 'C'); $pdf->Cell(10, 5, '', 0, 0, 'C'); $pdf->Cell($col_width, 5, 'MAIRA ALEXANDRA CLAVIJO LOPEZ', 0, 1, 'C'); $pdf->Ln(15); // Segunda fila de firmas $pdf->SetFont('helvetica', '', 9); $pdf->Cell($col_width, $line_height, '', 'B', 0, 'C'); $pdf->Cell(10, $line_height, '', 0, 0, 'C'); $pdf->Cell($col_width, $line_height, '', 'B', 1, 'C'); $pdf->SetFont('helvetica', 'B', 9); $pdf->Cell($col_width, 6, 'AUXILIAR DE COSTOS', 0, 0, 'C'); $pdf->Cell(10, 6, '', 0, 0, 'C'); $pdf->Cell($col_width, 6, 'AUDITOR', 0, 1, 'C'); $pdf->SetFont('helvetica', '', 8); $pdf->Cell($col_width, 5, 'LUIS AMAYA', 0, 0, 'C'); $pdf->Cell(10, 5, '', 0, 0, 'C'); $pdf->Cell($col_width, 5, 'SEBASTIAN MATURANA LLANO', 0, 1, 'C'); $pdf->Ln(15); // Tercera fila - AUTORIZADO (centrado) $pdf->SetFont('helvetica', '', 9); $pdf->Cell(0, $line_height, '', 'B', 1, 'C'); $pdf->SetFont('helvetica', 'B', 9); $pdf->Cell(0, 6, 'AUTORIZADO', 0, 1, 'C'); $pdf->Cell(0, 6, 'GERENCIA ADMINISTRATIVA', 0, 1, 'C'); $pdf->SetFont('helvetica', '', 8); $pdf->Cell(0, 5, 'SANDRA INES RUIZ AGUILAR', 0, 1, 'C'); // Pie de página $pdf->Ln(10); $pdf->SetFont('helvetica', '', 8); $pdf->Cell(0, 5, '© Avicampo ' . date('Y'), 0, 1, 'C'); // Generar nombre de archivo $fecha_actual = date('Y-m-d_H-i-s'); $nombre_archivo = "Reporte_Activos_Fijos_$fecha_actual.pdf"; // Enviar el PDF al navegador $pdf->Output($nombre_archivo, 'D'); // 'D' para descarga, 'I' para mostrar en navegador } else { // Redirigir si no se accede correctamente header("Location: buscarActivo.php"); exit(); } ?>