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
| # | Topic | Subtopics | Start Time | End Time | Duration | Status |
|---|---|---|---|---|---|---|
| 1 | Pharmacy Orientation | Introduction to pharmacy, branches, roles of pharmacist, regulatory bodies | Jun 6, 9:17 AM | Jun 6, 10:15 AM | ~1 hr | โฌ |
| 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 | โฌ |
| 3 | Solutions | Types of solutions, concentration expressions, colligative properties, ideal vs real solutions | Jun 6, 11:30 AM | Jun 6, 1:30 PM | 2 hr | โฌ |
| โ | โ Lunch Break | โ | Jun 6, 1:30 PM | Jun 6, 2:15 PM | 45 min | โ |
| 4 | Solubilization | Mechanisms, factors affecting solubility, cosolvency, micellar solubilization, surfactants | Jun 6, 2:15 PM | Jun 6, 4:00 PM | 1.75 hr | โฌ |
| 5 | Adsorption | Types (physical vs chemical), isotherms (Freundlich, Langmuir), factors, applications | Jun 6, 4:00 PM | Jun 6, 5:30 PM | 1.5 hr | โฌ |
| 6 | Ionization | Acids/bases, pH, buffers, Henderson-Hasselbalch, pKa, degree of ionization | Jun 6, 5:30 PM | Jun 6, 7:30 PM | 2 hr | โฌ |
| โ | ๐ฝ๏ธ Dinner Break | โ | Jun 6, 7:30 PM | Jun 6, 8:15 PM | 45 min | โ |
| 7 | Hydrolysis | Types (acid/base/enzymatic), kinetics, factors affecting hydrolysis, drug stability implications | Jun 6, 8:15 PM | Jun 6, 9:45 PM | 1.5 hr | โฌ |
| 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 | โฌ |
| โ | ๐ด Sleep | Essential rest | Jun 6, 11:45 PM | Jun 7, 6:00 AM | 6.25 hr | โ |
| 9 | Colloids | Types, properties (Tyndall, electrophoresis), stability, DLVO theory, zeta potential | Jun 7, 6:00 AM | Jun 7, 8:00 AM | 2 hr | โฌ |
| 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 | โฌ |
| โ | โ Breakfast Break | โ | Jun 7, 9:30 AM | Jun 7, 10:00 AM | 30 min | โ |
| 11 | Suspensions | Flocculated vs deflocculated, settling, Stokes' law, rheology of suspensions, formulation | Jun 7, 10:00 AM | Jun 7, 11:30 AM | 1.5 hr | โฌ |
| 12 | Rheology | Newtonian/non-Newtonian flow, viscosity, thixotropy, dilatancy, instruments | Jun 7, 11:30 AM | Jun 7, 1:30 PM | 2 hr | โฌ |
| โ | ๐ฝ๏ธ Lunch Break | โ | Jun 7, 1:30 PM | Jun 7, 2:15 PM | 45 min | โ |
| 13 | Precipitation | Supersaturation, nucleation, crystal growth, factors, prevention in formulations | Jun 7, 2:15 PM | Jun 7, 3:30 PM | 1.25 hr | โฌ |
| 14 | Crystallization | Theory, methods (evaporation, cooling), polymorphism, habit modification, applications | Jun 7, 3:30 PM | Jun 7, 5:00 PM | 1.5 hr | โฌ |
| 15 | Distillation | Simple, fractional, steam distillation, vacuum distillation, principles & applications | Jun 7, 5:00 PM | Jun 7, 6:15 PM | 1.25 hr | โฌ |
| 16 | Miscellaneous Processes | Filtration, drying, evaporation, granulation - key principles | Jun 7, 6:15 PM | Jun 7, 7:30 PM | 1.25 hr | โฌ |
| โ | ๐ฝ๏ธ Dinner Break | โ | Jun 7, 7:30 PM | Jun 7, 8:15 PM | 45 min | โ |
| 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 | โฌ |
| 18 | Rate & Order of Reaction | Zero, first, second order; half-life; rate constants; integrated rate equations; graphical methods | Jun 7, 9:45 PM | Jun 7, 11:45 PM | 2 hr | โฌ |
| โ | ๐ค Short Nap | Power rest before final stretch | Jun 7, 11:45 PM | Jun 8, 1:00 AM | 1.25 hr | โ |
| 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 | โฌ |
| โ | DONE BY 3:00 AM June 8 | โ | โ | โ | โ | ๐ฏ |
| Category | Time 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 |
| Tip | Detail |
|---|---|
| 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 can be studied together (shared concepts) |
| Don't skip sleep | The 6-hour sleep on Jun 6-7 night is non-negotiable for retention |
| Revision pass | Use the final 30 min of each session to re-read your notes from that topic |
| Toughest blocks | Rate & Order + Stability Testing scheduled at 10 PM - tackle with coffee โ |
Create pdf file
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace/physical-pharmacy
mkdir -p /home/daytona/workspace/physical-pharmacy
~/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 | '
'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}")
cd /home/daytona/workspace/physical-pharmacy && python generate_schedule.py 2>&1
Physical Pharmacy Study Schedule
PDF Document ยท PDF