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)