Physical Pharmacy Pharmacy Orientation History & Literature of Pharmacy Physico-Chemical Principles (a) Solutions (b) Solubilization (c) Adsorption (d) Ionization (e) Hydrolysis (f) Micromeritics Dispersions (a) Colloids (b) Emulsions (c) Suspensions Rheology Physicochemical Processes (a) Precipitation (b) Crystallization (c) Distillation (d) Miscellaneous Processes Extraction Processes Rate and Order of Reaction Kinetic Principles & Stability Testing Create a Study table complete this whole syllabus 8 June 2026 at 3am in the night

Here's your Physical Pharmacy study schedule to complete the entire syllabus by June 8, 2026 at 3:00 AM - that's roughly 42 hours from now (June 6, 9:17 AM).

๐Ÿ“š Physical Pharmacy - Complete Study Schedule

June 6 (9:17 AM) โ†’ June 8 (3:00 AM)


#TopicSubtopicsStart TimeEnd TimeDurationStatus
1Pharmacy OrientationIntroduction to pharmacy, branches, roles of pharmacist, regulatory bodiesJun 6, 9:17 AMJun 6, 10:15 AM~1 hrโฌœ
2History & Literature of PharmacyAncient pharmacy, evolution, key milestones, pharmacy journals & referencesJun 6, 10:15 AMJun 6, 11:30 AM1.25 hrโฌœ
3SolutionsTypes of solutions, concentration expressions, colligative properties, ideal vs real solutionsJun 6, 11:30 AMJun 6, 1:30 PM2 hrโฌœ
โ€”โ˜• Lunch Breakโ€”Jun 6, 1:30 PMJun 6, 2:15 PM45 minโ€”
4SolubilizationMechanisms, factors affecting solubility, cosolvency, micellar solubilization, surfactantsJun 6, 2:15 PMJun 6, 4:00 PM1.75 hrโฌœ
5AdsorptionTypes (physical vs chemical), isotherms (Freundlich, Langmuir), factors, applicationsJun 6, 4:00 PMJun 6, 5:30 PM1.5 hrโฌœ
6IonizationAcids/bases, pH, buffers, Henderson-Hasselbalch, pKa, degree of ionizationJun 6, 5:30 PMJun 6, 7:30 PM2 hrโฌœ
โ€”๐Ÿฝ๏ธ Dinner Breakโ€”Jun 6, 7:30 PMJun 6, 8:15 PM45 minโ€”
7HydrolysisTypes (acid/base/enzymatic), kinetics, factors affecting hydrolysis, drug stability implicationsJun 6, 8:15 PMJun 6, 9:45 PM1.5 hrโฌœ
8MicromeriticsParticle size, size distribution, methods of determination, surface area, flow propertiesJun 6, 9:45 PMJun 6, 11:45 PM2 hrโฌœ
โ€”๐Ÿ˜ด SleepEssential restJun 6, 11:45 PMJun 7, 6:00 AM6.25 hrโ€”
9ColloidsTypes, properties (Tyndall, electrophoresis), stability, DLVO theory, zeta potentialJun 7, 6:00 AMJun 7, 8:00 AM2 hrโฌœ
10EmulsionsO/W & W/O types, emulsifying agents, HLB scale, preparation, stability testsJun 7, 8:00 AMJun 7, 9:30 AM1.5 hrโฌœ
โ€”โ˜• Breakfast Breakโ€”Jun 7, 9:30 AMJun 7, 10:00 AM30 minโ€”
11SuspensionsFlocculated vs deflocculated, settling, Stokes' law, rheology of suspensions, formulationJun 7, 10:00 AMJun 7, 11:30 AM1.5 hrโฌœ
12RheologyNewtonian/non-Newtonian flow, viscosity, thixotropy, dilatancy, instrumentsJun 7, 11:30 AMJun 7, 1:30 PM2 hrโฌœ
โ€”๐Ÿฝ๏ธ Lunch Breakโ€”Jun 7, 1:30 PMJun 7, 2:15 PM45 minโ€”
13PrecipitationSupersaturation, nucleation, crystal growth, factors, prevention in formulationsJun 7, 2:15 PMJun 7, 3:30 PM1.25 hrโฌœ
14CrystallizationTheory, methods (evaporation, cooling), polymorphism, habit modification, applicationsJun 7, 3:30 PMJun 7, 5:00 PM1.5 hrโฌœ
15DistillationSimple, fractional, steam distillation, vacuum distillation, principles & applicationsJun 7, 5:00 PMJun 7, 6:15 PM1.25 hrโฌœ
16Miscellaneous ProcessesFiltration, drying, evaporation, granulation - key principlesJun 7, 6:15 PMJun 7, 7:30 PM1.25 hrโฌœ
โ€”๐Ÿฝ๏ธ Dinner Breakโ€”Jun 7, 7:30 PMJun 7, 8:15 PM45 minโ€”
17Extraction ProcessesSolid-liquid, liquid-liquid extraction, partition coefficient, percolation, macerationJun 7, 8:15 PMJun 7, 9:45 PM1.5 hrโฌœ
18Rate & Order of ReactionZero, first, second order; half-life; rate constants; integrated rate equations; graphical methodsJun 7, 9:45 PMJun 7, 11:45 PM2 hrโฌœ
โ€”๐Ÿ’ค Short NapPower rest before final stretchJun 7, 11:45 PMJun 8, 1:00 AM1.25 hrโ€”
19Kinetic Principles & Stability TestingArrhenius equation, accelerated stability, shelf life, ICH guidelines, degradation pathwaysJun 8, 1:00 AMJun 8, 3:00 AM2 hrโฌœ
โœ…DONE BY 3:00 AM June 8โ€”โ€”โ€”โ€”๐ŸŽฏ

โฑ๏ธ Time Summary

CategoryTime Allocated
Study Sessions (19 topics)~30 hours
Breaks (meals, short breaks)~3 hrs 45 min
Sleep (night of Jun 6-7)6 hrs 15 min
Power nap (Jun 7-8)1 hr 15 min
Total Span~42 hours

๐Ÿ“Œ Study Tips for This Schedule

TipDetail
Formula-heavy topicsSolutions, Ionization, Rate/Order of Reaction - keep a formula sheet handy
Diagram topicsAdsorption isotherms, Rheology curves, Colloid diagrams - sketch as you study
Most overlapPrecipitation + Crystallization can be studied together (shared concepts)
Don't skip sleepThe 6-hour sleep on Jun 6-7 night is non-negotiable for retention
Revision passUse the final 30 min of each session to re-read your notes from that topic
Toughest blocksRate & Order + Stability Testing scheduled at 10 PM - tackle with coffee โ˜•

Good luck! You've got exactly the right amount of time to cover everything comfortably if you stick to this schedule. ๐ŸŽฏ

Create pdf file

Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace/physical-pharmacy

Running Command

mkdir -p /home/daytona/workspace/physical-pharmacy

Writing File

~/physical-pharmacy/generate_schedule.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.pdfgen import canvas

OUTPUT = "/home/daytona/workspace/physical-pharmacy/Physical_Pharmacy_Study_Schedule.pdf"

# โ”€โ”€ colour palette โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
DARK_BLUE   = colors.HexColor("#1a237e")
MED_BLUE    = colors.HexColor("#283593")
ACCENT_BLUE = colors.HexColor("#3949ab")
LIGHT_BLUE  = colors.HexColor("#e8eaf6")
TEAL        = colors.HexColor("#00695c")
TEAL_LIGHT  = colors.HexColor("#e0f2f1")
AMBER       = colors.HexColor("#e65100")
AMBER_LIGHT = colors.HexColor("#fff3e0")
GREEN       = colors.HexColor("#2e7d32")
GREEN_LIGHT = colors.HexColor("#e8f5e9")
GREY_BG     = colors.HexColor("#f5f5f5")
WHITE       = colors.white
BLACK       = colors.HexColor("#212121")
BREAK_COLOR = colors.HexColor("#eceff1")
BREAK_TEXT  = colors.HexColor("#607d8b")

styles = getSampleStyleSheet()

def H(text, size=16, color=DARK_BLUE, align=TA_CENTER, bold=True):
    return Paragraph(text, ParagraphStyle(
        "h", fontName="Helvetica-Bold" if bold else "Helvetica",
        fontSize=size, textColor=color, alignment=align,
        spaceAfter=2, spaceBefore=2))

def P(text, size=9, color=BLACK, align=TA_LEFT):
    return Paragraph(text, ParagraphStyle(
        "p", fontName="Helvetica", fontSize=size,
        textColor=color, alignment=align, leading=12))

def PB(text, size=9, color=BLACK, align=TA_LEFT):
    return Paragraph(f"<b>{text}</b>", ParagraphStyle(
        "pb", fontName="Helvetica-Bold", fontSize=size,
        textColor=color, alignment=align, leading=12))

# โ”€โ”€ schedule data โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
schedule = [
    # (num, topic, subtopics, start, end, duration, type)
    # type: 'study' | 'break' | 'sleep' | 'nap' | 'done'
    ("1",  "Pharmacy Orientation",
     "Intro to pharmacy, branches, roles of pharmacist, regulatory bodies",
     "Jun 6 ยท 9:17 AM", "Jun 6 ยท 10:15 AM", "~1 hr", "study"),

    ("2",  "History & Literature of Pharmacy",
     "Ancient pharmacy, evolution, key milestones, pharmacy journals & references",
     "Jun 6 ยท 10:15 AM", "Jun 6 ยท 11:30 AM", "1.25 hr", "study"),

    ("3",  "Solutions",
     "Types, concentration expressions, colligative properties, ideal vs real solutions",
     "Jun 6 ยท 11:30 AM", "Jun 6 ยท 1:30 PM", "2 hr", "study"),

    ("โ€”",  "โ˜•  Lunch Break", "โ€”",
     "Jun 6 ยท 1:30 PM", "Jun 6 ยท 2:15 PM", "45 min", "break"),

    ("4",  "Solubilization",
     "Mechanisms, factors affecting solubility, cosolvency, micellar solubilization, surfactants",
     "Jun 6 ยท 2:15 PM", "Jun 6 ยท 4:00 PM", "1.75 hr", "study"),

    ("5",  "Adsorption",
     "Types (physical vs chemical), Freundlich & Langmuir isotherms, factors, applications",
     "Jun 6 ยท 4:00 PM", "Jun 6 ยท 5:30 PM", "1.5 hr", "study"),

    ("6",  "Ionization",
     "Acids/bases, pH, buffers, Henderson-Hasselbalch equation, pKa, degree of ionization",
     "Jun 6 ยท 5:30 PM", "Jun 6 ยท 7:30 PM", "2 hr", "study"),

    ("โ€”",  "๐Ÿฝ  Dinner Break", "โ€”",
     "Jun 6 ยท 7:30 PM", "Jun 6 ยท 8:15 PM", "45 min", "break"),

    ("7",  "Hydrolysis",
     "Types (acid/base/enzymatic), kinetics, factors affecting hydrolysis, drug stability",
     "Jun 6 ยท 8:15 PM", "Jun 6 ยท 9:45 PM", "1.5 hr", "study"),

    ("8",  "Micromeritics",
     "Particle size, size distribution, methods of determination, surface area, flow properties",
     "Jun 6 ยท 9:45 PM", "Jun 6 ยท 11:45 PM", "2 hr", "study"),

    ("โ€”",  "๐Ÿ˜ด  Sleep", "Essential rest โ€” do not skip",
     "Jun 6 ยท 11:45 PM", "Jun 7 ยท 6:00 AM", "6.25 hr", "sleep"),

    ("9",  "Colloids",
     "Types, Tyndall effect, electrophoresis, stability, DLVO theory, zeta potential",
     "Jun 7 ยท 6:00 AM", "Jun 7 ยท 8:00 AM", "2 hr", "study"),

    ("10", "Emulsions",
     "O/W & W/O types, emulsifying agents, HLB scale, preparation, stability tests",
     "Jun 7 ยท 8:00 AM", "Jun 7 ยท 9:30 AM", "1.5 hr", "study"),

    ("โ€”",  "โ˜•  Breakfast Break", "โ€”",
     "Jun 7 ยท 9:30 AM", "Jun 7 ยท 10:00 AM", "30 min", "break"),

    ("11", "Suspensions",
     "Flocculated vs deflocculated, settling, Stokes' law, rheology, formulation",
     "Jun 7 ยท 10:00 AM", "Jun 7 ยท 11:30 AM", "1.5 hr", "study"),

    ("12", "Rheology",
     "Newtonian/non-Newtonian flow, viscosity, thixotropy, dilatancy, instruments",
     "Jun 7 ยท 11:30 AM", "Jun 7 ยท 1:30 PM", "2 hr", "study"),

    ("โ€”",  "๐Ÿฝ  Lunch Break", "โ€”",
     "Jun 7 ยท 1:30 PM", "Jun 7 ยท 2:15 PM", "45 min", "break"),

    ("13", "Precipitation",
     "Supersaturation, nucleation, crystal growth, factors, prevention in formulations",
     "Jun 7 ยท 2:15 PM", "Jun 7 ยท 3:30 PM", "1.25 hr", "study"),

    ("14", "Crystallization",
     "Theory, methods (evaporation/cooling), polymorphism, habit modification, applications",
     "Jun 7 ยท 3:30 PM", "Jun 7 ยท 5:00 PM", "1.5 hr", "study"),

    ("15", "Distillation",
     "Simple, fractional, steam, vacuum distillation โ€” principles & applications",
     "Jun 7 ยท 5:00 PM", "Jun 7 ยท 6:15 PM", "1.25 hr", "study"),

    ("16", "Miscellaneous Processes",
     "Filtration, drying, evaporation, granulation โ€” key principles",
     "Jun 7 ยท 6:15 PM", "Jun 7 ยท 7:30 PM", "1.25 hr", "study"),

    ("โ€”",  "๐Ÿฝ  Dinner Break", "โ€”",
     "Jun 7 ยท 7:30 PM", "Jun 7 ยท 8:15 PM", "45 min", "break"),

    ("17", "Extraction Processes",
     "Solid-liquid & liquid-liquid extraction, partition coefficient, percolation, maceration",
     "Jun 7 ยท 8:15 PM", "Jun 7 ยท 9:45 PM", "1.5 hr", "study"),

    ("18", "Rate & Order of Reaction",
     "Zero/first/second order; half-life; rate constants; integrated rate equations; graphs",
     "Jun 7 ยท 9:45 PM", "Jun 7 ยท 11:45 PM", "2 hr", "study"),

    ("โ€”",  "๐Ÿ’ค  Power Nap", "Essential rest before final stretch",
     "Jun 7 ยท 11:45 PM", "Jun 8 ยท 1:00 AM", "1.25 hr", "nap"),

    ("19", "Kinetic Principles & Stability Testing",
     "Arrhenius equation, accelerated stability, shelf life, ICH guidelines, degradation pathways",
     "Jun 8 ยท 1:00 AM", "Jun 8 ยท 3:00 AM", "2 hr", "study"),

    ("โœ…", "SYLLABUS COMPLETE!", "All 19 topics covered โ€” you're ready!",
     "Jun 8 ยท 3:00 AM", "โ€”", "โ€”", "done"),
]

# โ”€โ”€ summary data โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
summary = [
    ("Study Sessions (19 topics)", "~30 hours"),
    ("Meals & Short Breaks", "~3 hrs 45 min"),
    ("Night Sleep (Jun 6-7)", "6 hrs 15 min"),
    ("Power Nap (Jun 7-8)", "1 hr 15 min"),
    ("TOTAL SPAN", "~42 hours"),
]

tips = [
    ("Formula-heavy topics",
     "Solutions, Ionization, Rate/Order of Reaction โ€” keep a formula sheet handy"),
    ("Diagram topics",
     "Adsorption isotherms, Rheology curves, Colloid diagrams โ€” sketch as you study"),
    ("Most overlap",
     "Precipitation + Crystallization share concepts โ€” study together to save time"),
    ("Sleep is non-negotiable",
     "The 6-hour sleep on Jun 6-7 night is essential for memory consolidation"),
    ("Revision pass",
     "Use the last 10 min of each session to re-read your notes from that topic"),
    ("Toughest blocks",
     "Rate & Order + Stability Testing are scheduled at night โ€” prepare coffee!"),
]

# โ”€โ”€ build PDF โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=1.5*cm, rightMargin=1.5*cm,
    topMargin=1.8*cm, bottomMargin=1.8*cm,
    title="Physical Pharmacy Study Schedule",
    author="Orris AI"
)

story = []
W = A4[0] - 3*cm   # usable width

# โ”€โ”€ TITLE BLOCK โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(Spacer(1, 0.2*cm))
title_data = [[
    Paragraph(
        '<font color="white"><b>๐Ÿ“š  PHYSICAL PHARMACY</b></font><br/>'
        '<font color="#c5cae9" size="11">Complete Study Schedule &nbsp;|&nbsp; '
        'Jun 6, 9:17 AM โ†’ Jun 8, 3:00 AM</font>',
        ParagraphStyle("tt", fontName="Helvetica-Bold", fontSize=18,
                       textColor=WHITE, alignment=TA_CENTER, leading=24))
]]
title_tbl = Table(title_data, colWidths=[W])
title_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
    ("ROUNDEDCORNERS", [6]),
    ("TOPPADDING",    (0,0), (-1,-1), 14),
    ("BOTTOMPADDING", (0,0), (-1,-1), 14),
    ("LEFTPADDING",   (0,0), (-1,-1), 12),
    ("RIGHTPADDING",  (0,0), (-1,-1), 12),
]))
story.append(title_tbl)
story.append(Spacer(1, 0.5*cm))

# โ”€โ”€ SCHEDULE TABLE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(H("Study Schedule", 13, DARK_BLUE, TA_LEFT))
story.append(Spacer(1, 0.2*cm))

COL_W = [0.7*cm, 4.2*cm, 6.0*cm, 2.6*cm, 2.6*cm, 1.5*cm]

# header
hdr = [
    PB("#",    8, WHITE, TA_CENTER),
    PB("Topic",8, WHITE),
    PB("Subtopics / Key Points", 8, WHITE),
    PB("Start", 8, WHITE, TA_CENTER),
    PB("End",   8, WHITE, TA_CENTER),
    PB("Duration", 8, WHITE, TA_CENTER),
]
rows = [hdr]
row_styles = []

for idx, (num, topic, sub, start, end, dur, rtype) in enumerate(schedule, start=1):
    row_num = idx   # actual row index in table (0 = header)

    if rtype == "study":
        bg       = WHITE if idx % 2 == 1 else GREY_BG
        txt_col  = BLACK
        num_col  = ACCENT_BLUE
        topic_fn = "Helvetica-Bold"
    elif rtype in ("break",):
        bg       = BREAK_COLOR
        txt_col  = BREAK_TEXT
        num_col  = BREAK_TEXT
        topic_fn = "Helvetica"
    elif rtype == "sleep":
        bg       = colors.HexColor("#e3f2fd")
        txt_col  = colors.HexColor("#1565c0")
        num_col  = colors.HexColor("#1565c0")
        topic_fn = "Helvetica-Bold"
    elif rtype == "nap":
        bg       = colors.HexColor("#fce4ec")
        txt_col  = colors.HexColor("#880e4f")
        num_col  = colors.HexColor("#880e4f")
        topic_fn = "Helvetica-Bold"
    elif rtype == "done":
        bg       = GREEN_LIGHT
        txt_col  = GREEN
        num_col  = GREEN
        topic_fn = "Helvetica-Bold"
    else:
        bg = WHITE; txt_col = BLACK; num_col = BLACK; topic_fn = "Helvetica"

    row = [
        Paragraph(f'<font color="#{num_col.hexval()[2:]}"><b>{num}</b></font>',
                  ParagraphStyle("c", fontName="Helvetica-Bold", fontSize=8,
                                 alignment=TA_CENTER, textColor=num_col)),
        Paragraph(f'<b>{topic}</b>',
                  ParagraphStyle("t", fontName=topic_fn, fontSize=8,
                                 textColor=txt_col, leading=10)),
        Paragraph(sub,
                  ParagraphStyle("s", fontName="Helvetica", fontSize=7.5,
                                 textColor=txt_col, leading=10)),
        Paragraph(start,
                  ParagraphStyle("st", fontName="Helvetica", fontSize=7.5,
                                 textColor=txt_col, alignment=TA_CENTER, leading=10)),
        Paragraph(end,
                  ParagraphStyle("en", fontName="Helvetica", fontSize=7.5,
                                 textColor=txt_col, alignment=TA_CENTER, leading=10)),
        Paragraph(dur,
                  ParagraphStyle("d", fontName="Helvetica-Bold", fontSize=7.5,
                                 textColor=num_col, alignment=TA_CENTER, leading=10)),
    ]
    rows.append(row)
    row_styles.append(("BACKGROUND", (0, row_num), (-1, row_num), bg))

sched_tbl = Table(rows, colWidths=COL_W, repeatRows=1)

base_style = [
    # header
    ("BACKGROUND",    (0,0), (-1,0), DARK_BLUE),
    ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,0), 8),
    ("ALIGN",         (0,0), (-1,0), "CENTER"),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 5),
    ("RIGHTPADDING",  (0,0), (-1,-1), 5),
    ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#bdbdbd")),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
]
sched_tbl.setStyle(TableStyle(base_style + row_styles))
story.append(sched_tbl)
story.append(Spacer(1, 0.6*cm))

# โ”€โ”€ TIME SUMMARY โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(H("Time Summary", 13, TEAL, TA_LEFT))
story.append(Spacer(1, 0.2*cm))

sum_hdr = [PB("Category", 8, WHITE), PB("Time Allocated", 8, WHITE, TA_CENTER)]
sum_rows = [sum_hdr]
for i, (cat, time) in enumerate(summary):
    is_total = cat == "TOTAL SPAN"
    bg = TEAL_LIGHT if i % 2 == 0 else WHITE
    if is_total:
        bg = TEAL
    sum_rows.append([
        Paragraph(f"<b>{cat}</b>" if is_total else cat,
                  ParagraphStyle("sc", fontName="Helvetica-Bold" if is_total else "Helvetica",
                                 fontSize=8, textColor=WHITE if is_total else BLACK)),
        Paragraph(f"<b>{time}</b>",
                  ParagraphStyle("sv", fontName="Helvetica-Bold", fontSize=8,
                                 textColor=WHITE if is_total else TEAL, alignment=TA_CENTER)),
    ])

sum_tbl = Table(sum_rows, colWidths=[W*0.7, W*0.3])
sum_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), TEAL),
    ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
    ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#b2dfdb")),
    ("TOPPADDING",    (0,0), (-1,-1), 6),
    ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING",   (0,0), (-1,-1), 8),
    ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ("BACKGROUND",    (0,1), (-1,1), TEAL_LIGHT),
    ("BACKGROUND",    (0,2), (-1,2), WHITE),
    ("BACKGROUND",    (0,3), (-1,3), TEAL_LIGHT),
    ("BACKGROUND",    (0,4), (-1,4), WHITE),
    ("BACKGROUND",    (0,5), (-1,5), TEAL),
    ("TEXTCOLOR",     (0,5), (-1,5), WHITE),
    ("FONTNAME",      (0,5), (-1,5), "Helvetica-Bold"),
]))
story.append(sum_tbl)
story.append(Spacer(1, 0.6*cm))

# โ”€โ”€ STUDY TIPS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(H("Study Tips", 13, AMBER, TA_LEFT))
story.append(Spacer(1, 0.2*cm))

tip_hdr = [PB("Tip", 8, WHITE), PB("Detail", 8, WHITE)]
tip_rows = [tip_hdr]
for i, (tip, detail) in enumerate(tips):
    bg = AMBER_LIGHT if i % 2 == 0 else WHITE
    tip_rows.append([
        Paragraph(f"<b>{tip}</b>",
                  ParagraphStyle("tip", fontName="Helvetica-Bold", fontSize=8,
                                 textColor=AMBER, leading=10)),
        Paragraph(detail,
                  ParagraphStyle("td", fontName="Helvetica", fontSize=8,
                                 textColor=BLACK, leading=10)),
    ])

tip_tbl = Table(tip_rows, colWidths=[W*0.28, W*0.72])
tip_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), AMBER),
    ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
    ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#ffe0b2")),
    ("TOPPADDING",    (0,0), (-1,-1), 6),
    ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING",   (0,0), (-1,-1), 8),
    ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("BACKGROUND",    (0,1), (-1,1), AMBER_LIGHT),
    ("BACKGROUND",    (0,2), (-1,2), WHITE),
    ("BACKGROUND",    (0,3), (-1,3), AMBER_LIGHT),
    ("BACKGROUND",    (0,4), (-1,4), WHITE),
    ("BACKGROUND",    (0,5), (-1,5), AMBER_LIGHT),
    ("BACKGROUND",    (0,6), (-1,6), WHITE),
]))
story.append(tip_tbl)
story.append(Spacer(1, 0.5*cm))

# โ”€โ”€ FOOTER โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(HRFlowable(width=W, thickness=0.5, color=colors.HexColor("#9fa8da")))
story.append(Spacer(1, 0.15*cm))
story.append(H("Good luck! You've got this. ๐ŸŽฏ  Stay focused, stay hydrated, take your breaks.",
               9, ACCENT_BLUE, TA_CENTER, bold=False))

# โ”€โ”€ build โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
Running Command

cd /home/daytona/workspace/physical-pharmacy && python generate_schedule.py 2>&1

Your PDF is ready! Download it here:

Physical Pharmacy Study Schedule

PDF Document ยท PDF

The PDF includes:
  • Full color-coded schedule table - study sessions in white/grey, breaks in blue-grey, sleep in light blue, nap in pink, and the final completion row in green
  • Time Summary table - breakdown of study vs. rest hours
  • Study Tips table - 6 actionable tips for tackling the syllabus
  • Clean A4 layout with a dark blue header banner and footer motivational line
This is a shared conversation. Sign in to Orris to start your own chat.