Plantar Fasciitis management with drugs dose
"plantar fasciitis"[MeSH Terms] AND treatment
"plantar fasciitis" AND treatment
| Intervention | Details |
|---|---|
| Rest & activity modification | Eliminate precipitating activities, avoid barefoot walking on hard surfaces |
| Ice/heat massage | Ice packs 15-20 min, 3-4x/day |
| Stretching | Plantar fascia-specific stretching is the key intervention - dorsiflex ankle, dorsiflex toes with hand, palpate plantar tension. Achilles tendon (heel cord) stretching also critical |
| Heel cushioned inserts / orthotics | Medial arch support insoles |
| Shoe modification | Avoid flat shoes, worn footwear |
| Drug | Dose | Frequency | Duration |
|---|---|---|---|
| Ibuprofen | 400-800 mg | 3 times/day with food | 2-4 weeks |
| Naproxen | 250-500 mg | Twice daily | 2-4 weeks |
| Diclofenac | 50 mg | 2-3 times/day | 2-4 weeks |
| Celecoxib (COX-2 inhibitor, preferred if GI risk) | 200 mg | Once or twice daily | 2-4 weeks |
Note: NSAIDs should be used short-term only. Avoid in patients with peptic ulcer disease, renal impairment, or cardiovascular disease.
| Agent | Dose | Technique |
|---|---|---|
| Methylprednisolone acetate | 10-20 mg | Mixed with 1 mL lidocaine 1%; 22-24 gauge, 2.5 cm needle at medial heel at point of maximum tenderness |
| Triamcinolone acetonide | 20-40 mg | Mixed with 1 mL lidocaine 1%; same approach |
| Dexamethasone | 4-8 mg | Used in some protocols |
| Agent | Notes |
|---|---|
| Autologous whole blood | Intralesional injection - some RCT evidence |
| Micronized dHACM (dehydrated human amnion/chorion membrane) | Emerging data |
| Prolotherapy | Dextrose injections - under investigation |
Plantar Fasciitis Diagnosed
↓
Step 1: Stretching + Ice + Activity modification + Orthotics (4-6 weeks)
↓ (if not improved)
Step 2: NSAIDs (ibuprofen 400-800 mg TID or naproxen 250-500 mg BID) + Night splints
↓ (if not improved after 6-8 weeks)
Step 3: Corticosteroid injection (methylprednisolone 20 mg + lidocaine 1 mL)
↓ (if not improved, or for longer-lasting effect)
Step 4: PRP injection (preferred over repeat steroid) / ESWT (if >6 months)
↓ (if >6-12 months, failed all conservative)
Step 5: Surgery (limited fascial release ± gastrocnemius recession)
Create a patient handout on home stretching protocols and activity modification
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"
mkdir -p /home/daytona/workspace/plantar-fasciitis-handout && echo "done"
~/plantar-fasciitis-handout/generate_handout.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, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable
from reportlab.graphics.shapes import Drawing, Rect, String, Circle, Line
from reportlab.graphics import renderPDF
# ── Colour palette ───────────────────────────────────────────────────────────
TEAL = colors.HexColor("#00838F")
TEAL_LIGHT = colors.HexColor("#E0F7FA")
TEAL_MED = colors.HexColor("#B2EBF2")
ORANGE = colors.HexColor("#EF6C00")
ORANGE_LT = colors.HexColor("#FFF3E0")
GREEN = colors.HexColor("#2E7D32")
GREEN_LT = colors.HexColor("#E8F5E9")
RED_LT = colors.HexColor("#FFEBEE")
RED = colors.HexColor("#C62828")
GREY_DARK = colors.HexColor("#37474F")
GREY_MED = colors.HexColor("#78909C")
GREY_LIGHT = colors.HexColor("#ECEFF1")
WHITE = colors.white
PAGE_W, PAGE_H = A4
MARGIN = 1.8 * cm
# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def style(name, **kw):
return ParagraphStyle(name, **kw)
S_TITLE = style("S_TITLE",
fontName="Helvetica-Bold", fontSize=22, leading=28,
textColor=WHITE, alignment=TA_CENTER)
S_SUBTITLE = style("S_SUBTITLE",
fontName="Helvetica", fontSize=11, leading=15,
textColor=TEAL_LIGHT, alignment=TA_CENTER)
S_SECTION = style("S_SECTION",
fontName="Helvetica-Bold", fontSize=13, leading=17,
textColor=WHITE, spaceBefore=4, spaceAfter=4)
S_BODY = style("S_BODY",
fontName="Helvetica", fontSize=10, leading=15,
textColor=GREY_DARK, spaceAfter=4)
S_BODY_BOLD = style("S_BODY_BOLD",
fontName="Helvetica-Bold", fontSize=10, leading=15,
textColor=GREY_DARK)
S_SMALL = style("S_SMALL",
fontName="Helvetica", fontSize=8.5, leading=12,
textColor=GREY_MED)
S_BULLET = style("S_BULLET",
fontName="Helvetica", fontSize=10, leading=15,
textColor=GREY_DARK, leftIndent=14, bulletIndent=4,
spaceAfter=3)
S_STEP_NUM = style("S_STEP_NUM",
fontName="Helvetica-Bold", fontSize=18, leading=22,
textColor=TEAL, alignment=TA_CENTER)
S_STEP_TITLE = style("S_STEP_TITLE",
fontName="Helvetica-Bold", fontSize=11, leading=14,
textColor=TEAL)
S_STEP_BODY = style("S_STEP_BODY",
fontName="Helvetica", fontSize=9.5, leading=14,
textColor=GREY_DARK)
S_WARNING_TITLE = style("S_WARNING_TITLE",
fontName="Helvetica-Bold", fontSize=11, leading=14,
textColor=RED)
S_WARNING_BODY = style("S_WARNING_BODY",
fontName="Helvetica", fontSize=9.5, leading=13,
textColor=GREY_DARK)
S_TIP_BODY = style("S_TIP_BODY",
fontName="Helvetica", fontSize=9.5, leading=13,
textColor=GREEN)
S_FOOTER = style("S_FOOTER",
fontName="Helvetica", fontSize=7.5, leading=10,
textColor=GREY_MED, alignment=TA_CENTER)
# ── Helper Flowables ─────────────────────────────────────────────────────────
class SectionHeader(Flowable):
"""Coloured banner with white title text."""
def __init__(self, text, width, color=TEAL):
super().__init__()
self.text = text
self._width = width
self.color = color
self.height = 28
def draw(self):
c = self.canv
c.setFillColor(self.color)
c.roundRect(0, 0, self._width, self.height, 6, fill=1, stroke=0)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 12)
c.drawString(10, 8, self.text)
def wrap(self, *args):
return self._width, self.height
class StepBox(Flowable):
"""Numbered exercise step card."""
def __init__(self, number, title, instructions, tip, width):
super().__init__()
self.number = number
self.title = title
self.instructions = instructions
self.tip = tip
self._width = width
self.height = 100 # estimated; will reflow
def wrap(self, avail_w, avail_h):
return self._width, self.height
def draw(self):
c = self.canv
w = self._width
h = self.height
# Card background
c.setFillColor(GREY_LIGHT)
c.roundRect(0, 0, w, h, 8, fill=1, stroke=0)
# Left accent bar
c.setFillColor(TEAL)
c.roundRect(0, 0, 38, h, 8, fill=1, stroke=0)
# cover right side of left bar (to make it flat on right)
c.setFillColor(TEAL)
c.rect(30, 0, 8, h, fill=1, stroke=0)
# Number
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 22)
c.drawCentredString(19, h/2 - 8, str(self.number))
# Title
c.setFillColor(TEAL)
c.setFont("Helvetica-Bold", 11)
c.drawString(48, h - 20, self.title)
# Instructions lines
c.setFillColor(GREY_DARK)
c.setFont("Helvetica", 9.5)
y = h - 35
for line in self.instructions:
c.drawString(48, y, line)
y -= 14
# Tip
if self.tip:
c.setFillColor(TEAL_LIGHT)
c.roundRect(44, 6, w - 50, 20, 4, fill=1, stroke=0)
c.setFillColor(TEAL)
c.setFont("Helvetica-Bold", 8.5)
c.drawString(50, 12, "TIP: ")
c.setFont("Helvetica", 8.5)
c.drawString(72, 12, self.tip)
# ── Build document ────────────────────────────────────────────────────────────
OUT = "/home/daytona/workspace/plantar-fasciitis-handout/Plantar_Fasciitis_Home_Program.pdf"
doc = SimpleDocTemplate(
OUT,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=MARGIN, bottomMargin=MARGIN,
title="Plantar Fasciitis Home Exercise & Activity Program",
author="Orris Medical Assistant"
)
CONTENT_W = PAGE_W - 2 * MARGIN
story = []
# ════════════════════════════════════════════════════════
# HEADER BANNER
# ════════════════════════════════════════════════════════
header_table = Table(
[[Paragraph("Plantar Fasciitis", S_TITLE),
Paragraph("Home Exercise & Activity Program", S_SUBTITLE)]],
colWidths=[CONTENT_W],
)
# Build header as a single-row coloured block
class HeaderBanner(Flowable):
def __init__(self, width):
super().__init__()
self._width = width
self.height = 80
def wrap(self, *a):
return self._width, self.height
def draw(self):
c = self.canv
w, h = self._width, self.height
# Gradient-like background using two rects
c.setFillColor(TEAL)
c.roundRect(0, 0, w, h, 10, fill=1, stroke=0)
c.setFillColor(colors.HexColor("#006064"))
c.rect(w*0.55, 0, w*0.45, h, fill=1, stroke=0)
c.roundRect(0, 0, w, h, 10, fill=0, stroke=0)
# Decorative circles
c.setFillColor(colors.HexColor("#00ACC1"), alpha=0.25)
c.circle(w - 40, h - 10, 55, fill=1, stroke=0)
c.setFillColor(colors.HexColor("#00ACC1"), alpha=0.15)
c.circle(w - 10, 5, 70, fill=1, stroke=0)
# Main title
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 22)
c.drawString(18, h - 34, "Plantar Fasciitis")
# Subtitle
c.setFont("Helvetica", 12)
c.setFillColor(TEAL_LIGHT)
c.drawString(18, h - 52, "Home Exercise & Activity Program")
# Tag line
c.setFont("Helvetica-Oblique", 9)
c.setFillColor(TEAL_MED)
c.drawString(18, h - 66, "Follow these steps every day to ease your heel pain and help your foot heal.")
story.append(HeaderBanner(CONTENT_W))
story.append(Spacer(1, 10))
# ── What is Plantar Fasciitis box ────────────────────────────────────────────
what_data = [[
Paragraph("<b>What is Plantar Fasciitis?</b>", style("wh",
fontName="Helvetica-Bold", fontSize=11, textColor=TEAL, leading=14)),
Paragraph(
"The plantar fascia is a thick band of tissue that runs along the bottom of your foot, "
"connecting your heel bone to your toes. When it gets overstretched or irritated, "
"it causes <b>sharp heel pain</b> — especially with your <b>first steps in the morning</b> "
"or after sitting for a long time. The good news: <b>more than 90% of people get better "
"with simple home treatment.</b>",
style("wh2", fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK))
]]
what_tbl = Table(what_data, colWidths=[CONTENT_W])
what_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL_LIGHT),
("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
("BOX", (0,0), (-1,-1), 1.5, TEAL),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("SPAN", (0,0), (-1,-1)),
]))
story.append(what_tbl)
story.append(Spacer(1, 12))
# ════════════════════════════════════════════════════════
# SECTION 1 – STRETCHING EXERCISES
# ════════════════════════════════════════════════════════
story.append(SectionHeader(" PART 1 — STRETCHING EXERCISES", CONTENT_W))
story.append(Spacer(1, 8))
story.append(Paragraph(
"Do these exercises <b>every day</b>, ideally <b>before your first step in the morning</b> "
"and again before standing after any period of rest.",
style("intro", fontName="Helvetica-Oblique", fontSize=9.5, leading=14, textColor=GREY_DARK)))
story.append(Spacer(1, 8))
# Exercise cards using Table layout (simpler than custom Flowable for text wrapping)
def exercise_card(number, title, steps, tip=None, bg=GREY_LIGHT, accent=TEAL):
col1_content = [
Paragraph(str(number), style(f"num{number}",
fontName="Helvetica-Bold", fontSize=24, textColor=WHITE,
alignment=TA_CENTER, leading=28))
]
step_paras = [Paragraph(f"<b>{title}</b>", style(f"et{number}",
fontName="Helvetica-Bold", fontSize=11, textColor=accent, leading=15))]
for s in steps:
step_paras.append(Paragraph(f"• {s}", style(f"es{number}",
fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK,
leftIndent=8)))
if tip:
step_paras.append(Spacer(1, 4))
step_paras.append(Paragraph(f"<font color='#00838F'><b>Tip:</b></font> {tip}",
style(f"tip{number}", fontName="Helvetica", fontSize=8.5, leading=12,
textColor=GREY_DARK)))
tbl = Table(
[[col1_content, step_paras]],
colWidths=[42, CONTENT_W - 42]
)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), accent),
("BACKGROUND", (1,0), (1,0), bg),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (0,0), 14),
("TOPPADDING", (1,0), (1,0), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (0,0), 5),
("RIGHTPADDING", (1,0), (1,0), 10),
("LEFTPADDING", (1,0), (1,0), 10),
("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
("BOX", (0,0), (-1,-1), 0, WHITE),
]))
return tbl
ex1 = exercise_card(
1,
"Plantar Fascia Stretch (Most Important!)",
[
"Sit in a chair. Cross the sore foot over your other knee.",
"Hold your toes and gently pull them back toward your shin.",
"You should feel a stretch along the bottom of your foot.",
"Hold for 30 seconds. Repeat 3 times.",
"Do this BEFORE taking your first step in the morning."
],
tip="Do this while still in bed — keep a towel or belt on your bedside table."
)
ex2 = exercise_card(
2,
"Calf / Achilles Tendon Stretch (Standing)",
[
"Stand facing a wall. Place both hands on the wall.",
"Step your sore foot back about 60 cm (2 feet).",
"Keep the back knee straight and heel flat on the floor.",
"Lean forward until you feel a stretch in your calf.",
"Hold 30 seconds. Repeat 3 times. Do both legs."
],
tip="Keep your back heel pressed firmly to the ground the whole time.",
bg=TEAL_LIGHT, accent=colors.HexColor("#00695C")
)
ex3 = exercise_card(
3,
"Bent-Knee Calf Stretch (Soleus Stretch)",
[
"Same position as Exercise 2, but now slightly bend the back knee.",
"You will feel the stretch lower down, just above the heel.",
"Hold 30 seconds. Repeat 3 times on each side.",
"This targets a different calf muscle (soleus) — both stretches are needed."
],
tip="Combine this with Exercise 2 for the best results."
)
ex4 = exercise_card(
4,
"Towel / Stair Calf Stretch",
[
"Stand on the edge of a step with heels hanging off.",
"Slowly lower both heels below the step level.",
"Hold 15-30 seconds, then rise back up.",
"Repeat 10-15 times, twice a day.",
"Hold a railing for balance and safety."
],
tip="Start with both feet, then progress to one foot as strength improves.",
bg=ORANGE_LT, accent=ORANGE
)
ex5 = exercise_card(
5,
"Frozen Bottle / Ball Roll (Massage + Stretch)",
[
"Freeze a water bottle or use a tennis/golf ball.",
"Place it on the floor. Roll your foot over it slowly.",
"Apply gentle downward pressure along the arch.",
"Do this for 2-3 minutes, 2 times per day.",
"Use a frozen bottle for extra anti-inflammatory benefit."
],
tip="Do this seated so you control the pressure. Avoid if it causes sharp pain.",
bg=GREEN_LT, accent=GREEN
)
story.append(KeepTogether([ex1, Spacer(1, 6)]))
story.append(KeepTogether([ex2, Spacer(1, 6)]))
story.append(KeepTogether([ex3, Spacer(1, 6)]))
story.append(KeepTogether([ex4, Spacer(1, 6)]))
story.append(KeepTogether([ex5, Spacer(1, 10)]))
# ── Daily schedule box ───────────────────────────────────────────────────────
sched_title = Paragraph(" Suggested Daily Schedule", style("stit",
fontName="Helvetica-Bold", fontSize=11, textColor=TEAL))
sched_rows = [
[Paragraph("<b>Time</b>", S_BODY_BOLD), Paragraph("<b>What to Do</b>", S_BODY_BOLD)],
[Paragraph("Before getting out of bed", S_BODY), Paragraph("Exercise 1 (Plantar Fascia Stretch) — 3 reps", S_BODY)],
[Paragraph("Morning (after rising)", S_BODY), Paragraph("Exercises 2 + 3 (Calf Stretches) — 3 reps each", S_BODY)],
[Paragraph("Mid-day / after sitting", S_BODY), Paragraph("Exercise 1 again before standing", S_BODY)],
[Paragraph("Afternoon", S_BODY), Paragraph("Exercise 5 (Bottle Roll) — 2-3 min", S_BODY)],
[Paragraph("Evening", S_BODY), Paragraph("Exercises 2 + 4 (Stair Stretch) — 3 reps each", S_BODY)],
]
sched_tbl = Table(sched_rows, colWidths=[CONTENT_W * 0.38, CONTENT_W * 0.62])
sched_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, TEAL_LIGHT]),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#B0BEC5")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))
story.append(KeepTogether([sched_title, Spacer(1,5), sched_tbl]))
story.append(Spacer(1, 14))
# ════════════════════════════════════════════════════════
# SECTION 2 – ACTIVITY MODIFICATION
# ════════════════════════════════════════════════════════
story.append(SectionHeader(" PART 2 — ACTIVITY MODIFICATION", CONTENT_W))
story.append(Spacer(1, 8))
# Two-column DO / AVOID table
do_items = [
"Wear supportive shoes <b>at all times</b> — even at home",
"Choose shoes with good arch support and cushioned heels",
"Use <b>gel heel cups or orthotic insoles</b> in your shoes",
"Walk on <b>soft surfaces</b> when possible (grass, carpet)",
"Take <b>short, frequent walks</b> instead of long sessions",
"Apply <b>ice to your heel</b> for 10-15 min after activity",
"Elevate your foot when resting to reduce swelling",
"Maintain a <b>healthy body weight</b> to reduce heel load",
"Wear a <b>night splint</b> if your doctor recommends one",
]
avoid_items = [
"<b>Barefoot walking</b> on hard floors or outside",
"Old, worn-out shoes with no arch support",
"Flat shoes (flip-flops, ballet flats, slippers)",
"Standing or walking on <b>hard surfaces for long periods</b>",
"Sudden increases in walking, running, or exercise",
"<b>High-impact activities</b> (running, jumping) until pain settles",
"Sitting with feet flat and cold — keep them warm and moving",
"Ignoring the pain and pushing through without rest",
]
do_col = [Paragraph("<b>✔ DO THIS</b>", style("do_h",
fontName="Helvetica-Bold", fontSize=11, textColor=GREEN))]
for item in do_items:
do_col.append(Paragraph(f"✓ {item}", style("do_i",
fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK,
leftIndent=6, spaceAfter=3)))
avoid_col = [Paragraph("<b>✘ AVOID THIS</b>", style("av_h",
fontName="Helvetica-Bold", fontSize=11, textColor=RED))]
for item in avoid_items:
avoid_col.append(Paragraph(f"✗ {item}", style("av_i",
fontName="Helvetica", fontSize=9.5, leading=14, textColor=GREY_DARK,
leftIndent=6, spaceAfter=3)))
act_tbl = Table(
[[do_col, avoid_col]],
colWidths=[(CONTENT_W - 8) / 2, (CONTENT_W - 8) / 2]
)
act_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), GREEN_LT),
("BACKGROUND", (1,0), (1,0), RED_LT),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (0,0), 1.5, GREEN),
("BOX", (1,0), (1,0), 1.5, RED),
("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
]))
story.append(act_tbl)
story.append(Spacer(1, 14))
# ════════════════════════════════════════════════════════
# SECTION 3 – FOOTWEAR GUIDE
# ════════════════════════════════════════════════════════
story.append(SectionHeader(" PART 3 — FOOTWEAR GUIDE", CONTENT_W, color=colors.HexColor("#6A1B9A")))
story.append(Spacer(1, 8))
fw_rows = [
[Paragraph("<b>Feature</b>", S_BODY_BOLD),
Paragraph("<b>What to Look For</b>", S_BODY_BOLD),
Paragraph("<b>What to Avoid</b>", S_BODY_BOLD)],
[Paragraph("Heel height", S_BODY),
Paragraph("Small heel lift (1-2 cm) reduces fascia tension", S_BODY),
Paragraph("Completely flat soles", S_BODY)],
[Paragraph("Arch support", S_BODY),
Paragraph("Firm medial arch — press the insole, it should not collapse", S_BODY),
Paragraph("Shoes that flatten completely", S_BODY)],
[Paragraph("Cushioning", S_BODY),
Paragraph("Thick, shock-absorbing heel cushion", S_BODY),
Paragraph("Thin, hard soles", S_BODY)],
[Paragraph("Fit", S_BODY),
Paragraph("Snug but not tight; thumb's width at toes", S_BODY),
Paragraph("Loose shoes that let the foot slide", S_BODY)],
[Paragraph("First step shoes", S_BODY),
Paragraph("Keep supportive slippers right beside the bed", S_BODY),
Paragraph("Stepping barefoot first thing in morning", S_BODY)],
]
fw_tbl = Table(fw_rows, colWidths=[CONTENT_W*0.22, CONTENT_W*0.42, CONTENT_W*0.36])
fw_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#6A1B9A")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, colors.HexColor("#F3E5F5")]),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CE93D8")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 7),
("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(fw_tbl)
story.append(Spacer(1, 14))
# ════════════════════════════════════════════════════════
# SECTION 4 – WARNING SIGNS
# ════════════════════════════════════════════════════════
story.append(SectionHeader(" PART 4 — WHEN TO SEE YOUR DOCTOR", CONTENT_W, color=RED))
story.append(Spacer(1, 8))
warn_rows = [
[Paragraph("<b>⚠ See your doctor if you notice:</b>", style("wt",
fontName="Helvetica-Bold", fontSize=11, textColor=RED, leading=14))],
[Paragraph(
"• Pain that is getting <b>worse</b> despite 4–6 weeks of home treatment<br/>"
"• <b>Sudden severe pain</b> or a 'pop' in your heel (may be fascia rupture)<br/>"
"• <b>Swelling, redness, or warmth</b> around the heel (possible infection)<br/>"
"• Pain that <b>spreads up the leg</b> or causes numbness/tingling in the foot<br/>"
"• Heel pain in <b>both feet</b> with joint pain elsewhere (possible arthritis)<br/>"
"• Pain that does <b>not ease at all</b> with rest",
style("wb", fontName="Helvetica", fontSize=9.5, leading=15, textColor=GREY_DARK,
leftIndent=6))]
]
warn_tbl = Table(warn_rows, colWidths=[CONTENT_W])
warn_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), RED_LT),
("BOX", (0,0), (-1,-1), 1.5, RED),
("ROUNDEDCORNERS", (0,0), (-1,-1), [6,6,6,6]),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
story.append(warn_tbl)
story.append(Spacer(1, 14))
# ════════════════════════════════════════════════════════
# PROGRESS TRACKER
# ════════════════════════════════════════════════════════
story.append(SectionHeader(" PART 5 — WEEK-BY-WEEK PROGRESS GUIDE", CONTENT_W,
color=colors.HexColor("#1565C0")))
story.append(Spacer(1, 8))
prog_rows = [
[Paragraph("<b>Week</b>", S_BODY_BOLD),
Paragraph("<b>What to Focus On</b>", S_BODY_BOLD),
Paragraph("<b>Expected Progress</b>", S_BODY_BOLD)],
[Paragraph("Week 1-2", S_BODY),
Paragraph("Start all 5 exercises. Rest from high-impact activity. New supportive shoes.", S_BODY),
Paragraph("Morning pain may still be present. Slight improvement expected.", S_BODY)],
[Paragraph("Week 3-4", S_BODY),
Paragraph("Increase stretch frequency. Add stair stretching. Night splint if needed.", S_BODY),
Paragraph("Noticeable reduction in morning pain and stiffness.", S_BODY)],
[Paragraph("Week 6-8", S_BODY),
Paragraph("Gentle walking program. Continue all stretches. Ice after activity.", S_BODY),
Paragraph("Most patients feel 50-70% better at this point.", S_BODY)],
[Paragraph("Week 10-12", S_BODY),
Paragraph("Gradually return to normal activity. Continue orthotics and stretching.", S_BODY),
Paragraph("Many patients are fully recovered. Maintain stretching habits.", S_BODY)],
[Paragraph(">3 months", S_BODY),
Paragraph("Return to full activity. Consider physiotherapy or specialist review if not resolved.", S_BODY),
Paragraph("See doctor if still not improving — further treatment may help.", S_BODY)],
]
prog_tbl = Table(prog_rows, colWidths=[CONTENT_W*0.17, CONTENT_W*0.46, CONTENT_W*0.37])
prog_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1565C0")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, colors.HexColor("#E3F2FD")]),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#90CAF9")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 7),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))
story.append(prog_tbl)
story.append(Spacer(1, 14))
# ════════════════════════════════════════════════════════
# FOOTER
# ════════════════════════════════════════════════════════
story.append(HRFlowable(width=CONTENT_W, thickness=1, color=GREY_MED))
story.append(Spacer(1, 5))
story.append(Paragraph(
"This handout is for general educational purposes only and does not replace the advice of your doctor or physiotherapist. "
"Always follow the specific instructions given by your healthcare provider. "
"If you are unsure about any exercise, ask before starting. | Prepared by Orris Medical Assistant | May 2026",
S_FOOTER))
# ── Build ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUT}")
cd /home/daytona/workspace/plantar-fasciitis-handout && python generate_handout.…
Management of severe preeclampsia drugs dose
Find the latest clinical guidelines for severe preeclampsia management