SetMargins(10, 10, 10); $pdf->SetAutoPageBreak(true, 10); $pdf->SetFont('Arial', '', 8); //// // 2. CREAR CARPETA TEMPORAL PARA LAS IMÁGENES $dir_temp = 'temp_qrs/'; if (!is_dir($dir_temp)) { mkdir($dir_temp, 0777, true); } $x_start = 10; $y_start = 10; $qr_count_on_page = 0; for ($i = 1; $i <= $cantidad_qrs; $i++) { // Si la página está llena, agrega una nueva if ($qr_count_on_page >= ($qrs_por_fila * $qrs_por_columna)) { $pdf->AddPage(); $qr_count_on_page = 0; } // 3. GENERAR EL CÓDIGO ÚNICO $sufijo = str_pad($i, 3, '0', STR_PAD_LEFT); $qr_data = $prefijo . $sufijo; $archivo_temp = $dir_temp . $qr_data . '.png'; // Generar la imagen QR temporalmente QRcode::png($qr_data, $archivo_temp, $nivel_correccion, $tamano_pixel, $margen); // 4. CALCULAR POSICIÓN $col = $qr_count_on_page % $qrs_por_fila; $row = floor($qr_count_on_page / $qrs_por_fila); $pos_x = $x_start + ($col * ($qr_tamano_mm + $padding_h)); $pos_y = $y_start + ($row * ($qr_tamano_mm + $padding_v + 4)); // +4 para el texto // 5. AGREGAR A LA PÁGINA PDF if ($qr_count_on_page === 0) { $pdf->AddPage(); } // Agregar la Imagen del QR (x, y, ancho, alto) $pdf->Image($archivo_temp, $pos_x, $pos_y, $qr_tamano_mm, $qr_tamano_mm, 'PNG'); // Agregar el texto (el ID) debajo del QR para facilitar el corte $pdf->SetXY($pos_x, $pos_y + $qr_tamano_mm); $pdf->Cell($qr_tamano_mm, 4, $qr_data, 0, 0, 'C'); $qr_count_on_page++; } // 6. LIMPIEZA Y SALIDA // Eliminar los archivos PNG temporales foreach (glob($dir_temp . '*.png') as $file) { unlink($file); } rmdir($dir_temp); // Forzar la descarga del PDF $pdf->Output('D', 'tickets_estacionamiento_' . date('Ymd') . '.pdf'); exit; // Asegurarse de que no haya más salida ?>