from fpdf import FPDF def sanitize_text(text): # Replaces problematic characters with safe equivalents return text.replace("●", "*").encode("latin-1", "replace").decode("latin-1") def generate_pdf(results, overall_score, filename="ContractRiskReport.pdf"): pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.cell(200, 10, txt="Contract Risk Analysis Report", ln=True, align="C") pdf.ln() pdf.cell(200, 10, txt=f"Overall Risk Score: {overall_score:.2f}", ln=True) for r in results: pdf.set_text_color(255, 0, 0) if r['risk_level'] == "High" else pdf.set_text_color(0) clause_text = sanitize_text(r['clause']) # 👈 sanitize here pdf.multi_cell(0, 10, f"[{r['risk_level']}] {clause_text}") pdf.output(filename) return filename