from reportlab.lib import colors from reportlab.lib.pagesizes import letter from reportlab.platypus import SimpleDocTemplate, Table, TableStyle class PDFReportGenerator: def __init__(self, report_title, data): self.report_title = report_title self.data = data def generate_pdf(self, output_file): doc = SimpleDocTemplate(output_file, pagesize=letter) report = [] # Title report.append(self.report_title) # Data Table table_data = [list(row) for row in self.data] table = Table(table_data) table.setStyle(TableStyle([('BACKGROUND', (0, 0), (-1, 0), colors.gray), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.beige), ('GRID', (0, 0), (-1, -1), 1, colors.black)])) report.append(table) doc.build(report) # Example usage: if __name__ == "__main__": report_title = "Monthly Sales Report" data = [ ["Date", "Product", "Quantity", "Revenue"], ["2024-03-01", "Product A", 100, "$5000"], ["2024-03-02", "Product B", 75, "$3750"], ["2024-03-03", "Product C", 120, "$6000"] ] output_file = "monthly_sales_report.pdf" pdf_generator = PDFReportGenerator(report_title, data) pdf_generator.generate_pdf(output_file)