Get me the full diet plan and list of raw food for a pregnant women with pcod
diet plan for pregnant women with PCOS polycystic ovarian disease 2024 guidelines
PCOS pregnancy diet nutrition intervention
https://www.pcosnutrition.com/pcos-healthy-pregnancy
| Meal | Foods |
|---|---|
| Early Morning (6:30 AM) | 1 glass warm water with lemon + 4-5 soaked almonds + 2 walnuts |
| Breakfast (8:00 AM) | 1 cup oatmeal cooked in milk + ½ cup mixed berries + 1 tbsp flaxseeds + 2 tbsp chopped walnuts |
| Mid-Morning Snack (10:30 AM) | 1 medium apple + 2 tbsp peanut butter (no sugar added) |
| Lunch (1:00 PM) | 1 cup brown rice or 2 small whole wheat rotis + 1 cup lentil dal + mixed vegetable sabzi + 1 cup curd/yogurt + green salad |
| Afternoon Snack (4:00 PM) | 1 cup roasted chickpeas or a handful of mixed seeds (pumpkin, sunflower) |
| Dinner (7:00 PM) | 2 multigrain rotis + 1 cup rajma/kidney bean curry or grilled fish + 1 cup sauteed greens (spinach/methi) |
| Bedtime Snack (9:30 PM) | 1 cup warm milk with a pinch of turmeric and cinnamon |
| Meal | Foods |
|---|---|
| Early Morning | Methi seeds water (soak 1 tsp overnight) |
| Breakfast | 2 vegetable stuffed whole wheat parathas (no excess ghee) + 1 cup low-fat curd |
| Mid-Morning | 1 pear + 10 cashews |
| Lunch | 1 cup quinoa or foxtail millet + 1 cup chana masala + cucumber-tomato salad with olive oil dressing |
| Snack | Carrot and celery sticks with hummus |
| Dinner | 1 cup moong dal khichdi + 1 cup palak paneer or sautéed tofu + 1 small bowl raita |
| Bedtime | Small bowl of mixed seeds trail mix |
| Meal | Foods |
|---|---|
| Early Morning | Warm water with 1 tsp apple cider vinegar (safe in pregnancy, helps insulin) |
| Breakfast | 2-3 egg omelette with spinach and tomatoes + 1 slice multigrain toast |
| Mid-Morning | 1 banana + 1 tbsp almond butter |
| Lunch | 2 jowar/bajra rotis + 1 cup sambar + mixed vegetable poriyal + 1 cup curd |
| Snack | Greek yogurt + 1 tbsp chia seeds + ½ cup pomegranate seeds |
| Dinner | Grilled/baked salmon (150g) + 1 cup roasted sweet potato + steamed broccoli with olive oil |
| Bedtime | Warm haldi doodh (turmeric milk) |
| Nutrient | Why It Matters | Best Food Sources |
|---|---|---|
| Folate | Prevents neural tube defects | Spinach, lentils, fortified cereals, avocado |
| Iron | Prevents anemia (common in PCOS) | Lentils, dark leafy greens, sesame, jaggery |
| Omega-3 DHA | Fetal brain development + reduces inflammation | Salmon, sardines, flaxseeds, walnuts |
| Vitamin D | Low in most PCOS women; supports fetal bones | Fortified milk, salmon, egg yolk, sun exposure |
| Magnesium | Improves insulin sensitivity | Pumpkin seeds, dark chocolate (>70%), spinach, almonds |
| Choline | Fetal brain development | Eggs, liver, soybeans |
| Iodine | Thyroid function (hypothyroidism common in PCOS) | Iodized salt, seafood, dairy |
| Inositol | Reduces insulin resistance; may prevent GDM | Whole grains, legumes, citrus fruits (supplement with OB/GYN approval) |
| Zinc | Hormone balance, fetal development | Pumpkin seeds, chickpeas, cashews |
| Calcium | Fetal bones + maternal bone health | Dairy, ragi, sesame seeds, kale |
| Avoid / Limit | Reason |
|---|---|
| White sugar, sweets, mithai | Causes rapid insulin spike |
| Maida (refined flour), white bread, pasta | High GI, worsens insulin resistance |
| Packaged/processed foods, chips, biscuits | Transfats + hidden sugars |
| Sugary drinks, sodas, packaged juices | Liquid sugar = worst for PCOS |
| High-mercury fish (shark, swordfish, king mackerel) | Harmful to fetal nervous system |
| Raw/undercooked meat, fish (sushi), eggs | Infection risk in pregnancy |
| Alcohol | Completely contraindicated |
| Excess caffeine | >200 mg/day increases miscarriage risk; limit to 1 cup coffee or 1 cup black tea |
| Unpasteurized dairy / soft cheeses | Listeria risk |
| Excess soy in first trimester | Phytoestrogens may affect hormones in large doses |
Always consult your OB/GYN and a registered dietitian before starting any supplement.
Get me in pdf format
mkdir -p /tmp/workspace/pcos-diet && ls /tmp/workspace/
~/pcos-diet/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT_PATH = "/tmp/workspace/pcos-diet/PCOS_Pregnancy_Diet_Plan.pdf"
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Diet Plan for Pregnant Women with PCOS",
author="Orris Health"
)
styles = getSampleStyleSheet()
# ---------- Custom Styles ----------
TEAL = colors.HexColor("#00796B")
LTEAL = colors.HexColor("#E0F2F1")
PINK = colors.HexColor("#C2185B")
LPINK = colors.HexColor("#FCE4EC")
AMBER = colors.HexColor("#F57F17")
LAMBER = colors.HexColor("#FFF8E1")
GRAY = colors.HexColor("#424242")
LGRAY = colors.HexColor("#F5F5F5")
WHITE = colors.white
title_style = ParagraphStyle("Title2", parent=styles["Title"],
fontSize=22, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=4, leading=28)
subtitle_style = ParagraphStyle("Subtitle2", parent=styles["Normal"],
fontSize=12, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=6, leading=16)
h1 = ParagraphStyle("H1", parent=styles["Heading1"],
fontSize=14, textColor=WHITE, backColor=TEAL,
spaceBefore=14, spaceAfter=6, leading=20,
leftIndent=-0.5*cm, rightIndent=-0.5*cm,
borderPad=6)
h2 = ParagraphStyle("H2", parent=styles["Heading2"],
fontSize=12, textColor=TEAL, spaceBefore=10, spaceAfter=4)
h3 = ParagraphStyle("H3", parent=styles["Heading3"],
fontSize=10, textColor=PINK, spaceBefore=6, spaceAfter=3)
body = ParagraphStyle("Body2", parent=styles["Normal"],
fontSize=9.5, textColor=GRAY, leading=14, spaceAfter=4,
alignment=TA_JUSTIFY)
bullet = ParagraphStyle("Bullet2", parent=styles["Normal"],
fontSize=9.5, textColor=GRAY, leading=14, spaceAfter=3,
leftIndent=14, bulletIndent=4)
note = ParagraphStyle("Note", parent=styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#880E4F"),
backColor=LPINK, leading=13, leftIndent=8, rightIndent=8,
spaceBefore=6, spaceAfter=6, borderPad=5)
story = []
# ============================================================
# COVER BAND
# ============================================================
cover_data = [[Paragraph("Diet Plan for Pregnant Women with PCOS", title_style)],
[Paragraph("A comprehensive, evidence-based nutrition guide | July 2026", subtitle_style)]]
cover_table = Table(cover_data, colWidths=[17*cm])
cover_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL),
("ROUNDEDCORNERS", [8]),
("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(cover_table)
story.append(Spacer(1, 0.5*cm))
# Disclaimer box
disc = Table([[Paragraph(
"<b>Important:</b> This guide is for educational purposes only. Always consult your OB/GYN "
"and a registered dietitian for personalised advice before making dietary changes during pregnancy.",
note)]],
colWidths=[17*cm])
disc.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LPINK),
("BOX", (0,0), (-1,-1), 0.8, PINK),
("ROUNDEDCORNERS", [6]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
]))
story.append(disc)
story.append(Spacer(1, 0.4*cm))
# ============================================================
# SECTION 1 – WHY DIET MATTERS
# ============================================================
story.append(Paragraph(" Why Diet Matters in PCOS Pregnancy", h1))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
"Pregnant women with PCOS face a double nutritional challenge: the standard increased demands of "
"pregnancy PLUS the metabolic dysfunction of PCOS (insulin resistance, hyperandrogenism, chronic "
"inflammation). They carry a higher risk of:", body))
risks = [
"Gestational Diabetes Mellitus (GDM)",
"Miscarriage",
"Preeclampsia",
"Preterm birth",
"Excessive gestational weight gain",
]
for r in risks:
story.append(Paragraph(f"• {r}", bullet))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
"Diet is the single most powerful tool to reduce all these risks simultaneously. "
"Women who closely follow a healthy dietary pattern — including vegetables, cereals, and "
"legumes — before and during early pregnancy are <b>three times as likely</b> to have a healthy pregnancy.",
body))
# ============================================================
# SECTION 2 – CORE PRINCIPLES
# ============================================================
story.append(Paragraph(" Core Dietary Principles", h1))
principles = [
("1. Go Slow Carb, Not No Carb",
"A very-low-carb or ketogenic diet is NOT safe during pregnancy — the baby requires glucose for "
"brain growth. Choose <b>low glycemic index (GI) carbohydrates</b> that release sugar slowly: whole "
"grains, oats, millets, and legumes. Target 50–55% calories from complex carbs, 15–20% from protein, "
"20–30% from healthy fats."),
("2. Eat Every 3–4 Hours",
"Never skip meals. Aim for <b>3 main meals + 2–3 snacks daily</b>. Skipping meals drops blood sugar, "
"worsens morning sickness, and causes compensatory insulin spikes."),
("3. Prioritise Fibre",
"Fibre slows glucose absorption and reduces post-meal insulin surges. Target <b>25–30 g/day</b>. "
"Best sources: lentils, chickpeas, oats, flaxseeds, vegetables, whole fruits."),
("4. Include Healthy Fats",
"Omega-3 fatty acids reduce inflammation and support fetal brain development. Aim for <b>2–3 servings "
"of low-mercury oily fish per week</b>. Plant sources: flaxseed, walnuts, chia seeds."),
("5. High-Quality Protein at Every Meal",
"Protein improves insulin sensitivity, reduces androgen levels, and maintains satiety. Include eggs, "
"legumes, fish, Greek yogurt, tofu, or nuts at every meal."),
("6. Anti-Inflammatory Spices Daily",
"Turmeric (curcumin), cinnamon (improves insulin sensitivity), ginger (anti-nausea), garlic, and "
"fenugreek seeds are evidence-backed for PCOS management."),
]
for title_p, desc in principles:
story.append(Paragraph(title_p, h2))
story.append(Paragraph(desc, body))
# ============================================================
# SECTION 3 – MEAL PLAN (3 sample days)
# ============================================================
story.append(Paragraph(" Full Day Meal Plans (3 Sample Days)", h1))
def meal_table(rows):
table = Table(rows, colWidths=[4.5*cm, 12.5*cm])
table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LTEAL, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#B2DFDB")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
return table
# Day 1
story.append(Paragraph("Sample Day 1", h2))
d1 = [
["Meal", "Foods"],
["Early Morning\n6:30 AM", "1 glass warm lemon water + 4–5 soaked almonds + 2 walnuts"],
["Breakfast\n8:00 AM", "1 cup oatmeal (rolled oats cooked in milk) + ½ cup mixed berries + 1 tbsp flaxseeds + 2 tbsp walnuts"],
["Mid-Morning\n10:30 AM", "1 medium apple + 2 tbsp unsweetened peanut butter"],
["Lunch\n1:00 PM", "1 cup brown rice or 2 whole wheat rotis + 1 cup lentil dal + mixed vegetable sabzi + 1 cup curd + green salad"],
["Snack\n4:00 PM", "1 cup roasted chickpeas or a handful of mixed seeds (pumpkin + sunflower)"],
["Dinner\n7:00 PM", "2 multigrain rotis + 1 cup rajma curry or grilled fish + 1 cup sautéed spinach/methi"],
["Bedtime\n9:30 PM", "1 cup warm milk with a pinch of turmeric and cinnamon"],
]
story.append(meal_table(d1))
story.append(Spacer(1, 0.3*cm))
# Day 2
story.append(Paragraph("Sample Day 2", h2))
d2 = [
["Meal", "Foods"],
["Early Morning", "Methi seeds water (soak 1 tsp overnight, drink water in the morning)"],
["Breakfast", "2 vegetable-stuffed whole wheat parathas (minimal ghee) + 1 cup low-fat curd"],
["Mid-Morning", "1 pear + 10 cashews"],
["Lunch", "1 cup quinoa or foxtail millet + 1 cup chana masala + cucumber-tomato salad with olive oil"],
["Snack", "Carrot and celery sticks with hummus (3–4 tbsp)"],
["Dinner", "1 cup moong dal khichdi + 1 cup palak paneer or sautéed tofu + 1 small bowl raita"],
["Bedtime", "Small bowl of mixed seeds trail mix (almonds, pumpkin seeds, raisins)"],
]
story.append(meal_table(d2))
story.append(Spacer(1, 0.3*cm))
# Day 3
story.append(Paragraph("Sample Day 3", h2))
d3 = [
["Meal", "Foods"],
["Early Morning", "Warm water + 1 tsp apple cider vinegar (helps insulin sensitivity)"],
["Breakfast", "2–3 egg omelette with spinach and tomatoes + 1 slice multigrain toast"],
["Mid-Morning", "1 banana + 1 tbsp almond butter"],
["Lunch", "2 jowar/bajra rotis + 1 cup sambar + mixed vegetable poriyal + 1 cup curd"],
["Snack", "Greek yogurt + 1 tbsp chia seeds + ½ cup pomegranate seeds"],
["Dinner", "Grilled/baked salmon (150 g) + 1 cup roasted sweet potato + steamed broccoli with olive oil"],
["Bedtime", "Warm turmeric milk (haldi doodh)"],
]
story.append(meal_table(d3))
# ============================================================
# SECTION 4 – RAW FOOD SHOPPING LIST
# ============================================================
story.append(PageBreak())
story.append(Paragraph(" Complete Raw Foods Shopping List", h1))
categories = [
("Grains & Cereals (Low GI)", [
"Rolled oats / steel-cut oats", "Brown rice", "Quinoa", "Whole wheat flour (atta)",
"Multigrain bread/flour", "Foxtail millet (kangni)", "Jowar (sorghum)", "Bajra (pearl millet)",
"Ragi (finger millet)", "Barley"
]),
("Legumes & Pulses", [
"Moong dal (green gram)", "Masoor dal (red lentils)", "Chana dal (split chickpeas)",
"Whole chickpeas (chhole)", "Rajma (kidney beans)", "Black beans",
"Urad dal (black lentils)", "Soybean / edamame"
]),
("Vegetables", [
"Spinach (palak)", "Methi (fenugreek leaves) – improves insulin sensitivity",
"Broccoli", "Cauliflower", "Kale", "Capsicum (all colours)", "Tomatoes",
"Cucumber", "Zucchini", "Sweet potato (low GI)", "Bottle gourd (lauki)",
"Ridge gourd (tori)", "Carrots", "Beetroot", "Peas", "Mushrooms"
]),
("Fruits (Low-to-Medium GI)", [
"Berries (blueberries, strawberries, raspberries)", "Apple", "Pear",
"Pomegranate", "Guava (high Vitamin C, low GI)", "Kiwi", "Orange",
"Watermelon (in moderation)", "Banana (1 per day)"
]),
("Proteins", [
"Eggs (free-range, cooked thoroughly)", "Wild salmon (low mercury)",
"Sardines", "Mackerel", "Light tuna (max 2–3x/week)", "Chicken breast (skinless)",
"Paneer (in moderation)", "Tofu", "Low-fat Greek yogurt / curd"
]),
("Nuts, Seeds & Healthy Fats", [
"Almonds", "Walnuts (highest omega-3 among nuts)", "Cashews", "Pistachios",
"Ground flaxseeds (omega-3 + fibre)", "Chia seeds", "Pumpkin seeds",
"Sunflower seeds", "Sesame seeds (til)", "Avocado",
"Extra virgin olive oil", "Cold-pressed coconut oil (small amounts)"
]),
("Dairy", [
"Full-fat or low-fat milk", "Unsweetened Greek yogurt / curd",
"Paneer (cottage cheese)", "Ghee (1–2 tsp/day)"
]),
("Anti-Inflammatory Herbs & Spices", [
"Turmeric (curcumin – reduces inflammation)", "Cinnamon (improves insulin sensitivity)",
"Fenugreek seeds (methi dana)", "Ginger (anti-nausea in pregnancy)",
"Garlic", "Cumin (jeera)", "Coriander"
]),
]
# Render as 2-column bullet grid
for cat_name, items in categories:
story.append(Paragraph(cat_name, h3))
# build 2-column table
pairs = []
for i in range(0, len(items), 2):
left = f"• {items[i]}"
right = f"• {items[i+1]}" if i+1 < len(items) else ""
pairs.append([Paragraph(left, bullet), Paragraph(right, bullet)])
col_tbl = Table(pairs, colWidths=[8.5*cm, 8.5*cm])
col_tbl.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 2),
("RIGHTPADDING", (0,0), (-1,-1), 2),
("TOPPADDING", (0,0), (-1,-1), 1),
("BOTTOMPADDING", (0,0), (-1,-1), 1),
]))
story.append(col_tbl)
story.append(Spacer(1, 0.15*cm))
# ============================================================
# SECTION 5 – KEY NUTRIENTS
# ============================================================
story.append(PageBreak())
story.append(Paragraph(" Key Nutrients During PCOS Pregnancy", h1))
nut_rows = [
["Nutrient", "Why It Matters", "Best Food Sources"],
["Folate", "Prevents neural tube defects", "Spinach, lentils, fortified cereals, avocado"],
["Iron", "Prevents anaemia (common in PCOS)", "Lentils, dark leafy greens, sesame, jaggery"],
["Omega-3 DHA","Fetal brain development + reduces inflammation","Salmon, sardines, flaxseeds, walnuts"],
["Vitamin D", "Low in most PCOS women; supports fetal bones", "Fortified milk, salmon, egg yolk, sun exposure"],
["Magnesium", "Improves insulin sensitivity", "Pumpkin seeds, dark chocolate (>70%), spinach, almonds"],
["Choline", "Fetal brain development", "Eggs, liver, soybeans"],
["Iodine", "Thyroid function (hypothyroidism common in PCOS)","Iodised salt, seafood, dairy"],
["Inositol", "Reduces insulin resistance; may prevent GDM", "Whole grains, legumes, citrus fruits"],
["Zinc", "Hormone balance, fetal development", "Pumpkin seeds, chickpeas, cashews"],
["Calcium", "Fetal bones + maternal bone health", "Dairy, ragi, sesame seeds, kale"],
]
nt = Table(nut_rows, colWidths=[3.2*cm, 6.5*cm, 7.3*cm])
nt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), PINK),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LPINK, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#F48FB1")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("WORDWRAP", (0,0), (-1,-1), 1),
]))
story.append(nt)
# ============================================================
# SECTION 6 – FOODS TO AVOID
# ============================================================
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph(" Foods to Avoid or Strictly Limit", h1))
avoid_rows = [
["Food / Drink", "Reason"],
["White sugar, sweets, mithai", "Rapid insulin spike — worsens PCOS insulin resistance"],
["Maida, white bread, white pasta", "High GI; rapidly raises blood sugar"],
["Packaged / processed foods, chips", "Trans fats + hidden sugars cause inflammation"],
["Sugary drinks, sodas, packaged juices", "Liquid sugar — worst for PCOS"],
["High-mercury fish (shark, swordfish)", "Harmful to fetal nervous system"],
["Raw / undercooked meat, fish, eggs", "Infection risk (Listeria, Salmonella) in pregnancy"],
["Alcohol", "Completely contraindicated in pregnancy"],
["Excess caffeine (>200 mg/day)", "Increases miscarriage risk; limit to 1 cup coffee/day"],
["Unpasteurised dairy / soft cheeses", "Listeria risk in pregnancy"],
]
at = Table(avoid_rows, colWidths=[6.5*cm, 10.5*cm])
at.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), AMBER),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("ROWBACKGROUNDS",(0,1), (-1,-1), [LAMBER, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#FFE082")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(at)
# ============================================================
# SECTION 7 – LIFESTYLE TIPS
# ============================================================
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph(" Lifestyle Tips Alongside Diet", h1))
tips = [
"<b>Walk 20–30 minutes daily</b> (after meals if possible) — lowers post-meal blood sugar by 20–30%.",
"<b>Stay hydrated:</b> 2.5–3 litres of water daily; coconut water is an excellent electrolyte option.",
"<b>Manage stress:</b> Cortisol worsens insulin resistance — try prenatal yoga or meditation.",
"<b>Sleep 7–9 hours:</b> Poor sleep raises insulin resistance and hunger hormones.",
"<b>Monitor weight gain:</b> Recommended 11–16 kg total for normal BMI; 7–11 kg if overweight; 5–9 kg if obese.",
"<b>Regular blood sugar monitoring:</b> Due to high GDM risk, fasting and post-meal glucose checks are important. Discuss with your doctor.",
]
for t in tips:
story.append(Paragraph(f"✓ {t}", bullet))
# ============================================================
# SECTION 8 – SUPPLEMENTS
# ============================================================
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(" Supplements to Discuss with Your Doctor", h1))
supps = [
("Prenatal Multivitamin", "With folate (400–800 mcg), iron, and iodine — essential for all pregnant women."),
("Vitamin D3", "1000–4000 IU/day depending on blood levels; most PCOS women are deficient."),
("Omega-3 DHA", "200–300 mg DHA/day for fetal brain development and maternal inflammation control."),
("Myo-Inositol", "2–4 g/day — strong evidence for reducing gestational diabetes risk in PCOS (consult OB/GYN)."),
("Magnesium Glycinate", "If deficient — supports insulin signalling and reduces cramps."),
("Vitamin B12", "Important if following a vegetarian or vegan diet."),
]
for sname, sdesc in supps:
story.append(Paragraph(f"<b>{sname}:</b> {sdesc}", bullet))
story.append(Spacer(1, 0.05*cm))
# ============================================================
# FOOTER NOTE
# ============================================================
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=1, color=TEAL))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
"<b>Always consult your OB/GYN and a registered dietitian for personalised advice.</b> "
"This plan is evidence-informed and based on current nutritional research (2024–2026), "
"including guidelines from the PCOS Nutrition Center and published systematic reviews in "
"reproductive nutrition. | Generated by Orris Health | July 2026",
ParagraphStyle("footer", parent=styles["Normal"],
fontSize=7.5, textColor=colors.HexColor("#607D8B"),
alignment=TA_CENTER, leading=11)
))
# ============================================================
# BUILD
# ============================================================
doc.build(story)
print(f"PDF created: {OUTPUT_PATH}")
cd /tmp/workspace/pcos-diet && python generate_pdf.py
ls -lh /tmp/workspace/pcos-diet/PCOS_Pregnancy_Diet_Plan.pdf
PCOS Pregnancy Diet Plan
PDF Document · PDF
Create a printable weekly meal planner for this diet
ls /tmp/workspace/pcos-diet/
~/pcos-diet/generate_planner.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT_PATH = "/tmp/workspace/pcos-diet/PCOS_Weekly_Meal_Planner.pdf"
# --- Landscape A4 ---
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=landscape(A4),
rightMargin=1.2*cm, leftMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.2*cm,
title="PCOS Pregnancy Weekly Meal Planner",
author="Orris Health"
)
# ── Colours ──────────────────────────────────────────────
TEAL = colors.HexColor("#00796B")
LTEAL = colors.HexColor("#B2DFDB")
XTEAL = colors.HexColor("#E0F2F1")
PINK = colors.HexColor("#C2185B")
LPINK = colors.HexColor("#FCE4EC")
AMBER = colors.HexColor("#F57F17")
LAMBER = colors.HexColor("#FFF9C4")
PURPLE = colors.HexColor("#6A1B9A")
LPURPLE = colors.HexColor("#F3E5F5")
BLUE = colors.HexColor("#1565C0")
LBLUE = colors.HexColor("#E3F2FD")
GREEN = colors.HexColor("#2E7D32")
LGREEN = colors.HexColor("#E8F5E9")
DGRAY = colors.HexColor("#37474F")
LGRAY = colors.HexColor("#ECEFF1")
WHITE = colors.white
styles = getSampleStyleSheet()
# ── Paragraph Styles ─────────────────────────────────────
hdr_style = ParagraphStyle("HDR", parent=styles["Normal"],
fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=11)
day_style = ParagraphStyle("DAY", parent=styles["Normal"],
fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
meal_label = ParagraphStyle("ML", parent=styles["Normal"],
fontSize=7.5, textColor=TEAL, fontName="Helvetica-Bold",
leading=9)
cell_style = ParagraphStyle("CELL", parent=styles["Normal"],
fontSize=7.5, textColor=DGRAY, leading=10)
note_style = ParagraphStyle("NOTE", parent=styles["Normal"],
fontSize=7, textColor=colors.HexColor("#607D8B"),
alignment=TA_CENTER, leading=9)
title_main = ParagraphStyle("TM", parent=styles["Normal"],
fontSize=18, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=22)
title_sub = ParagraphStyle("TS", parent=styles["Normal"],
fontSize=9, textColor=WHITE, alignment=TA_CENTER, leading=12)
# ── Meal Data ────────────────────────────────────────────
# Each day: [early_morning, breakfast, mid_morning, lunch, snack, dinner, bedtime]
week = {
"Monday": [
"Warm lemon water\n+ 4 soaked almonds\n+ 2 walnuts",
"Oatmeal (½ cup rolled oats\nin milk) + ½ cup blueberries\n+ 1 tbsp flaxseeds",
"1 apple\n+ 2 tbsp\npeanut butter",
"1 cup brown rice\n+ lentil dal\n+ mixed veg sabzi\n+ 1 cup curd",
"Roasted chickpeas\n(½ cup)\n+ cucumber sticks",
"2 multigrain rotis\n+ rajma curry\n+ sautéed spinach",
"Warm turmeric\nmilk",
],
"Tuesday": [
"Methi seeds water\n(soaked overnight)",
"2 veg whole wheat\nparathas (min ghee)\n+ low-fat curd",
"1 pear\n+ 10 cashews",
"1 cup quinoa\n+ chana masala\n+ cucumber-tomato\nsalad (olive oil)",
"Carrot & celery\nwith hummus\n(3 tbsp)",
"Moong dal khichdi\n+ palak paneer\nor tofu\n+ raita",
"Mixed seeds\ntrail mix",
],
"Wednesday": [
"Warm water +\n1 tsp apple\ncider vinegar",
"2-egg omelette\n(spinach + tomato)\n+ 1 multigrain toast",
"1 banana\n+ 1 tbsp\nalmond butter",
"2 jowar rotis\n+ sambar\n+ mixed veg poriyal\n+ curd",
"Greek yogurt\n+ chia seeds\n+ pomegranate",
"Grilled salmon\n(150 g) + roasted\nsweet potato\n+ broccoli",
"Ginger-turmeric\ntea (decaf)",
],
"Thursday": [
"Warm water\n+ ½ tsp cinnamon\n+ 5 soaked almonds",
"Ragi (finger millet)\ndosa + coconut\nchutney + sambar",
"1 guava\n+ pumpkin seeds\n(2 tbsp)",
"1 cup bajra khichdi\n+ rajma curry\n+ green salad\n+ buttermilk",
"Whole grain\ncrackers + avocado\nslices",
"2 whole wheat rotis\n+ methi chicken or\nchana sabzi\n+ raita",
"Warm milk +\npinch nutmeg",
],
"Friday": [
"Methi seeds water\n+ 4 walnuts",
"Vegetable upma\n(semolina/rava –\nmultigrain)\n+ 1 boiled egg",
"1 orange\n+ 10 pistachios",
"Brown rice pulao\n(with peas, carrot)\n+ dal tadka\n+ curd",
"Hummus +\nbell pepper\nstrips",
"Baked/grilled\nfish (150 g)\n+ sautéed kale\n+ sweet potato",
"Chamomile tea\n+ 2 almonds",
],
"Saturday": [
"Warm lemon water\n+ chia seeds\n(1 tsp soaked)",
"Smoothie bowl:\nbanana + berries\n+ Greek yogurt\n+ granola + flax",
"1 pear\n+ walnuts\n(5–6 halves)",
"2 multigrain rotis\n+ palak dal\n+ baingan bharta\n+ curd",
"Roasted\nmurmura (puffed\nrice) + nuts mix",
"Tofu stir-fry\nwith vegetables\n+ brown rice\nor quinoa",
"Warm haldi\ndoodh",
],
"Sunday": [
"Warm water +\n1 tsp ACV\n+ soaked almonds",
"Whole wheat\npancakes + berries\n+ honey (1 tsp)\n+ Greek yogurt",
"1 apple\n+ cheese cube\n(1 small)",
"Grilled chicken /\npaneer salad bowl\n+ quinoa + olive\noil dressing",
"Fruit chaat\n(apple, pomegranate,\nguava, orange)\nno sugar",
"Egg bhurji or\ntofu scramble\n+ 2 multigrain\nrotis + salad",
"Warm milk +\ncinnamon",
],
}
DAYS = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
MEALS = ["Early\nMorning", "Breakfast", "Mid-\nMorning", "Lunch", "Snack", "Dinner", "Bedtime"]
MEAL_COLORS = [LTEAL, colors.HexColor("#FFF9C4"), LBLUE, LGREEN, LPINK, LPURPLE, LGRAY]
MEAL_HDR_COLORS = [TEAL, AMBER, BLUE, GREEN, PINK, PURPLE, colors.HexColor("#546E7A")]
story = []
# ── Title Banner ──────────────────────────────────────────
title_data = [
[Paragraph("🌿 PCOS Pregnancy — Weekly Meal Planner", title_main)],
[Paragraph("Evidence-based diet for managing insulin resistance & supporting a healthy pregnancy | Orris Health | July 2026", title_sub)],
]
title_tbl = Table(title_data, colWidths=[27.3*cm])
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
story.append(title_tbl)
story.append(Spacer(1, 0.3*cm))
# ── Key Tips Strip ────────────────────────────────────────
tips = [
"💧 Drink 2.5–3 L water daily",
"⏰ Eat every 3–4 hours",
"🚶 Walk 20–30 min after meals",
"🧂 Use iodised salt only",
"☕ Limit caffeine < 200 mg/day",
"🩺 Monitor blood sugar regularly",
]
tip_cells = [[Paragraph(t, ParagraphStyle("tip", parent=styles["Normal"],
fontSize=7.5, textColor=TEAL, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=10))] for t in tips]
tips_row = [cell[0] for cell in tip_cells]
tips_tbl = Table([tips_row], colWidths=[27.3/6*cm]*6)
tips_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), XTEAL),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
("INNERGRID", (0,0), (-1,-1), 0.3, LTEAL),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(tips_tbl)
story.append(Spacer(1, 0.35*cm))
# ── Build main planner grid ───────────────────────────────
# Columns: Meal label | Mon | Tue | Wed | Thu | Fri | Sat | Sun
# col widths: 1.7 + 7*(27.3-1.7)/7 = 1.7 + 7*3.657
LABEL_W = 1.8*cm
DAY_W = (27.3 - LABEL_W) / 7 # ~3.64 cm each
# Header row
header_row = [Paragraph("Meal", hdr_style)]
for d in DAYS:
header_row.append(Paragraph(d, day_style))
# Meal rows
grid_rows = [header_row]
for mi, meal_name in enumerate(MEALS):
row = [Paragraph(meal_name, ParagraphStyle("ML2", parent=styles["Normal"],
fontSize=8, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=10))]
for d in DAYS:
cell_text = week[d][mi]
row.append(Paragraph(cell_text, cell_style))
grid_rows.append(row)
col_widths = [LABEL_W] + [DAY_W] * 7
grid = Table(grid_rows, colWidths=col_widths, rowHeights=None)
# Base style
ts = TableStyle([
# Header row
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,0), "CENTER"),
("VALIGN", (0,0), (-1,-1), "TOP"),
# Meal label column
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,1), (0,-1), 8),
("ALIGN", (0,1), (0,-1), "CENTER"),
("VALIGN", (0,1), (0,-1), "MIDDLE"),
# Grid lines
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#B2DFDB")),
("BOX", (0,0), (-1,-1), 1.0, TEAL),
# Padding
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
])
# Per-meal-row background colouring
for mi in range(len(MEALS)):
row_idx = mi + 1 # +1 for header
# Label cell
ts.add("BACKGROUND", (0, row_idx), (0, row_idx), MEAL_HDR_COLORS[mi])
ts.add("TEXTCOLOR", (0, row_idx), (0, row_idx), WHITE)
# Data cells alternate shade
for ci in range(1, 8):
bg = MEAL_COLORS[mi] if ci % 2 == 1 else WHITE
ts.add("BACKGROUND", (ci, row_idx), (ci, row_idx), bg)
# Weekend columns (Sat=6, Sun=7) slightly warmer shade
for row_idx in range(1, len(MEALS)+1):
ts.add("TEXTCOLOR", (6, row_idx), (7, row_idx), colors.HexColor("#4E342E"))
grid.setStyle(ts)
story.append(grid)
story.append(Spacer(1, 0.3*cm))
# ── Nutrition Reminder Bar ────────────────────────────────
reminders = [
("🥗 Every meal:", "½ plate non-starchy veg + protein + healthy fat + low-GI carb"),
("💊 Daily supps:", "Prenatal vitamin · Vitamin D3 · DHA Omega-3 · Myo-Inositol (ask doctor)"),
("⚠️ Always avoid:", "Maida · White sugar · Sugary drinks · Raw fish · Alcohol · >200 mg caffeine"),
]
rem_data = [[
Paragraph(f"<b>{lbl}</b> {desc}", ParagraphStyle("rem", parent=styles["Normal"],
fontSize=7.5, textColor=DGRAY, leading=10))
] for lbl, desc in reminders]
rem_tbl = Table([[r[0] for r in rem_data]], colWidths=[9.1*cm]*3)
rem_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), XTEAL),
("BACKGROUND", (1,0), (1,0), LAMBER),
("BACKGROUND", (2,0), (2,0), LPINK),
("BOX", (0,0), (-1,-1), 0.5, LTEAL),
("INNERGRID", (0,0), (-1,-1), 0.3, LTEAL),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(rem_tbl)
story.append(Spacer(1, 0.2*cm))
story.append(HRFlowable(width="100%", thickness=0.5, color=LTEAL))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
"This planner is for educational purposes only. Always consult your OB/GYN and registered dietitian for personalised advice. "
"Portions may need adjustment based on your trimester, weight, and blood sugar readings. | Orris Health © July 2026",
note_style
))
doc.build(story)
print(f"Planner PDF created: {OUTPUT_PATH}")
cd /tmp/workspace/pcos-diet && python generate_planner.py
~/pcos-diet/generate_planner.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/pcos-diet/generate_planner.py'
cd /tmp/workspace/pcos-diet && python generate_planner.py
~/pcos-diet/generate_planner.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/pcos-diet/generate_planner.py'
~/pcos-diet/generate_planner.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/pcos-diet/generate_planner.py'
~/pcos-diet/generate_planner.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/pcos-diet/generate_planner.py'
~/pcos-diet/generate_planner.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/pcos-diet/generate_planner.py'
cd /tmp/workspace/pcos-diet && python generate_planner.py 2>&1
~/pcos-diet/generate_planner.py
"""
PCOS Pregnancy Weekly Meal Planner — printable A4 landscape PDF
Uses only string cells for data (most reliable with ReportLab tables).
Title / header cells use fresh Paragraph objects each time.
"""
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/tmp/workspace/pcos-diet/PCOS_Weekly_Meal_Planner.pdf"
PW, PH = landscape(A4) # 841.9 x 595.3 pts
# ── Colour palette ────────────────────────────────────────
TEAL = colors.HexColor("#00796B")
LTEAL = colors.HexColor("#B2DFDB")
XTEAL = colors.HexColor("#E0F2F1")
PINK = colors.HexColor("#AD1457")
LPINK = colors.HexColor("#FCE4EC")
AMBER = colors.HexColor("#F57F17")
LAMBER = colors.HexColor("#FFF9C4")
PURPLE = colors.HexColor("#6A1B9A")
LPURPLE = colors.HexColor("#F3E5F5")
BLUE = colors.HexColor("#1565C0")
LBLUE = colors.HexColor("#E3F2FD")
GREEN = colors.HexColor("#2E7D32")
LGREEN = colors.HexColor("#E8F5E9")
SLATE = colors.HexColor("#546E7A")
LGRAY = colors.HexColor("#ECEFF1")
DGRAY = colors.HexColor("#37474F")
WHITE = colors.white
ss = getSampleStyleSheet()
def sty(name, **kw):
base = kw.pop("parent", ss["Normal"])
return ParagraphStyle(name, parent=base, **kw)
# Styles used only for standalone Paragraphs (never reused inside tables)
S_TITLE = sty("s_title", fontSize=16, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=20, spaceAfter=2)
S_SUBTITLE= sty("s_sub", fontSize=8, textColor=WHITE, alignment=TA_CENTER, leading=11)
S_NOTE = sty("s_note", fontSize=7, textColor=SLATE, alignment=TA_CENTER, leading=9)
S_BODY = sty("s_body", fontSize=8, textColor=DGRAY, leading=11)
S_BULLET = sty("s_bullet", fontSize=8, textColor=DGRAY, leading=11, leftIndent=10)
# ── Meal data ─────────────────────────────────────────────
DAYS = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
MEALS = ["Early\nMorning","Breakfast","Mid-\nMorning","Lunch","Snack","Dinner","Bedtime"]
# Row colour pairs: (label bg, even-col bg)
ROW_LABEL_BG = [TEAL, AMBER, BLUE, GREEN, PINK, PURPLE, SLATE]
ROW_DATA_BG = [XTEAL, LAMBER, LBLUE, LGREEN,LPINK, LPURPLE,LGRAY]
week = [
# Monday
["Warm lemon water\n+ 4 soaked almonds\n+ 2 walnuts",
"Oatmeal + blueberries\n+ 1 tbsp flaxseeds\n+ 2 tbsp walnuts",
"1 apple +\n2 tbsp peanut butter",
"Brown rice + lentil dal\n+ mixed veg sabzi\n+ curd + salad",
"Roasted chickpeas\n+ cucumber sticks",
"2 multigrain rotis\n+ rajma curry\n+ sauteed spinach",
"Warm turmeric milk"],
# Tuesday
["Methi seeds water\n(soaked overnight)",
"2 veg whole wheat\nparathas + curd",
"1 pear + 10 cashews",
"Quinoa + chana masala\n+ cucumber-tomato salad\n(olive oil)",
"Carrot & celery\nwith hummus",
"Moong dal khichdi\n+ palak paneer/tofu\n+ raita",
"Mixed seeds\ntrail mix"],
# Wednesday
["Warm water +\n1 tsp apple cider vinegar",
"2-egg omelette\n(spinach+tomato)\n+ multigrain toast",
"1 banana +\n1 tbsp almond butter",
"2 jowar rotis\n+ sambar + mixed veg\nporiyal + curd",
"Greek yogurt +\nchia seeds +\npomegranate",
"Grilled salmon (150g)\n+ roasted sweet potato\n+ broccoli",
"Ginger-turmeric tea\n(decaf)"],
# Thursday
["Warm water +\ncinnamon + 5 almonds",
"Ragi dosa +\ncoconut chutney\n+ sambar",
"1 guava +\npumpkin seeds (2 tbsp)",
"Bajra khichdi +\nrajma curry +\nbuttermilk",
"Whole grain crackers\n+ avocado slices",
"2 whole wheat rotis\n+ methi chicken or\nchana sabzi + raita",
"Warm milk +\npinch nutmeg"],
# Friday
["Methi seeds water\n+ 4 walnuts",
"Vegetable upma\n(multigrain)\n+ 1 boiled egg",
"1 orange +\n10 pistachios",
"Brown rice pulao\n(peas + carrot)\n+ dal tadka + curd",
"Hummus +\nbell pepper strips",
"Baked fish (150g)\n+ sauteed kale\n+ sweet potato",
"Chamomile tea\n+ 2 almonds"],
# Saturday
["Warm lemon water\n+ soaked chia seeds",
"Smoothie bowl:\nbanana + berries +\nGreek yogurt + granola",
"1 pear +\n5-6 walnut halves",
"2 multigrain rotis\n+ palak dal +\nbaingan bharta + curd",
"Roasted murmura\n+ nuts mix",
"Tofu stir-fry +\nvegetables +\nbrown rice/quinoa",
"Warm haldi doodh"],
# Sunday
["Warm water + ACV\n+ soaked almonds",
"Whole wheat pancakes\n+ berries + 1 tsp honey\n+ Greek yogurt",
"1 apple +\n1 small cheese cube",
"Grilled chicken/paneer\nsalad bowl + quinoa\n+ olive oil dressing",
"Fruit chaat\n(apple, pomegranate,\nguava) no sugar",
"Egg bhurji/tofu scramble\n+ 2 multigrain rotis\n+ salad",
"Warm milk +\ncinnamon"],
]
# ── Build PDF ─────────────────────────────────────────────
doc = SimpleDocTemplate(OUTPUT, pagesize=landscape(A4),
leftMargin=1.0*cm, rightMargin=1.0*cm,
topMargin=1.0*cm, bottomMargin=1.0*cm,
title="PCOS Pregnancy Weekly Meal Planner")
story = []
# --- Title banner ---
BANNER_W = PW - 2.0*cm
banner_tbl = Table(
[[Paragraph("PCOS Pregnancy — Weekly Meal Planner", S_TITLE)],
[Paragraph("Evidence-based nutrition for managing insulin resistance & supporting a healthy pregnancy | Orris Health | July 2026", S_SUBTITLE)]],
colWidths=[BANNER_W]
)
banner_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), TEAL),
("TOPPADDING", (0,0),(-1,-1), 8),
("BOTTOMPADDING", (0,0),(-1,-1), 8),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
]))
story.append(banner_tbl)
story.append(Spacer(1, 4*mm))
# --- Quick tips strip ---
tips_text = [
"💧 Drink 2.5-3 L water daily",
"⏰ Eat every 3-4 hours",
"🚶 Walk 20-30 min after meals",
"🧂 Use iodised salt only",
"☕ Caffeine < 200 mg/day",
"🩺 Monitor blood sugar regularly",
]
tips_row = [[t] for t in tips_text] # column of 1-item lists
tips_flat = [t for t in tips_text] # flat list for single-row table
tips_tbl = Table([tips_flat], colWidths=[BANNER_W/6]*6)
tips_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), XTEAL),
("FONTNAME", (0,0),(-1,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 7.5),
("TEXTCOLOR", (0,0),(-1,-1), TEAL),
("ALIGN", (0,0),(-1,-1), "CENTER"),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("BOX", (0,0),(-1,-1), 0.5, TEAL),
("INNERGRID", (0,0),(-1,-1), 0.3, LTEAL),
]))
story.append(tips_tbl)
story.append(Spacer(1, 4*mm))
# --- Main planner grid ---
# Columns: Meal | Mon | Tue | Wed | Thu | Fri | Sat | Sun
LABEL_W = 1.7*cm
DAY_W = (BANNER_W - LABEL_W) / 7 # ~3.6 cm
# Header row (string cells)
header = ["Meal"] + DAYS
grid_data = [header]
# Data rows: [meal_label, mon, tue, wed, thu, fri, sat, sun]
for mi in range(7):
row = [MEALS[mi]]
for di in range(7):
row.append(week[di][mi])
grid_data.append(row)
# Row heights: header + 7 meal rows
ROW_H = [0.55*cm] + [1.95*cm]*7
grid = Table(grid_data,
colWidths=[LABEL_W] + [DAY_W]*7,
rowHeights=ROW_H)
ts = TableStyle([
# ---- Header row ----
("BACKGROUND", (0,0),(-1,0), TEAL),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,0), 8.5),
("ALIGN", (0,0),(-1,0), "CENTER"),
("VALIGN", (0,0),(-1,0), "MIDDLE"),
# ---- Label column ----
("FONTNAME", (0,1),(0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,1),(0,-1), 7.5),
("ALIGN", (0,1),(0,-1), "CENTER"),
("VALIGN", (0,1),(0,-1), "MIDDLE"),
("TEXTCOLOR", (0,1),(0,-1), WHITE),
# ---- Data cells ----
("FONTSIZE", (1,1),(-1,-1), 7.5),
("FONTNAME", (1,1),(-1,-1), "Helvetica"),
("TEXTCOLOR", (1,1),(-1,-1), DGRAY),
("VALIGN", (1,1),(-1,-1), "TOP"),
("ALIGN", (1,1),(-1,-1), "LEFT"),
# ---- Grid ----
("GRID", (0,0),(-1,-1), 0.5, LTEAL),
("BOX", (0,0),(-1,-1), 1.2, TEAL),
# ---- Padding ----
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 4),
("RIGHTPADDING", (0,0),(-1,-1), 4),
])
# Per-row label & alternating data backgrounds
for mi in range(7):
r = mi + 1
ts.add("BACKGROUND", (0,r),(0,r), ROW_LABEL_BG[mi])
for ci in range(1, 8):
bg = ROW_DATA_BG[mi] if ci % 2 == 1 else WHITE
ts.add("BACKGROUND", (ci,r),(ci,r), bg)
grid.setStyle(ts)
story.append(grid)
story.append(Spacer(1, 4*mm))
# --- Reminders bar ---
rem = [
("Plate rule:", "Half non-starchy veg + quality protein + healthy fat + low-GI carb"),
("Daily supps:", "Prenatal vitamin • Vitamin D3 • DHA Omega-3 • Myo-Inositol (ask doctor)"),
("Always avoid:", "Maida • White sugar • Sugary drinks • Raw fish • Alcohol • >200mg caffeine"),
]
# Build as plain text for stability
rem_row = [f"{lbl} {desc}" for lbl, desc in rem]
rem_tbl = Table([rem_row], colWidths=[BANNER_W/3]*3)
rem_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), XTEAL),
("BACKGROUND", (1,0),(1,0), LAMBER),
("BACKGROUND", (2,0),(2,0), LPINK),
("FONTNAME", (0,0),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 7.5),
("TEXTCOLOR", (0,0),(-1,-1), DGRAY),
("ALIGN", (0,0),(-1,-1), "CENTER"),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 6),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("BOX", (0,0),(-1,-1), 0.5, LTEAL),
("INNERGRID", (0,0),(-1,-1), 0.3, LTEAL),
]))
story.append(rem_tbl)
story.append(Spacer(1, 2*mm))
story.append(HRFlowable(width="100%", thickness=0.5, color=LTEAL))
story.append(Spacer(1, 1*mm))
story.append(Paragraph(
"This planner is for educational purposes only. Consult your OB/GYN and registered dietitian "
"for personalised advice. Portions may need adjustment based on trimester, weight, and blood sugar. "
"| Orris Health © July 2026",
S_NOTE))
doc.build(story)
print(f"SUCCESS: {OUTPUT}")
cat > /tmp/workspace/pcos-diet/generate_planner.py << 'PYEOF' """ PCOS Pregnancy Weekly Meal Planner — printable A4 landscape PDF All table cells use plain strings only (most stable ReportLab pattern). """ from reportlab.lib.pagesizes import A4, landscape from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.enums import TA_CENTER OUTPUT = "/tmp/workspace/pcos-diet/PCOS_Weekly_Meal_Planner.pdf" PW, PH = landscape(A4) TEAL = colors.HexColor("#00796B") LTEAL = colors.HexColor("#B2DFDB") XTEAL = colors.HexColor("#E0F2F1") PINK = colors.HexColor("#AD1457") LPINK = colors.HexColor("#FCE4EC") AMBER = colors.HexColor("#F57F17") LAMBER = colors.HexColor("#FFF9C4") PURPLE = colors.HexColor("#6A1B9A") LPURPLE = colors.HexColor("#F3E5F5") BLUE = colors.HexColor("#1565C0") LBLUE = colors.HexColor("#E3F2FD") GREEN = colors.HexColor("#2E7D32") LGREEN = colors.HexColor("#E8F5E9") SLATE = colors.HexColor("#546E7A") LGRAY = colors.HexColor("#ECEFF1") DGRAY = colors.HexColor("#37474F") WHITE = colors.white ss = getSampleStyleSheet() S_TITLE = ParagraphStyle("s_title", parent=ss["Normal"], fontSize=16, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=20) S_SUB = ParagraphStyle("s_sub", parent=ss["Normal"], fontSize=8, textColor=WHITE, alignment=TA_CENTER, leading=11) S_NOTE = ParagraphStyle("s_note", parent=ss["Normal"], fontSize=7, textColor=SLATE, alignment=TA_CENTER, leading=9) DAYS = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"] MEALS = ["Early\nMorning","Breakfast","Mid-\nMorning","Lunch","Snack","Dinner","Bedtime"] ROW_LABEL_BG = [TEAL, AMBER, BLUE, GREEN, PINK, PURPLE, SLATE] ROW_DATA_BG = [XTEAL,LAMBER,LBLUE, LGREEN,LPINK, LPURPLE,LGRAY] week = [ ["Warm lemon water\n+ 4 almonds + 2 walnuts", "Oatmeal + blueberries\n+ flaxseeds + walnuts", "1 apple +\n2 tbsp peanut butter", "Brown rice + lentil dal\n+ mixed veg sabzi\n+ curd + salad", "Roasted chickpeas\n+ cucumber sticks", "2 multigrain rotis\n+ rajma curry\n+ sauteed spinach", "Warm turmeric milk"], ["Methi seeds water\n(soaked overnight)", "2 veg wheat parathas\n+ low-fat curd", "1 pear + 10 cashews", "Quinoa + chana masala\n+ cucumber-tomato salad\n(olive oil)", "Carrot & celery\nwith hummus", "Moong dal khichdi\n+ palak paneer/tofu\n+ raita", "Mixed seeds trail mix"], ["Warm water +\n1 tsp apple cider vinegar", "2-egg omelette\n(spinach + tomato)\n+ multigrain toast", "1 banana +\n1 tbsp almond butter", "2 jowar rotis + sambar\n+ mixed veg poriyal\n+ curd", "Greek yogurt +\nchia seeds + pomegranate", "Grilled salmon 150g\n+ roasted sweet potato\n+ broccoli", "Ginger-turmeric\ntea (decaf)"], ["Warm water +\ncinnamon + 5 almonds", "Ragi dosa +\ncoconut chutney + sambar", "1 guava +\npumpkin seeds 2 tbsp", "Bajra khichdi +\nrajma curry + buttermilk", "Whole grain crackers\n+ avocado slices", "2 whole wheat rotis\n+ methi chicken or\nchana sabzi + raita", "Warm milk +\npinch nutmeg"], ["Methi seeds water\n+ 4 walnuts", "Veg upma (multigrain)\n+ 1 boiled egg", "1 orange + 10 pistachios", "Brown rice pulao\n(peas + carrot)\n+ dal tadka + curd", "Hummus +\nbell pepper strips", "Baked fish 150g\n+ sauteed kale\n+ sweet potato", "Chamomile tea\n+ 2 almonds"], ["Warm lemon water\n+ soaked chia seeds", "Smoothie bowl: banana\n+ berries + Greek yogurt\n+ granola + flax", "1 pear +\n5-6 walnut halves", "2 multigrain rotis\n+ palak dal +\nbaingan bharta + curd", "Roasted murmura\n+ nuts mix", "Tofu stir-fry + veggies\n+ brown rice or quinoa", "Warm haldi doodh"], ["Warm water + ACV\n+ soaked almonds", "Whole wheat pancakes\n+ berries + 1 tsp honey\n+ Greek yogurt", "1 apple +\n1 small cheese cube", "Grilled chicken/paneer\nsalad + quinoa +\nolive oil dressing", "Fruit chaat: apple,\npomegranate, guava\n(no sugar)", "Egg bhurji or tofu\nscramble + 2 rotis\n+ salad", "Warm milk + cinnamon"], ] doc = SimpleDocTemplate(OUTPUT, pagesize=landscape(A4), leftMargin=1.0*cm, rightMargin=1.0*cm, topMargin=1.0*cm, bottomMargin=1.0*cm, title="PCOS Pregnancy Weekly Meal Planner") story = [] BANNER_W = PW - 2.0*cm # Title banner banner = Table( [[Paragraph("PCOS Pregnancy - Weekly Meal Planner", S_TITLE)], [Paragraph("Evidence-based diet for insulin resistance & a healthy pregnancy | Orris Health | July 2026", S_SUB)]], colWidths=[BANNER_W]) banner.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,-1),TEAL), ("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8), ("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10), ])) story.append(banner) story.append(Spacer(1,3*mm)) # Tips strip (plain strings) tips = ["Drink 2.5-3 L water daily","Eat every 3-4 hours", "Walk 20-30 min after meals","Use iodised salt only", "Caffeine < 200 mg/day","Monitor blood sugar regularly"] tips_tbl = Table([tips], colWidths=[BANNER_W/6]*6) tips_tbl.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,-1),XTEAL), ("FONTNAME",(0,0),(-1,-1),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),7.5), ("TEXTCOLOR",(0,0),(-1,-1),TEAL), ("ALIGN",(0,0),(-1,-1),"CENTER"),("VALIGN",(0,0),(-1,-1),"MIDDLE"), ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4), ("BOX",(0,0),(-1,-1),0.5,TEAL),("INNERGRID",(0,0),(-1,-1),0.3,LTEAL), ])) story.append(tips_tbl) story.append(Spacer(1,3*mm)) # Main grid LABEL_W = 1.65*cm DAY_W = (BANNER_W - LABEL_W) / 7 header = ["Meal"] + DAYS grid_data = [header] for mi in range(7): row = [MEALS[mi]] for di in range(7): row.append(week[di][mi]) grid_data.append(row) grid = Table(grid_data, colWidths=[LABEL_W] + [DAY_W]*7, rowHeights=[0.55*cm] + [1.95*cm]*7) ts = TableStyle([ ("BACKGROUND",(0,0),(-1,0),TEAL), ("TEXTCOLOR",(0,0),(-1,0),WHITE), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,0),8.5), ("ALIGN",(0,0),(-1,0),"CENTER"), ("VALIGN",(0,0),(-1,0),"MIDDLE"), ("FONTNAME",(0,1),(0,-1),"Helvetica-Bold"), ("FONTSIZE",(0,1),(0,-1),7.5), ("ALIGN",(0,1),(0,-1),"CENTER"), ("VALIGN",(0,1),(0,-1),"MIDDLE"), ("TEXTCOLOR",(0,1),(0,-1),WHITE), ("FONTSIZE",(1,1),(-1,-1),7.5), ("FONTNAME",(1,1),(-1,-1),"Helvetica"), ("TEXTCOLOR",(1,1),(-1,-1),DGRAY), ("VALIGN",(1,1),(-1,-1),"TOP"), ("ALIGN",(1,1),(-1,-1),"LEFT"), ("GRID",(0,0),(-1,-1),0.5,LTEAL), ("BOX",(0,0),(-1,-1),1.2,TEAL), ("TOPPADDING",(0,0),(-1,-1),3), ("BOTTOMPADDING",(0,0),(-1,-1),3), ("LEFTPADDING",(0,0),(-1,-1),4), ("RIGHTPADDING",(0,0),(-1,-1),4), ]) for mi in range(7): r = mi + 1 ts.add("BACKGROUND",(0,r),(0,r),ROW_LABEL_BG[mi]) for ci in range(1,8): bg = ROW_DATA_BG[mi] if ci%2==1 else WHITE ts.add("BACKGROUND",(ci,r),(ci,r),bg) grid.setStyle(ts) story.append(grid) story.append(Spacer(1,3*mm)) # Reminders (plain strings) rem = [ "PLATE RULE: Half non-starchy veg + protein + healthy fat + low-GI carb", "DAILY SUPPS: Prenatal vitamin | Vitamin D3 | DHA Omega-3 | Myo-Inositol (ask doctor)", "AVOID: Maida | White sugar | Sugary drinks | Raw fish | Alcohol | >200mg caffeine", ] rem_tbl = Table([rem], colWidths=[BANNER_W/3]*3) rem_tbl.setStyle(TableStyle([ ("BACKGROUND",(0,0),(0,0),XTEAL), ("BACKGROUND",(1,0),(1,0),LAMBER), ("BACKGROUND",(2,0),(2,0),LPINK), ("FONTNAME",(0,0),(-1,-1),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),7.5), ("TEXTCOLOR",(0,0),(0,0),TEAL), ("TEXTCOLOR",(1,0),(1,0),DGRAY), ("TEXTCOLOR",(2,0),(2,0),PINK), ("ALIGN",(0,0),(-1,-1),"CENTER"), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6), ("BOX",(0,0),(-1,-1),0.5,LTEAL),("INNERGRID",(0,0),(-1,-1),0.3,LTEAL), ])) story.append(rem_tbl) story.append(Spacer(1,2*mm)) story.append(HRFlowable(width="100%",thickness=0.5,color=LTEAL)) story.append(Spacer(1,1*mm)) story.append(Paragraph( "This planner is for educational purposes only. Always consult your OB/GYN and dietitian. " "Adjust portions based on trimester, weight and blood sugar. | Orris Health (c) July 2026", S_NOTE)) doc.build(story) print(f"SUCCESS: {OUTPUT}") PYEOF echo "Written OK"
cd /tmp/workspace/pcos-diet && python generate_planner.py 2>&1
ls -lh /tmp/workspace/pcos-diet/PCOS_Weekly_Meal_Planner.pdf
PCOS Weekly Meal Planner
PDF Document · PDF
Create a printable weekly meal planner for this diet
PCOS Weekly Meal Planner
PDF Document · PDF