/** * Génère et télécharge un rapport PDF de la simulation. * @param {Object} pkChart - L'instance Chart.js actuelle * @param {Object} patient - Les infos du patient { weight, age, height } * @param {String} mode - ESKETAMINE ou RACEMIQUE */ export function generatePDFReport(pkChart, patient, mode) { // jsPDF est chargé globalement via le CDN dans index.html const { jsPDF } = window.jspdf; // Format A4, orientation Paysage (landscape) idéal pour les graphiques const doc = new jsPDF('landscape', 'mm', 'a4'); // --- 1. En-tête du document --- doc.setFillColor(30, 41, 59); // Couleur bleue nuit (slate-800) doc.rect(0, 0, 297, 25, 'F'); doc.setTextColor(255, 255, 255); doc.setFontSize(18); doc.setFont("helvetica", "bold"); doc.text("KétaPK - Rapport de Simulation Pharmacocinétique", 14, 16); // --- 2. Informations de la simulation --- doc.setTextColor(50, 50, 50); doc.setFontSize(11); doc.setFont("helvetica", "normal"); const dateStr = new Date().toLocaleString('fr-FR'); // Colonne de gauche (Patient) doc.text(`Date de simulation : ${dateStr}`, 14, 35); doc.setFont("helvetica", "bold"); doc.text(`Mode sélectionné : ${mode}`, 14, 42); doc.text(`Patient : Poids ${patient.weight} kg | Âge ${patient.age} ans | Taille ${patient.height} cm`, 14, 49); // --- 3. Capture et insertion du Graphique --- // On récupère l'image du graphique sur fond blanc const chartImage = pkChart.toBase64Image('image/jpeg', 1.0); // Placement : x=14mm, y=60mm, largeur=260mm, hauteur=110mm doc.addImage(chartImage, 'JPEG', 14, 60, 260, 110); // --- 4. Pied de page --- doc.setFont("helvetica", "italic"); doc.setFontSize(9); doc.setTextColor(150, 150, 150); doc.text("Ce document est généré par KétaPK Web. Il est destiné uniquement à l'enseignement et ne doit pas être utilisé pour la conduite thérapeutique.", 14, 190); // --- 5. Téléchargement --- const fileName = `KetaPK_Rapport_${patient.weight}kg_${mode}.pdf`; doc.save(fileName); }