from reportlab.lib.pagesizes import letter from reportlab.platypus import ( SimpleDocTemplate, Paragraph, Spacer, ) from reportlab.lib.styles import getSampleStyleSheet from io import BytesIO def generate_pdf(user_data, roi_data, synopsis): # Create PDF buffer buffer = BytesIO() # Create document doc = SimpleDocTemplate( buffer, pagesize=letter, rightMargin=40, leftMargin=40, topMargin=40, bottomMargin=40, ) # Load styles styles = getSampleStyleSheet() # Store PDF elements elements = [] # ========================= # Title # ========================= title = Paragraph( "AI ROI Savings Report", styles['Title'] ) elements.append(title) elements.append(Spacer(1, 20)) # ========================= # User Details Section # ========================= user_heading = Paragraph( "User Details", styles['Heading2'] ) elements.append(user_heading) elements.append(Spacer(1, 10)) for key, value in user_data.items(): text = Paragraph( f"{key}: {value}", styles['BodyText'] ) elements.append(text) elements.append(Spacer(1, 5)) elements.append(Spacer(1, 20)) # ========================= # ROI Results Section # ========================= roi_heading = Paragraph( "ROI Calculation Results", styles['Heading2'] ) elements.append(roi_heading) elements.append(Spacer(1, 10)) for key, value in roi_data.items(): text = Paragraph( f"{key}: INR {value}", styles['BodyText'] ) elements.append(text) elements.append(Spacer(1, 5)) elements.append(Spacer(1, 20)) # ========================= # Synopsis Section # ========================= synopsis_heading = Paragraph( "Project Synopsis", styles['Heading2'] ) elements.append(synopsis_heading) elements.append(Spacer(1, 12)) # Split synopsis into paragraphs paragraphs = synopsis.split("\n") for para in paragraphs: para = para.strip() if para: synopsis_para = Paragraph( para, styles['BodyText'] ) elements.append(synopsis_para) elements.append(Spacer(1, 8)) # ========================= # Footer # ========================= elements.append(Spacer(1, 20)) footer = Paragraph( "Generated using AI ROI Calculator", styles['Italic'] ) elements.append(footer) # Build PDF doc.build(elements) # Get PDF data pdf = buffer.getvalue() buffer.close() return pdf