# src/pdf_utils.py from io import BytesIO from reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.lib.units import inch import os # ---------------- FONT REGISTRATION ---------------- FONT_DIR = "src/fonts" REGULAR_FONT = os.path.join(FONT_DIR, "NotoSansTamil-Regular.ttf") BOLD_FONT = os.path.join(FONT_DIR, "NotoSansTamil-Bold.ttf") pdfmetrics.registerFont(TTFont("Tamil", REGULAR_FONT)) pdfmetrics.registerFont(TTFont("Tamil-Bold", BOLD_FONT)) # ---------------- PDF GENERATOR ---------------- def answer_to_pdf(question: str, answer: str) -> BytesIO: buffer = BytesIO() doc = SimpleDocTemplate( buffer, pagesize=A4, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=72, ) styles = getSampleStyleSheet() styles.add( ParagraphStyle( name="TitleStyle", fontName="Tamil-Bold", fontSize=14, spaceAfter=12, ) ) styles.add( ParagraphStyle( name="HeadingStyle", fontName="Tamil-Bold", fontSize=11, spaceAfter=6, ) ) styles.add( ParagraphStyle( name="BodyStyle", fontName="Tamil", fontSize=11, leading=14, spaceAfter=6, ) ) story = [] # ---------- Title ---------- story.append(Paragraph("OTT Bot – Answer", styles["TitleStyle"])) story.append(Spacer(1, 12)) # ---------- Question ---------- story.append(Paragraph("Question:", styles["HeadingStyle"])) story.append(Paragraph(question.replace("\n", "
"), styles["BodyStyle"])) story.append(Spacer(1, 12)) # ---------- Answer ---------- story.append(Paragraph("Answer:", styles["HeadingStyle"])) story.append(Paragraph(answer.replace("\n", "
"), styles["BodyStyle"])) doc.build(story) buffer.seek(0) return buffer