Report Generator
Create professional, data-driven reports with charts, tables, and narrative text. Perfect for business reports, analytics dashboards, status updates, and automated reporting pipelines.
Quick Start
from scripts.report_gen import ReportGenerator
Create a simple report
report = ReportGenerator("Monthly Sales Report") report.add_text("This report summarizes sales performance for Q4 2024.") report.add_table(sales_data, title="Sales by Region") report.add_chart(sales_data, chart_type="bar", title="Revenue by Month") report.add_text("Key findings: Revenue increased 25% quarter-over-quarter.") report.generate().save("sales_report.pdf")
From template
report = ReportGenerator.from_template("executive_summary") report.set_data(data_dict) report.generate().save("exec_summary.pdf")
Features
-
Multiple Output Formats: PDF, HTML
-
Rich Content: Text, tables, charts, images, headers
-
Chart Types: Bar, line, pie, scatter, area, heatmap
-
Table Formatting: Auto-styling, conditional formatting
-
Templates: Pre-built report templates
-
Branding: Logo, colors, fonts, headers/footers
-
Sections: Table of contents, page numbers, appendices
-
Data Integration: CSV, DataFrame, dict inputs
API Reference
Initialization
New report
report = ReportGenerator("Report Title") report = ReportGenerator("Report Title", subtitle="Q4 2024 Analysis")
From template
report = ReportGenerator.from_template("quarterly_review")
With config
report = ReportGenerator("Title", config={ "page_size": "letter", "orientation": "portrait", "margins": {"top": 1, "bottom": 1, "left": 0.75, "right": 0.75} })
Report Metadata
Title and subtitle
report.set_title("Annual Report 2024") report.set_subtitle("Financial Performance Analysis")
Author and date
report.set_author("Analytics Team") report.set_date("December 2024") report.set_date_auto() # Use today
Organization
report.set_organization("Acme Corporation") report.set_logo("logo.png")
Adding Content
Text Content
Simple paragraph
report.add_text("This is a paragraph of analysis text.")
Styled text
report.add_text("Important finding!", style="highlight") report.add_text("Key metric: 42%", style="metric")
Headers
report.add_heading("Executive Summary", level=1) report.add_heading("Revenue Analysis", level=2) report.add_heading("By Region", level=3)
Bullet points
report.add_bullets([ "Revenue increased 25% YoY", "Customer acquisition up 15%", "Churn rate decreased to 3%" ])
Numbered list
report.add_numbered_list([ "Expand to European markets", "Launch mobile application", "Implement AI-driven analytics" ])
Tables
From DataFrame
import pandas as pd df = pd.DataFrame({ 'Region': ['North', 'South', 'East', 'West'], 'Revenue': [100000, 85000, 92000, 78000], 'Growth': ['12%', '8%', '15%', '5%'] }) report.add_table(df, title="Regional Performance")
From dict/list
data = [ {'Product': 'A', 'Sales': 1000, 'Profit': 200}, {'Product': 'B', 'Sales': 1500, 'Profit': 350} ] report.add_table(data, title="Product Summary")
With styling
report.add_table(df, title="Sales Data", highlight_max=['Revenue'], # Highlight max values highlight_min=['Growth'], # Highlight min values currency_cols=['Revenue'], # Format as currency percent_cols=['Growth'], # Format as percent align={'Region': 'left', 'Revenue': 'right'} )
Charts
Bar chart
report.add_chart( data=df, chart_type="bar", x="Region", y="Revenue", title="Revenue by Region" )
Line chart
report.add_chart( data=time_series_df, chart_type="line", x="Month", y=["Sales", "Forecast"], title="Sales Trend" )
Pie chart
report.add_chart( data=category_df, chart_type="pie", values="Amount", labels="Category", title="Budget Allocation" )
Chart options
report.add_chart( data=df, chart_type="bar", x="Region", y="Revenue", title="Revenue Analysis", color="#3498db", width=6, # inches height=4, show_values=True, show_legend=True )
Images
Add image
report.add_image("screenshot.png", caption="Dashboard View") report.add_image("diagram.png", width=5, caption="Architecture Diagram")
Special Elements
Page break
report.add_page_break()
Horizontal line
report.add_divider()
Spacer
report.add_spacer(height=0.5) # inches
Callout box
report.add_callout( "Key Insight: Customer retention improved 20% after implementing the new onboarding flow.", style="info" # info, warning, success, error )
Quote
report.add_quote( "Data is the new oil.", attribution="Clive Humby" )
Sections and Structure
Start a new section
report.start_section("Financial Analysis")
Add content to section
report.add_text("...") report.add_table(...)
End section
report.end_section()
Table of contents (auto-generated)
report.enable_toc()
Appendix
report.start_appendix() report.add_heading("Raw Data", level=2) report.add_table(raw_data)
Branding and Styling
Logo and organization
report.set_logo("logo.png", width=150) report.set_organization("Acme Corp")
Colors
report.set_colors( primary="#1e40af", # Headers, accents secondary="#6b7280", # Secondary text background="#ffffff" # Background )
Fonts
report.set_fonts( heading="Helvetica-Bold", body="Helvetica" )
Header and footer
report.set_header("Confidential - Internal Use Only") report.set_footer("Page {page} of {total}")
Watermark
report.set_watermark("DRAFT")
Templates
Available templates
report = ReportGenerator.from_template("executive_summary") report = ReportGenerator.from_template("quarterly_review") report = ReportGenerator.from_template("project_status") report = ReportGenerator.from_template("analytics_dashboard")
Template with data
report = ReportGenerator.from_template("monthly_metrics") report.set_data({ "period": "December 2024", "revenue": 1500000, "growth": 0.15, "customers": 5000, "charts": {"revenue_trend": trend_df} }) report.generate()
Generation and Export
Generate report
report.generate()
Save as PDF
report.save("report.pdf")
Save as HTML
report.save("report.html")
Get bytes
pdf_bytes = report.to_bytes() html_string = report.to_html()
Templates
Executive Summary
-
Title page
-
Key metrics highlights
-
Summary bullets
-
Charts section
-
Recommendations
Quarterly Review
-
Performance overview
-
Financial metrics
-
Comparison to previous quarter
-
Goals progress
-
Next quarter outlook
Project Status
-
Project overview
-
Timeline/milestones
-
Risks and issues
-
Team updates
-
Next steps
Analytics Dashboard
-
KPI cards
-
Multiple charts
-
Trend analysis
-
Data tables
-
Insights
CLI Usage
Generate from JSON config
python report_gen.py --config report_config.json --output report.pdf
With template
python report_gen.py --template executive_summary --data data.json --output summary.pdf
Quick report from CSV
python report_gen.py --csv data.csv --title "Data Report" --output report.pdf
CLI Arguments
Argument Description Default
--config
Report configuration JSON
--template
Template name
--data
Data JSON file
--csv
CSV data file
--title
Report title Report
--output
Output file path report.pdf
--format
Output format (pdf/html) pdf
Examples
Sales Report
report = ReportGenerator("Q4 Sales Report") report.set_subtitle("October - December 2024") report.set_organization("Sales Department") report.set_logo("company_logo.png")
report.add_heading("Executive Summary", level=1) report.add_text( "Q4 2024 showed strong performance across all regions, " "with total revenue reaching $4.2M, a 23% increase over Q3." )
report.add_callout( "Total Revenue: $4.2M (+23% QoQ)", style="success" )
report.add_heading("Regional Performance", level=2) report.add_chart(regional_data, "bar", x="Region", y="Revenue", title="Revenue by Region") report.add_table(regional_data, title="Detailed Metrics")
report.add_heading("Trends", level=2) report.add_chart(monthly_data, "line", x="Month", y="Revenue", title="Monthly Revenue Trend")
report.add_heading("Recommendations", level=1) report.add_bullets([ "Increase investment in high-growth East region", "Address declining West region performance", "Launch Q1 promotional campaign" ])
report.generate().save("q4_sales_report.pdf")
Analytics Dashboard
report = ReportGenerator("Marketing Analytics") report.set_date_auto()
KPI Summary
report.add_heading("Key Metrics", level=1) kpis = [ ["Visitors", "125,000", "+15%"], ["Conversions", "3,750", "+22%"], ["Revenue", "$187,500", "+18%"], ["CAC", "$45", "-8%"] ] report.add_table(kpis, headers=["Metric", "Value", "Change"])
Traffic Sources
report.add_heading("Traffic Sources", level=2) report.add_chart(traffic_df, "pie", values="Sessions", labels="Source", title="Traffic Distribution")
Conversion Funnel
report.add_heading("Conversion Funnel", level=2) report.add_chart(funnel_df, "bar", x="Stage", y="Users", title="Funnel Analysis", horizontal=True)
Trend Analysis
report.add_heading("Trends", level=2) report.add_chart(daily_df, "line", x="Date", y=["Visitors", "Conversions"], title="Daily Performance")
report.generate().save("marketing_dashboard.pdf")
Dependencies
reportlab>=4.0.0 Pillow>=10.0.0 pandas>=2.0.0 matplotlib>=3.7.0
Limitations
-
Charts rendered as static images in PDF
-
Complex layouts may need manual adjustment
-
Large datasets may impact performance
-
HTML output has basic styling (no interactive charts)