Spaces:
Sleeping
Sleeping
| # 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", "<br/>"), styles["BodyStyle"])) | |
| story.append(Spacer(1, 12)) | |
| # ---------- Answer ---------- | |
| story.append(Paragraph("Answer:", styles["HeadingStyle"])) | |
| story.append(Paragraph(answer.replace("\n", "<br/>"), styles["BodyStyle"])) | |
| doc.build(story) | |
| buffer.seek(0) | |
| return buffer | |