`;
elements.audienceResults.innerHTML += cardHTML;
});
elements.resultsSection.classList.remove('hidden');
};
const handleDownloadPdf = () => {
const { jsPDF } = window.jspdf;
if (!jsPDF || !analysisResults.stats) { return; }
const doc = new jsPDF({ orientation: 'portrait', unit: 'in', format: 'letter' });
const { stats, originalText } = analysisResults;
const margin = 0.75;
const pageWidth = doc.internal.pageSize.getWidth();
let currentY = 0;
// PDF Header
doc.setFillColor('#4338ca'); // indigo-700
doc.rect(0, 0, pageWidth, 1.6, 'F');
doc.setFont('helvetica', 'bold'); doc.setFontSize(22); doc.setTextColor('#ffffff');
doc.text('Readability Audit', margin, 0.9);
doc.setFontSize(11); doc.setTextColor('#e0e7ff'); // indigo-100
doc.text(`Analysis based on the Flesch-Kincaid Grade Level metric.`, margin, 1.2);
currentY = 2.2;
// Overall Score Section
doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor('#1f2937');
doc.text('OVERALL SCORE', margin, currentY);
doc.setDrawColor('#e5e7eb'); doc.line(margin, currentY + 0.05, pageWidth - margin, currentY + 0.05);
currentY += 0.4;
doc.setFont('helvetica', 'bold'); doc.setFontSize(48); doc.setTextColor('#4f46e5');
doc.text(stats.grade.toString(), margin, currentY + 0.3);
doc.setFont('helvetica', 'normal'); doc.setFontSize(11); doc.setTextColor('#374151');
const interpretation = getInterpretation(stats.grade);
doc.text(interpretation, margin + 1.5, currentY + 0.2);
currentY += 1.0;
// Audience Suitability Table
doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor('#1f2937');
doc.text('AUDIENCE SUITABILITY', margin, currentY);
doc.line(margin, currentY + 0.05, pageWidth - margin, currentY + 0.05);
currentY += 0.3;
const tableHeader = [['Audience Profile', 'Required Level', 'Assessment']];
const tableBody = audiences.map(aud => {
const suitable = stats.grade <= aud.level;
return [aud.name, `< ${aud.level}.0`, suitable ? 'SUITABLE' : 'TOO COMPLEX'];
});
const startX = margin;
const colWidths = [2.5, 1.5, 2.0];
doc.setFont('helvetica', 'bold'); doc.setFontSize(10); doc.setTextColor('#4b5563');
doc.text(tableHeader[0][0], startX, currentY);
doc.text(tableHeader[0][1], startX + colWidths[0], currentY);
doc.text(tableHeader[0][2], startX + colWidths[0] + colWidths[1], currentY);
currentY += 0.1;
doc.setDrawColor('#d1d5db');
doc.line(margin, currentY, pageWidth - margin, currentY);
currentY += 0.2;
doc.setFont('helvetica', 'normal'); doc.setFontSize(10);
tableBody.forEach(row => {
doc.setTextColor('#1f2937');
doc.text(row[0], startX, currentY);
doc.text(row[1], startX + colWidths[0], currentY);
doc.setTextColor(row[2] === 'SUITABLE' ? '#166534' : '#991b1b');
doc.text(row[2], startX + colWidths[0] + colWidths[1], currentY);
currentY += 0.25;
});
// Original Text
if (currentY > 8) { doc.addPage(); currentY = margin; }
else { currentY += 0.5; }
doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor('#1f2937');
doc.text('ORIGINAL TEXT', margin, currentY);
doc.line(margin, currentY + 0.05, pageWidth - margin, currentY + 0.05);
currentY += 0.3;
doc.setFont('times', 'normal'); doc.setFontSize(10); doc.setTextColor('#4b5563');
const textLines = doc.splitTextToSize(originalText, pageWidth - margin * 2);
doc.text(textLines, margin, currentY);
doc.save('Readability-Audit.pdf');
};
elements.analyzeTextBtn.addEventListener('click', analyzeText);
elements.downloadPdfBtn.addEventListener('click', handleDownloadPdf);
});
