ReportLab PDF Master — Branded Audit PDF Generator
Triggers: pdf report, audit pdf, reportlab, generate pdf, create pdf, 11-page, branded pdf
HARD LAWS (never break these)
- Always import: from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
- Always use: from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
- Colors: HexColor('#XXXXXX') — never rgb()
- Page size: A4 or letter — never custom unless specified
- Fonts: registerFont before use — Helvetica always available as fallback
- Tables: col widths must sum to page_width - left_margin - right_margin
- Images: check file exists before ImageReader — never assume path valid
- Styles: always deepcopy base style before modifying
- No bare except — always catch specific exceptions
- Test render before delivery — open file, check page count
- Brand palette: fetch from client URL using colorthief/requests
- Output: always ~/Downloads/ — never Desktop
QUICK START
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.lib.colors import HexColor
doc = SimpleDocTemplate("~/Downloads/audit.pdf", pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm)
styles = getSampleStyleSheet()
story = []
# Add content → doc.build(story)
1---2name: reportlab-pdf-master3description: ReportLab PDF Master — Branded Audit PDF Generator4---5# ReportLab PDF Master — Branded Audit PDF Generator6## Triggers: pdf report, audit pdf, reportlab, generate pdf, create pdf, 11-page, branded pdf78## HARD LAWS (never break these)91. Always import: from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle102. Always use: from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle113. Colors: HexColor('#XXXXXX') — never rgb()124. Page size: A4 or letter — never custom unless specified135. Fonts: registerFont before use — Helvetica always available as fallback146. Tables: col widths must sum to page_width - left_margin - right_margin157. Images: check file exists before ImageReader — never assume path valid168. Styles: always deepcopy base style before modifying179. No bare except — always catch specific exceptions1810. Test render before delivery — open file, check page count1911. Brand palette: fetch from client URL using colorthief/requests2012. Output: always ~/Downloads/ — never Desktop2122## QUICK START23```python24from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak25from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle26from reportlab.lib.pagesizes import A427from reportlab.lib import colors28from reportlab.lib.units import cm29from reportlab.lib.colors import HexColor3031doc = SimpleDocTemplate("~/Downloads/audit.pdf", pagesize=A4,32 leftMargin=2*cm, rightMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm)33styles = getSampleStyleSheet()34story = []35# Add content → doc.build(story)36```