When a women riches 40 age then what kind of change she experience and how to manage this
women turning 40 physical hormonal changes perimenopause health management
perimenopause women health changes management
https://www.everydayhealth.com/womens-health/how-your-body-c…
perimenopause hormonal changes women diagram

This infographic depicts a pathophysiology diagram outlining the clinical effects of Elaeagnus angustifolia L. (Senjed) on the endocrine profile of post-menopausal women. The visual components include a botanical illustration of the plant with its leaves and fruits, linked via directional blue arrows to its primary phytochemical constituents: Eleagnoside, Kampferol, and Rutin. The diagram specifies a therapeutic regimen of 15 grams per day of whole fruit powder for a 10-week duration. The clinical outcomes are represented by directional arrows indicating hormonal modulation: an increase in Thyroid-stimulating hormone (TSH) and Cortisol, and a decrease in Dehydroepiandrosterone-sulfate (DHEA-S) and Prolactin (PRI). A concluding statement indicates that the intervention improved overall health, though it notes that these hormonal changes were statistically significant based on within-group rather than between-group analysis. This resource is intended for medical education regarding herbal medicine, endocrinology, and menopausal health management.

This composite educational graphic illustrates the morphological and hormonal changes of the human endometrium across a standard 28-day uterine cycle. The top section features a pathophysiology diagram showing fluctuations in estradiol (E2) and progesterone (P). E2 peaks during the proliferative phase, correlating with endometrial growth, while P dominates the secretory phase, driving glandular coiling and the 'window of implantation' (WOI). Below the hormone curves, a cross-sectional illustration depicts the histological evolution of endometrial glands and spiral arteries. It transitions from a thin, shedding layer in the menstrual phase to elongated glands during the proliferative phase, and finally to highly coiled, secretory glands with increased angiogenesis in the secretory phase. The bottom section displays three diagnostic ultrasound images of the uterus, providing clinical correlation of endometrial thickness: 2 mm (early proliferative), 11 mm (late proliferative), and 14 mm (mid-secretory). Key physiological processes such as post-menstrual repair, cellular proliferation, angiogenesis, and stromal decidualization are annotated to link hormonal signaling with macroscopic and microscopic changes.

A comparative pathophysiology diagram illustrating progesterone (P4) signaling mechanisms during pregnancy and parturition in murine and human models. The figure is divided into three sections: (a) Pregnancy (common to both), (b) Prepartum Labor in mice, and (c) Prepartum Labor in women. Each panel depicts reproductive anatomy (ovaries, uterus, fetus) alongside molecular mechanisms involving genomic nuclear progesterone receptor isoforms PR-A and PR-B bound to DNA. In the 'Pregnancy' state, P4 is shown actively binding to both PR-A and PR-B receptors in the cervix and uterus to maintain gestation. Panel (b) illustrates 'actual' progesterone withdrawal in mice, where systemic P4 levels decline, leading to reduced receptor binding and labor onset. Panel (c) illustrates 'functional' progesterone withdrawal in women, where systemic P4 levels remain high, but changes in the ratio and distribution of PR-A and PR-B within the cervix and myometrium modulate the tissue response to trigger parturition. The diagram highlights the differing roles of hormonal versus receptor-level changes between species.
| Area | What to Do |
|---|---|
| Diet | High calcium (1200 mg/day), Vitamin D, whole foods, lean protein, reduce sugar and processed carbs |
| Exercise | Weight-bearing exercises + strength training for bones and metabolism; cardio for heart health |
| Sleep | Keep a consistent sleep schedule, cool the bedroom, limit screens at night, avoid caffeine after noon |
| Stress | Yoga, mindfulness, meditation, deep breathing - chronic stress worsens hormonal imbalance |
| Hydration and skin | Stay well-hydrated, use SPF daily, moisturize regularly |
Management and she is Indian female and vegetarian
Indian vegetarian diet perimenopause management women 40 calcium protein bone health
vegetarian diet menopause women bone health calcium
https://reverse.health/blog/indian-vegetarian-diet-plan-meno…
| Food | Calcium |
|---|---|
| 250 ml milk + curd (dahi) | ~300 mg |
| 50 g pulses (dal) | ~50 mg |
| 15 g til (sesame seeds) | ~170 mg |
| Green leafy vegetables (palak, methi, amaranth) | ~250 mg |
| 50 g ragi (nachni/finger millet) | ~180 mg |
| Total | ~950 mg |
Important: Avoid drinking tea/coffee immediately with calcium-rich meals - tannins reduce calcium absorption. Also, excess spinach (high in oxalates) can bind calcium, so rotate greens.
| Food | Protein per serving |
|---|---|
| Moong dal / masoor dal | ~14g per cup cooked |
| Rajma / chole | ~15g per cup cooked |
| Paneer | ~18g per 100g |
| Soy milk / tofu | ~10g per cup / 10g per 100g |
| Greek yogurt / curd (dahi) | ~10g per cup |
| Roasted chana (snack) | ~15g per 50g |
| Chia seeds / flaxseeds | ~5g per 2 tbsp |
| Meal | Example |
|---|---|
| Early morning | Soaked almonds (5-6) + 1 walnut + warm water with lemon |
| Breakfast | Ragi dosa / moong dal chilla / oats upma + 1 cup fortified milk or soy milk |
| Mid-morning | 1 fruit (amla, guava, or seasonal) + roasted chana |
| Lunch | 2 roti (add flaxseed to dough) + rajma/chana/dal + palak sabzi + curd + salad |
| Evening snack | Til chikki / handful of mixed nuts / chaas (buttermilk) |
| Dinner | Brown rice or jowar roti + moong dal + 1-2 sabzi + small bowl curd |
| Before bed | Warm turmeric milk (haldi doodh) - reduces inflammation and aids sleep |
| Type | Benefit | Indian-friendly options |
|---|---|---|
| Weight-bearing exercise | Prevents bone loss | Brisk walking, stair climbing, dancing |
| Strength training | Builds muscle, boosts metabolism | Yoga with weights, resistance bands, surya namaskar variations |
| Yoga | Mood, flexibility, stress relief, hot flash reduction | Pranayama, restorative yoga, Iyengar yoga |
| Cardio | Heart health, weight management | Brisk 45-min walk daily, cycling, Zumba |
| Supplement | Why | Dose (discuss with doctor) |
|---|---|---|
| Vitamin D3 | Most Indian women are deficient | 1000-2000 IU/day |
| Calcium citrate | If dietary intake is insufficient | 500-600 mg/day (not carbonate - poor absorption) |
| Vitamin B12 | Strict vegetarians often deficient | 500-1000 mcg/day |
| Omega-3 (algae-based) | Heart, brain, mood | 250-500 mg DHA/EPA |
| Iron | If menstrual loss is heavy | Only after testing - excess iron is harmful |
| Magnesium | Sleep, bone, mood | 200-400 mg/day (glycinate form preferred) |
| Area | Action |
|---|---|
| Calcium | Ragi, dahi, milk, til, rajma, tofu + leafy greens daily |
| Vitamin D | Morning sun + consider D3 supplement |
| Protein | Dal/legumes at every meal, paneer, curd, soy |
| Omega-3 | Flaxseed + walnuts daily |
| Exercise | Walk + yoga + strength training |
| Mental health | Pranayama, social connection, proper sleep |
| Screening | Thyroid, sugar, D3, B12 annually |
Once again
| Food | Calcium |
|---|---|
| 250 ml milk + curd (dahi) | ~300 mg |
| 50 g pulses (dal) | ~50 mg |
| 15 g til (sesame seeds) | ~170 mg |
| Green leafy vegetables (palak, methi, amaranth) | ~250 mg |
| 50 g ragi (nachni / finger millet) | ~180 mg |
| Total | ~950 mg |
Avoid drinking tea/coffee immediately with calcium-rich foods (tannins reduce absorption). Rotate leafy greens - excess spinach (high oxalates) can bind calcium.
| Food | Protein per serving |
|---|---|
| Moong dal / masoor dal | ~14g per cup cooked |
| Rajma / chole | ~15g per cup cooked |
| Paneer | ~18g per 100g |
| Soy milk / tofu | ~10g per cup / 10g per 100g |
| Curd (dahi) | ~10g per cup |
| Roasted chana (snack) | ~15g per 50g |
| Chia / flaxseeds | ~5g per 2 tbsp |
| Meal | Example |
|---|---|
| Early morning | Soaked almonds (5-6) + 1 walnut + warm water with lemon |
| Breakfast | Ragi dosa / moong dal chilla / oats upma + 1 cup fortified milk or soy milk |
| Mid-morning | 1 fruit (amla, guava, seasonal) + roasted chana |
| Lunch | 2 roti (flaxseed added to dough) + rajma/chana/dal + palak sabzi + curd + salad |
| Evening snack | Til chikki / mixed nuts / chaas (buttermilk) |
| Dinner | Brown rice or jowar roti + moong dal + 1-2 sabzi + small bowl curd |
| Before bed | Warm haldi doodh (turmeric milk) - reduces inflammation, aids sleep |
| Type | Benefit | Indian-friendly Options |
|---|---|---|
| Weight-bearing | Prevents bone loss | Brisk walking, stair climbing, dancing |
| Strength training | Builds muscle, boosts metabolism | Resistance bands, yoga with weights, surya namaskar |
| Yoga | Mood, flexibility, stress relief, hot flash reduction | Pranayama, restorative yoga, Iyengar yoga |
| Cardio | Heart health, weight management | 45-min brisk walk daily, cycling, Zumba |
| Supplement | Why | Dose (discuss with doctor) |
|---|---|---|
| Vitamin D3 | Most Indian women are deficient | 1000-2000 IU/day |
| Calcium citrate | If dietary intake is insufficient | 500-600 mg/day (prefer citrate over carbonate - better absorption) |
| Vitamin B12 | Vegetarians are commonly deficient | 500-1000 mcg/day |
| Omega-3 (algae-based) | Heart, brain, mood | 250-500 mg DHA/EPA |
| Iron | If menstrual loss is heavy | Only after blood test - excess iron is harmful |
| Magnesium | Sleep, bone, mood | 200-400 mg/day (glycinate form preferred) |
| Test | Frequency |
|---|---|
| Blood pressure | Every 6 months |
| Fasting blood sugar / HbA1c | Annually |
| Lipid profile (cholesterol) | Annually |
| Vitamin D and B12 levels | Annually |
| Thyroid function (TSH) | Every 1-2 years (very common in Indian women) |
| Bone density (DEXA scan) | At 45-50 if risk factors present |
| Mammogram | As per doctor's advice after 40 |
| Pap smear / cervical screening | Every 3-5 years |
| Iron / ferritin | If periods are heavy |
| Area | Key Action |
|---|---|
| Calcium | Ragi, dahi, milk, til, rajma, tofu + leafy greens daily |
| Vitamin D | Morning sun + D3 supplement |
| Protein | Dal/legumes at every meal, paneer, curd, soy |
| Omega-3 | Flaxseed + walnuts daily |
| Exercise | Walk + yoga + strength training |
| Mental health | Pranayama, social connection, proper sleep |
| Screening | Thyroid, sugar, D3, B12 annually |
Make pdf all this details
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/women-health-guide && cat > /tmp/workspace/women-health-guide/generate_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY # ── Output path ────────────────────────────────────────────────────────────── OUTPUT = "/tmp/workspace/women-health-guide/Women_Health_Guide_40_Indian_Vegetarian.pdf" # ── Document ───────────────────────────────────────────────────────────────── doc = SimpleDocTemplate( OUTPUT, pagesize=A4, rightMargin=18*mm, leftMargin=18*mm, topMargin=20*mm, bottomMargin=20*mm, title="Women's Health at 40 – Indian Vegetarian Guide", author="Orris Health" ) # ── Colour palette ──────────────────────────────────────────────────────────── PINK = colors.HexColor("#C2185B") # deep rose PINK_LIGHT = colors.HexColor("#FCE4EC") # blush TEAL = colors.HexColor("#00695C") # dark teal TEAL_LIGHT = colors.HexColor("#E0F2F1") # mint ORANGE = colors.HexColor("#E65100") # deep orange GOLD = colors.HexColor("#F9A825") WHITE = colors.white GREY_BG = colors.HexColor("#F5F5F5") DARK = colors.HexColor("#212121") # ── Styles ──────────────────────────────────────────────────────────────────── base = getSampleStyleSheet() def S(name, **kw): return ParagraphStyle(name, **kw) cover_title = S("CoverTitle", fontSize=26, leading=32, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=6) cover_sub = S("CoverSub", fontSize=13, leading=18, textColor=colors.HexColor("#FFE0B2"), fontName="Helvetica", alignment=TA_CENTER, spaceAfter=4) sec_head = S("SecHead", fontSize=14, leading=18, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_LEFT, spaceAfter=4, spaceBefore=14, backColor=PINK, borderPadding=(6, 8, 6, 8)) sub_head = S("SubHead", fontSize=11, leading=14, textColor=TEAL, fontName="Helvetica-Bold", spaceAfter=3, spaceBefore=8) body = S("Body", fontSize=9.5, leading=14, textColor=DARK, fontName="Helvetica", spaceAfter=3, alignment=TA_JUSTIFY) bullet = S("Bullet", fontSize=9.5, leading=13, textColor=DARK, fontName="Helvetica", leftIndent=14, spaceAfter=2, bulletIndent=4) tip_style = S("Tip", fontSize=9, leading=13, textColor=ORANGE, fontName="Helvetica-Oblique", leftIndent=12, spaceAfter=4) # ── Helpers ─────────────────────────────────────────────────────────────────── def section(title, icon=""): return Paragraph(f"{icon} {title}", sec_head) def sub(text): return Paragraph(text, sub_head) def p(text): return Paragraph(text, body) def b(text): return Paragraph(f"• {text}", bullet) def tip(text): return Paragraph(f"★ {text}", tip_style) def spacer(h=4): return Spacer(1, h*mm) def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#BDBDBD"), spaceAfter=4) def table(headers, rows, col_widths, hdr_bg=PINK, alt_bg=PINK_LIGHT): data = [headers] + rows style = TableStyle([ ("BACKGROUND", (0,0), (-1,0), hdr_bg), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,0), 9), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("FONTSIZE", (0,1), (-1,-1), 8.5), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, alt_bg]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BDBDBD")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING",(0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("WORDWRAP", (0,0), (-1,-1), True), ]) t = Table(data, colWidths=col_widths, repeatRows=1) t.setStyle(style) return t # ── Build story ─────────────────────────────────────────────────────────────── story = [] # ━━━━ COVER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cover_data = [[ Paragraph("Women's Health at 40", cover_title), ],[ Paragraph("Complete Management Guide for Indian Vegetarian Women", cover_sub), ],[ Paragraph("Perimenopause · Nutrition · Exercise · Mental Wellness · Ayurveda", cover_sub), ]] cover_table = Table(cover_data, colWidths=[174*mm]) cover_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), PINK), ("TOPPADDING", (0,0), (-1,-1), 14), ("BOTTOMPADDING",(0,0), (-1,-1), 14), ("LEFTPADDING", (0,0), (-1,-1), 10), ("RIGHTPADDING", (0,0), (-1,-1), 10), ("ROUNDEDCORNERS", [6]), ])) story.append(spacer(6)) story.append(cover_table) story.append(spacer(6)) story.append(hr()) # ━━━━ INTRO ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(p("Around age 40, most women enter <b>perimenopause</b> — the transition phase leading up to menopause. " "Driven by declining ovarian function and fluctuating <b>estrogen</b> and <b>progesterone</b>, " "this phase can last 4–10 years. Not every woman experiences every symptom, and the " "timeline varies widely. The good news: with the right nutrition, exercise, and medical " "awareness, this transition can be managed effectively.")) story.append(spacer(2)) # ━━━━ SECTION 1: NUTRITION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("1. NUTRITION — The Most Important Tool", "🥗")) story.append(p("Indian vegetarian diets are naturally rich in fibre and phytonutrients. " "However, perimenopause creates specific nutrient gaps that need deliberate attention.")) # Calcium story.append(sub("Calcium (Target: 800–1000 mg/day; 1200 mg post-menopause)")) story.append(p("Per Indian Menopause Society & ICMR guidelines, a practical daily calcium plan from Indian foods:")) cal_headers = ["Food", "Calcium (approx.)"] cal_rows = [ ["250 ml milk + curd (dahi)", "~300 mg"], ["50 g pulses / dal", "~50 mg"], ["15 g til (sesame seeds)", "~170 mg"], ["Green leafy vegetables (palak, methi, amaranth)", "~250 mg"], ["50 g ragi / nachni (finger millet)", "~180 mg"], ["TOTAL", "~950 mg"], ] story.append(table(cal_headers, cal_rows, [120*mm, 50*mm])) story.append(spacer(2)) story.append(tip("Ragi (finger millet) is a superstar — highest calcium of any grain. Use in ragi dosa, ragi roti, ragi porridge.")) story.append(tip("Avoid tea/coffee immediately after calcium-rich meals — tannins reduce absorption. Rotate greens; excess spinach (oxalates) can bind calcium.")) story.append(b("Other sources: Til ladoo/chikki, rajma, chole, tofu (~130 mg/85g), dried figs (anjeer), fortified soy/almond milk")) # Vitamin D story.append(sub("Vitamin D (Target: 600–800 IU/day — most Indian women are deficient)")) story.append(b("<b>Best source: Morning sunlight</b> — 15–20 minutes on arms and legs, 3–4 times per week (before 10 AM)")) story.append(b("Food sources (limited in vegetarian diet): Fortified milk, fortified cereals, UV-exposed mushrooms")) story.append(b("<b>Supplement:</b> Most Indian women over 40 need Vitamin D3 1000–2000 IU/day. Target blood level: 30–50 ng/mL")) # Protein story.append(sub("Protein (Target: 1.0–1.2 g/kg body weight/day)")) story.append(p("Muscle loss accelerates after 40. Vegetarians need to be intentional about protein at every meal.")) prot_headers = ["Food", "Protein per serving"] prot_rows = [ ["Moong dal / masoor dal", "~14g per cup (cooked)"], ["Rajma / chole (kidney beans / chickpeas)", "~15g per cup (cooked)"], ["Paneer", "~18g per 100g"], ["Soy milk / tofu", "~10g per cup / 10g per 100g"], ["Curd / dahi (Greek-style)", "~10g per cup"], ["Roasted chana (snack)", "~15g per 50g"], ["Chia seeds / flaxseeds", "~5g per 2 tbsp"], ] story.append(table(prot_headers, prot_rows, [110*mm, 60*mm], hdr_bg=TEAL, alt_bg=TEAL_LIGHT)) story.append(spacer(2)) story.append(tip("Include a protein source at every meal. Dal + sabzi + roti is a good base. Add curd or nuts as a snack.")) # Iron story.append(sub("Iron (Important if periods are heavy or irregular)")) story.append(b("Sources: Palak, methi, rajma, chana, til seeds, dates (khajoor), jaggery (gudh)")) story.append(b("Absorption tip: Eat iron-rich foods with Vitamin C — lemon juice on dal, amla. Avoid tea/coffee 1 hour before and after.")) # Omega-3 story.append(sub("Omega-3 Fatty Acids (Heart health, mood, brain fog)")) story.append(b("Vegetarian sources: Flaxseeds (alsi), chia seeds, walnuts, hemp seeds")) story.append(b("Add 1 tbsp ground flaxseed to roti dough or dal daily")) story.append(b("Consider algae-based Omega-3 supplements if brain fog or mood issues are significant")) # Phytoestrogens story.append(sub("Phytoestrogens — Natural Hormone Support")) story.append(p("Plant compounds that mildly mimic estrogen; help reduce hot flashes. Indian vegetarian diets are naturally rich in them:")) story.append(b("<b>Soy products</b> (tofu, soy milk) — richest source of isoflavones")) story.append(b("<b>Flaxseeds (alsi)</b> — rich in lignans")) story.append(b("<b>Lentils, chickpeas, moong</b> — moderate phytoestrogen content")) story.append(b("<b>Sesame seeds, sunflower seeds</b>")) story.append(spacer(4)) # ━━━━ SECTION 2: MEAL PLAN ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("2. SAMPLE DAILY MEAL PLAN (Indian Vegetarian)", "🍽")) meal_headers = ["Meal", "Example"] meal_rows = [ ["Early morning", "Soaked almonds (5–6) + 1 walnut + warm water with lemon"], ["Breakfast", "Ragi dosa / moong dal chilla / oats upma + 1 cup fortified milk or soy milk"], ["Mid-morning snack", "1 fruit (amla, guava, seasonal) + roasted chana"], ["Lunch", "2 roti (flaxseed in dough) + rajma/chana/dal + palak sabzi + curd + salad"], ["Evening snack", "Til chikki / mixed nuts / chaas (buttermilk)"], ["Dinner", "Brown rice or jowar roti + moong dal + 1–2 sabzi + small bowl curd"], ["Before bed", "Warm haldi doodh (turmeric milk) — reduces inflammation, aids sleep"], ] story.append(table(meal_headers, meal_rows, [38*mm, 136*mm], hdr_bg=ORANGE, alt_bg=colors.HexColor("#FFF3E0"))) story.append(spacer(4)) # ━━━━ SECTION 3: EXERCISE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("3. EXERCISE — Non-Negotiable After 40", "🧘")) story.append(p("Target: <b>150 minutes of moderate activity per week + 2 days of strength work.</b>")) ex_headers = ["Type", "Benefit", "Indian-friendly Options"] ex_rows = [ ["Weight-bearing", "Prevents bone loss", "Brisk walking, stair climbing, dancing"], ["Strength training", "Builds muscle, boosts metabolism", "Resistance bands, yoga with weights, surya namaskar"], ["Yoga", "Mood, flexibility, stress, hot flash relief", "Pranayama, restorative yoga, Iyengar yoga"], ["Cardio", "Heart health, weight management", "45-min brisk walk daily, cycling, Zumba"], ] story.append(table(ex_headers, ex_rows, [38*mm, 60*mm, 76*mm], hdr_bg=TEAL, alt_bg=TEAL_LIGHT)) story.append(spacer(2)) story.append(tip("Surya Namaskar (12 rounds) is excellent — combines strength, flexibility, and cardio in one practice.")) story.append(spacer(4)) # ━━━━ SECTION 4: MENTAL HEALTH ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("4. MENTAL HEALTH MANAGEMENT", "🧠")) story.append(p("Mood swings and anxiety are common and real — not 'in the head'. Estrogen modulates serotonin, " "dopamine, GABA, and norepinephrine — so its fluctuation directly affects mood and cognition.")) story.append(b("<b>Pranayama</b> (anulom-vilom, bhramari) — evidence-backed for anxiety and hot flash reduction")) story.append(b("<b>Sleep:</b> 7–8 hours, consistent bedtime, avoid late-night screens, cool the bedroom")) story.append(b("<b>Social connection:</b> Family, friends, support groups buffer mood changes significantly")) story.append(b("<b>Ashwagandha:</b> Adaptogen with evidence for stress, fatigue, and mood — discuss with your doctor first")) story.append(b("<b>Brain fog:</b> Usually temporary; improves once hormone levels stabilise post-menopause")) story.append(tip("If low mood or anxiety lasts more than 2 weeks, consult a doctor. This is medical, not weakness.")) story.append(spacer(4)) # ━━━━ SECTION 5: SUPPLEMENTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("5. SUPPLEMENTS TO CONSIDER", "💊")) sup_headers = ["Supplement", "Why", "Suggested Dose*"] sup_rows = [ ["Vitamin D3", "Most Indian women are deficient", "1000–2000 IU/day"], ["Calcium citrate", "If dietary intake is insufficient", "500–600 mg/day (citrate absorbs better than carbonate)"], ["Vitamin B12", "Vegetarians are commonly deficient", "500–1000 mcg/day"], ["Omega-3 (algae-based)", "Heart, brain, mood", "250–500 mg DHA/EPA"], ["Iron", "If menstrual loss is heavy", "Only after blood test — excess iron is harmful"], ["Magnesium (glycinate)", "Sleep, bone health, mood", "200–400 mg/day"], ] story.append(table(sup_headers, sup_rows, [40*mm, 74*mm, 60*mm], hdr_bg=PINK, alt_bg=PINK_LIGHT)) story.append(spacer(1)) story.append(tip("*Always confirm doses with your doctor before starting any supplement.")) story.append(spacer(4)) # ━━━━ SECTION 6: MEDICAL SCREENING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("6. MEDICAL SCREENING — Do Not Skip", "🔬")) scr_headers = ["Test", "Frequency"] scr_rows = [ ["Blood pressure", "Every 6 months"], ["Fasting blood sugar / HbA1c", "Annually"], ["Lipid profile (cholesterol)", "Annually"], ["Vitamin D and B12 levels", "Annually"], ["Thyroid function (TSH)", "Every 1–2 years (very common in Indian women)"], ["Bone density (DEXA scan)", "At 45–50 if risk factors present"], ["Mammogram", "As per doctor's advice after 40"], ["Pap smear / cervical screening", "Every 3–5 years"], ["Iron / ferritin", "If periods are heavy or irregular"], ] story.append(table(scr_headers, scr_rows, [100*mm, 74*mm], hdr_bg=TEAL, alt_bg=TEAL_LIGHT)) story.append(spacer(4)) # ━━━━ SECTION 7: TRADITIONAL INDIAN ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("7. TRADITIONAL INDIAN PRACTICES THAT HELP", "🌿")) ayur_headers = ["Herb / Food", "Benefits"] ayur_rows = [ ["Turmeric (haldi)", "Anti-inflammatory; daily use in cooking is beneficial"], ["Ashwagandha", "Adaptogen — supports energy, stress resilience, mood"], ["Shatavari", "Ayurvedic herb for women's hormonal health; evidence for hot flashes and mood"], ["Moringa / sahjan leaves", "Very high in calcium, iron, and Vitamin C; use in dal, sambar, or powder form"], ["Amla (Indian gooseberry)", "Very high Vitamin C (enhances iron and calcium absorption); rich in antioxidants"], ] story.append(table(ayur_headers, ayur_rows, [50*mm, 124*mm], hdr_bg=colors.HexColor("#2E7D32"), alt_bg=colors.HexColor("#E8F5E9"))) story.append(spacer(6)) # ━━━━ SUMMARY TABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ story.append(section("QUICK SUMMARY", "✅")) sum_headers = ["Area", "Key Action"] sum_rows = [ ["Calcium", "Ragi, dahi, milk, til, rajma, tofu + leafy greens daily"], ["Vitamin D", "Morning sun + Vitamin D3 supplement"], ["Protein", "Dal/legumes at every meal, paneer, curd, soy products"], ["Omega-3", "Flaxseed + walnuts daily"], ["Exercise", "Walk + yoga + strength training — 150 min/week"], ["Mental health", "Pranayama, social connection, proper sleep"], ["Screening", "Thyroid, sugar, Vitamin D, B12 — annually"], ] story.append(table(sum_headers, sum_rows, [42*mm, 132*mm], hdr_bg=PINK, alt_bg=PINK_LIGHT)) story.append(spacer(4)) story.append(hr()) # ━━━━ FOOTER NOTE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ footer_style = S("Footer", fontSize=8, leading=11, textColor=colors.HexColor("#757575"), fontName="Helvetica-Oblique", alignment=TA_CENTER) story.append(Paragraph( "This guide is for educational purposes only and does not replace professional medical advice. " "Please consult your gynaecologist, physician, or registered dietitian for personalised care.", footer_style)) # ━━━━ BUILD ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ doc.build(story) print(f"PDF created: {OUTPUT}") PYEOF python3 /tmp/workspace/women-health-guide/generate_pdf.py
Women Health Guide 40 Indian Vegetarian
PDF Document · PDF
Try again
cat > /tmp/workspace/women-health-guide/generate_clean_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm 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, TA_JUSTIFY OUTPUT = "/tmp/workspace/women-health-guide/Women_Health_Guide_Clean.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, rightMargin=20*mm, leftMargin=20*mm, topMargin=22*mm, bottomMargin=22*mm, title="Women's Health at 40 – Indian Vegetarian Guide", author="Orris Health" ) W = 170*mm # usable width # ── Colours ────────────────────────────────────────────────────────────────── NAVY = colors.HexColor("#1A237E") ACCENT = colors.HexColor("#3949AB") PALE = colors.HexColor("#E8EAF6") BLACK = colors.HexColor("#212121") GREY = colors.HexColor("#616161") LT_GREY = colors.HexColor("#F5F5F5") WHITE = colors.white RULE = colors.HexColor("#9FA8DA") # ── Styles ──────────────────────────────────────────────────────────────────── def S(name, **kw): return ParagraphStyle(name, **kw) title_style = S("Title", fontSize=22, leading=28, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER, spaceAfter=2) subtitle_style = S("Subtitle", fontSize=11, leading=15, fontName="Helvetica", textColor=GREY, alignment=TA_CENTER, spaceAfter=8) sec_style = S("Sec", fontSize=12, leading=16, fontName="Helvetica-Bold", textColor=WHITE, spaceBefore=10, spaceAfter=4) sub_style = S("Sub", fontSize=10, leading=14, fontName="Helvetica-Bold", textColor=NAVY, spaceBefore=7, spaceAfter=3) body_style = S("Body", fontSize=9, leading=13, fontName="Helvetica", textColor=BLACK, spaceAfter=2, alignment=TA_JUSTIFY) bullet_style = S("Bul", fontSize=9, leading=13, fontName="Helvetica", textColor=BLACK, leftIndent=12, spaceAfter=2) note_style = S("Note", fontSize=8, leading=12, fontName="Helvetica-Oblique", textColor=GREY, spaceAfter=3, leftIndent=10) footer_style = S("Footer", fontSize=7.5, leading=11, fontName="Helvetica-Oblique", textColor=GREY, alignment=TA_CENTER) # ── Helpers ─────────────────────────────────────────────────────────────────── def gap(h=3): return Spacer(1, h*mm) def rule(): return HRFlowable(width="100%", thickness=0.5, color=RULE, spaceAfter=3, spaceBefore=2) def section_block(num, title): """Navy banner for section heading.""" text = f" {num}. {title}" data = [[Paragraph(text, sec_style)]] t = Table(data, colWidths=[W]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), NAVY), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ])) return t def sub(text): return Paragraph(text, sub_style) def p(text): return Paragraph(text, body_style) def b(text): return Paragraph(f"\u2022 {text}", bullet_style) def note(text): return Paragraph(f"\u2139 {text}", note_style) def make_table(headers, rows, widths, alt=True): data = [headers] + rows row_bgs = [WHITE, LT_GREY] if alt else [WHITE]*len(rows) ts = TableStyle([ ("BACKGROUND", (0,0), (-1,0), ACCENT), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,0), 8.5), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("FONTSIZE", (0,1), (-1,-1), 8.5), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LT_GREY]), ("GRID", (0,0), (-1,-1), 0.35, colors.HexColor("#C5CAE9")), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ]) t = Table(data, colWidths=widths, repeatRows=1) t.setStyle(ts) return t # ══════════════════════════════════════════════════════════════════════════════ story = [] # ── Header ──────────────────────────────────────────────────────────────────── story.append(gap(2)) story.append(Paragraph("Women's Health at 40", title_style)) story.append(Paragraph( "Complete Management Guide for Indian Vegetarian Women | Perimenopause · Nutrition · Exercise · Wellness", subtitle_style)) story.append(rule()) story.append(p( "Around age 40 most women enter <b>perimenopause</b> — the transition leading to menopause driven by " "declining oestrogen and progesterone. This phase can last 4–10 years. With the right nutrition, " "exercise, and medical awareness it is entirely manageable.")) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 1 — NUTRITION # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("1", "NUTRITION")) story.append(gap(2)) story.append(sub("Calcium (800–1000 mg/day; 1200 mg after menopause)")) story.append(p("Build your daily calcium from these Indian foods (per ICMR / Indian Menopause Society):")) cal_rows = [ ["250 ml milk + curd (dahi)", "~300 mg"], ["50 g pulses / dal", "~50 mg"], ["15 g til / sesame seeds", "~170 mg"], ["Green leafy veg (palak, methi, amaranth)", "~250 mg"], ["50 g ragi / finger millet", "~180 mg"], ["Total", "~950 mg"], ] story.append(make_table(["Food", "Calcium (approx.)"], cal_rows, [120*mm, 50*mm])) story.append(note("Ragi has the highest calcium of any grain — use in dosa, roti, or porridge daily.")) story.append(note("Avoid tea/coffee right after calcium-rich meals; tannins reduce absorption.")) story.append(b("Also: til ladoo, rajma, chole, tofu (~130 mg/85 g), dried figs, fortified soy/almond milk")) story.append(gap(3)) story.append(sub("Vitamin D (600–800 IU/day — most Indian women are deficient)")) story.append(b("Best source: 15–20 min morning sunlight on arms & legs, 3–4 times/week (before 10 AM)")) story.append(b("Food sources: Fortified milk, fortified cereals, UV-exposed mushrooms")) story.append(b("Supplement: Vitamin D3 1000–2000 IU/day if blood level is below 30 ng/mL")) story.append(gap(3)) story.append(sub("Protein (1.0–1.2 g per kg body weight per day)")) story.append(p("Muscle mass declines after 40 — every meal should have a protein source.")) prot_rows = [ ["Moong / masoor dal", "~14 g per cup cooked"], ["Rajma / chole", "~15 g per cup cooked"], ["Paneer", "~18 g per 100 g"], ["Soy milk / tofu", "~10 g per cup / 10 g per 100 g"], ["Curd (dahi)", "~10 g per cup"], ["Roasted chana (snack)", "~15 g per 50 g"], ["Chia / flaxseeds", "~5 g per 2 tbsp"], ] story.append(make_table(["Food", "Protein per serving"], prot_rows, [110*mm, 60*mm])) story.append(gap(3)) story.append(sub("Iron (especially if periods are heavy or irregular)")) story.append(b("Sources: Palak, methi, rajma, chana, til seeds, dates (khajoor), jaggery (gudh)")) story.append(b("Tip: Pair iron foods with Vitamin C (lemon juice, amla). Avoid tea/coffee 1 hr before/after.")) story.append(gap(3)) story.append(sub("Omega-3 (heart health, mood, brain fog)")) story.append(b("Vegetarian sources: Flaxseeds (alsi), chia seeds, walnuts, hemp seeds")) story.append(b("Add 1 tbsp ground flaxseed to roti dough or dal daily")) story.append(b("Consider algae-based Omega-3 capsules if brain fog or low mood is significant")) story.append(gap(3)) story.append(sub("Phytoestrogens — Natural Hormone Support")) story.append(p("Plant compounds that mildly mimic oestrogen and reduce hot flashes:")) story.append(b("Soy products (tofu, soy milk) — richest in isoflavones")) story.append(b("Flaxseeds — rich in lignans; lentils, chickpeas, moong — moderate content")) story.append(b("Sesame seeds, sunflower seeds")) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 2 — MEAL PLAN # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("2", "SAMPLE DAILY MEAL PLAN")) story.append(gap(2)) meal_rows = [ ["Early morning", "Soaked almonds (5–6) + 1 walnut + warm lemon water"], ["Breakfast", "Ragi dosa / moong dal chilla / oats upma + 1 cup fortified milk or soy milk"], ["Mid-morning", "1 seasonal fruit (amla, guava) + roasted chana"], ["Lunch", "2 roti (flaxseed in dough) + dal/rajma/chole + palak sabzi + curd + salad"], ["Evening snack", "Til chikki / mixed nuts / chaas (buttermilk)"], ["Dinner", "Brown rice or jowar roti + moong dal + 1–2 sabzi + small bowl curd"], ["Before bed", "Warm haldi doodh (turmeric milk) — anti-inflammatory, aids sleep"], ] story.append(make_table(["Meal", "Example"], meal_rows, [35*mm, 135*mm])) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 3 — EXERCISE # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("3", "EXERCISE")) story.append(gap(2)) story.append(p("Target: <b>150 minutes of moderate activity per week + 2 days of strength work.</b>")) ex_rows = [ ["Weight-bearing", "Prevents bone loss", "Brisk walking, stair climbing, dancing"], ["Strength", "Builds muscle, boosts metabolism", "Resistance bands, surya namaskar"], ["Yoga", "Mood, flexibility, hot flashes", "Pranayama, restorative yoga, Iyengar"], ["Cardio", "Heart health, weight", "45-min walk daily, cycling, Zumba"], ] story.append(make_table(["Type", "Benefit", "Indian-friendly Options"], ex_rows, [32*mm, 60*mm, 78*mm])) story.append(note("Surya Namaskar (12 rounds) combines strength, flexibility, and cardio in one practice.")) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 4 — MENTAL HEALTH # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("4", "MENTAL HEALTH")) story.append(gap(2)) story.append(p("Mood swings and anxiety are real — oestrogen regulates serotonin, dopamine, and GABA. " "Its fluctuation directly affects mood, sleep, and cognition.")) story.append(b("Pranayama (anulom-vilom, bhramari) — reduces anxiety and hot flashes")) story.append(b("Sleep: 7–8 hours; consistent bedtime; cool, dark room; no screens after 9 PM")) story.append(b("Social connection: family, friends, women's groups buffer mood changes strongly")) story.append(b("Ashwagandha: adaptogen with evidence for stress & fatigue — discuss with doctor first")) story.append(b("Brain fog: usually temporary, improves once hormones stabilise post-menopause")) story.append(note("If low mood or anxiety persists beyond 2 weeks, consult a doctor — this is medical, not weakness.")) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 5 — SUPPLEMENTS # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("5", "SUPPLEMENTS TO CONSIDER")) story.append(gap(2)) sup_rows = [ ["Vitamin D3", "Deficiency is very common in India", "1000–2000 IU/day"], ["Calcium citrate", "If dietary intake is insufficient", "500–600 mg/day"], ["Vitamin B12", "Vegetarians are frequently deficient", "500–1000 mcg/day"], ["Omega-3 (algae)", "Heart, brain, mood", "250–500 mg DHA/EPA"], ["Iron", "Only if blood test confirms deficiency", "Dose per doctor"], ["Magnesium glycinate", "Sleep, bone health, mood", "200–400 mg/day"], ] story.append(make_table(["Supplement", "Why", "Dose*"], sup_rows, [42*mm, 82*mm, 46*mm])) story.append(note("*Confirm all doses with your doctor or dietitian before starting.")) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 6 — SCREENING # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("6", "MEDICAL SCREENING — Do Not Skip")) story.append(gap(2)) scr_rows = [ ["Blood pressure", "Every 6 months"], ["Fasting blood sugar / HbA1c","Annually"], ["Lipid profile", "Annually"], ["Vitamin D & B12 levels", "Annually"], ["Thyroid (TSH)", "Every 1–2 years (very common in Indian women)"], ["Bone density (DEXA)", "At 45–50 if risk factors present"], ["Mammogram", "As per doctor's advice after 40"], ["Pap smear / cervical screen","Every 3–5 years"], ["Iron / ferritin", "If periods are heavy or irregular"], ] story.append(make_table(["Test", "Frequency"], scr_rows, [90*mm, 80*mm])) story.append(gap(2)) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 7 — TRADITIONAL INDIAN # ══════════════════════════════════════════════════════════════════════════════ story.append(section_block("7", "TRADITIONAL INDIAN PRACTICES")) story.append(gap(2)) ayur_rows = [ ["Turmeric (haldi)", "Anti-inflammatory; use daily in cooking"], ["Ashwagandha", "Adaptogen — energy, stress resilience, mood"], ["Shatavari", "Ayurvedic herb for women's hormonal health; evidence for hot flashes"], ["Moringa / sahjan leaves","Very high in calcium, iron & Vitamin C — add to dal or sambar"], ["Amla", "Rich in Vitamin C — boosts iron & calcium absorption; antioxidant-rich"], ] story.append(make_table(["Herb / Food", "Benefits"], ayur_rows, [50*mm, 120*mm])) story.append(gap(4)) # ── QUICK SUMMARY ───────────────────────────────────────────────────────────── story.append(rule()) story.append(Paragraph("Quick Summary", S("QS", fontSize=11, leading=14, fontName="Helvetica-Bold", textColor=NAVY, spaceAfter=4))) sum_rows = [ ["Calcium", "Ragi, dahi, milk, til, rajma, tofu + leafy greens — every day"], ["Vitamin D", "Morning sunlight + D3 supplement"], ["Protein", "Dal/legumes at every meal; paneer, curd, soy"], ["Omega-3", "1 tbsp ground flaxseed + a handful of walnuts daily"], ["Exercise", "Walk + yoga + strength training — 150 min/week minimum"], ["Mental health", "Pranayama, social support, consistent sleep"], ["Screening", "Thyroid, blood sugar, Vitamin D, B12 — check annually"], ] story.append(make_table(["Area", "Key Action"], sum_rows, [36*mm, 134*mm])) story.append(gap(4)) story.append(rule()) story.append(Paragraph( "This guide is for educational purposes only and does not replace professional medical advice. " "Consult your gynaecologist, physician, or registered dietitian for personalised care.", footer_style)) # ── Build ───────────────────────────────────────────────────────────────────── doc.build(story) print(f"Done: {OUTPUT}") PYEOF python3 /tmp/workspace/women-health-guide/generate_clean_pdf.py
Women Health Guide Clean
PDF Document · PDF
Try again
cat > /tmp/workspace/women-health-guide/generate_v3.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import ParagraphStyle from reportlab.lib.units import mm from reportlab.lib import colors from reportlab.platypus import ( SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, KeepTogether ) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY, TA_RIGHT from reportlab.platypus.flowables import BalancedColumns PAGE_W, PAGE_H = A4 LM = RM = 18*mm TM = BM = 18*mm W = PAGE_W - LM - RM # ~174 mm OUTPUT = "/tmp/workspace/women-health-guide/Women_Health_Guide_v3.pdf" # ─── Palette ────────────────────────────────────────────────────────────────── C_ROSE = colors.HexColor("#AD1457") # deep rose – main accent C_ROSE_MID = colors.HexColor("#E91E8C") C_ROSE_PALE = colors.HexColor("#FCE4EC") C_GREEN = colors.HexColor("#2E7D32") # dark green C_GREEN_PAL = colors.HexColor("#E8F5E9") C_AMBER = colors.HexColor("#E65100") C_AMBER_PAL = colors.HexColor("#FFF3E0") C_BLUE = colors.HexColor("#1565C0") C_BLUE_PAL = colors.HexColor("#E3F2FD") C_PURPLE = colors.HexColor("#4527A0") C_PURPLE_PAL= colors.HexColor("#EDE7F6") C_TEAL = colors.HexColor("#00695C") C_TEAL_PAL = colors.HexColor("#E0F2F1") C_DARK = colors.HexColor("#1A1A2E") C_BODY = colors.HexColor("#212121") C_GREY = colors.HexColor("#757575") C_LGREY = colors.HexColor("#F5F5F5") C_RULE = colors.HexColor("#E0E0E0") WHITE = colors.white # ─── Style factory ──────────────────────────────────────────────────────────── def St(name, **kw): return ParagraphStyle(name, **kw) H1 = St("H1", fontSize=24, leading=30, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER, spaceAfter=4) H1S = St("H1S", fontSize=11, leading=16, fontName="Helvetica", textColor=colors.HexColor("#F8BBD0"), alignment=TA_CENTER) SEC = St("SEC", fontSize=11, leading=14, fontName="Helvetica-Bold", textColor=WHITE) SUB = St("SUB", fontSize=10, leading=13, fontName="Helvetica-Bold", textColor=C_DARK, spaceBefore=6, spaceAfter=2) BODY = St("BODY", fontSize=9, leading=13, fontName="Helvetica", textColor=C_BODY, spaceAfter=2, alignment=TA_JUSTIFY) BUL = St("BUL", fontSize=9, leading=13, fontName="Helvetica", textColor=C_BODY, leftIndent=10, spaceAfter=2) NOTE = St("NOTE", fontSize=8, leading=11, fontName="Helvetica-Oblique", textColor=C_GREY, leftIndent=8, spaceAfter=2) FT = St("FT", fontSize=7.5, leading=10, fontName="Helvetica-Oblique", textColor=C_GREY, alignment=TA_CENTER) CELL = St("CELL", fontSize=8.5, leading=12, fontName="Helvetica", textColor=C_BODY) CELB = St("CELB", fontSize=8.5, leading=12, fontName="Helvetica-Bold", textColor=WHITE) SUM_H= St("SH", fontSize=9.5, leading=13, fontName="Helvetica-Bold", textColor=C_ROSE) SUM_B= St("SB", fontSize=9, leading=13, fontName="Helvetica", textColor=C_BODY) # ─── Helper flowables ───────────────────────────────────────────────────────── def gap(h=3): return Spacer(1, h*mm) def rule(c=C_RULE, t=0.5): return HRFlowable(width="100%", thickness=t, color=c, spaceAfter=2, spaceBefore=2) def sec_banner(num, title, bg=C_ROSE): inner = Paragraph(f" {num}. {title}", SEC) t = Table([[inner]], colWidths=[W]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0),(-1,-1), bg), ("TOPPADDING", (0,0),(-1,-1), 6), ("BOTTOMPADDING", (0,0),(-1,-1), 6), ("LEFTPADDING", (0,0),(-1,-1), 6), ("RIGHTPADDING", (0,0),(-1,-1), 6), ])) return t def p(txt): return Paragraph(txt, BODY) def b(txt): return Paragraph(f"\u2022 {txt}", BUL) def nt(txt): return Paragraph(f"\u2139\ufe0f {txt}", NOTE) def sub(txt): return Paragraph(txt, SUB) def tbl(headers, rows, widths, hbg=C_ROSE): data = [headers] + rows t = Table(data, colWidths=widths, repeatRows=1) t.setStyle(TableStyle([ ("BACKGROUND", (0,0),(-1,0), hbg), ("TEXTCOLOR", (0,0),(-1,0), WHITE), ("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0),(-1,0), 8.5), ("FONTNAME", (0,1),(-1,-1),"Helvetica"), ("FONTSIZE", (0,1),(-1,-1), 8.5), ("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, C_LGREY]), ("GRID", (0,0),(-1,-1), 0.3, C_RULE), ("VALIGN", (0,0),(-1,-1),"MIDDLE"), ("TOPPADDING", (0,0),(-1,-1), 4), ("BOTTOMPADDING", (0,0),(-1,-1), 4), ("LEFTPADDING", (0,0),(-1,-1), 5), ("RIGHTPADDING", (0,0),(-1,-1), 5), ])) return t # ─── Page-number canvas ─────────────────────────────────────────────────────── def add_page_number(canvas, doc): canvas.saveState() canvas.setFont("Helvetica", 7.5) canvas.setFillColor(C_GREY) canvas.drawRightString(PAGE_W - RM, BM - 6*mm, f"Page {doc.page} | Women's Health at 40 – Indian Vegetarian Guide") canvas.restoreState() # ══════════════════════════════════════════════════════════════════════════════ story = [] # ─── COVER BANNER ───────────────────────────────────────────────────────────── cover = Table([ [Paragraph("Women's Health at 40", H1)], [Paragraph("Complete Management Guide for Indian Vegetarian Women", H1S)], [Paragraph("Perimenopause · Nutrition · Exercise · Mental Wellness · Ayurveda", H1S)], ], colWidths=[W]) cover.setStyle(TableStyle([ ("BACKGROUND", (0,0),(-1,-1), C_ROSE), ("TOPPADDING", (0,0),(-1,-1), 12), ("BOTTOMPADDING", (0,0),(-1,-1), 12), ("LEFTPADDING", (0,0),(-1,-1), 8), ("RIGHTPADDING", (0,0),(-1,-1), 8), ])) story += [gap(2), cover, gap(3), rule(C_ROSE, 1), gap(2)] story.append(p( "Around age 40 most women enter <b>perimenopause</b> — the transition to menopause driven by " "declining oestrogen and progesterone. This can last 4–10 years. With the right nutrition, exercise, " "and awareness it is entirely manageable. This guide is tailored specifically for <b>Indian vegetarian women</b>.")) story.append(gap(3)) # ══════════════════════════════════════════════════════════════════════════════ # S1 NUTRITION # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("1","NUTRITION — The Most Important Tool"), gap(2)] story.append(sub("🦴 Calcium (800–1000 mg/day | 1200 mg post-menopause)")) story.append(p("Build your daily calcium from these Indian foods (ICMR / Indian Menopause Society):")) story.append(tbl( [Paragraph("Food",CELB), Paragraph("Calcium (approx.)",CELB)], [[Paragraph(r,CELL),Paragraph(c,CELL)] for r,c in [ ("250 ml milk + curd (dahi)", "~300 mg"), ("50 g pulses / dal", "~50 mg"), ("15 g til / sesame seeds", "~170 mg"), ("Green leafy veg — palak, methi, amaranth", "~250 mg"), ("50 g ragi / finger millet", "~180 mg"), ("TOTAL", "~950 mg"), ]], [120*mm, 50*mm])) story += [gap(1), nt("Ragi has the highest calcium of any grain — use in dosa, roti, or porridge daily."), nt("Avoid tea/coffee right after calcium-rich meals; tannins cut absorption."), b("Other sources: til ladoo, rajma, chole, tofu (~130 mg/85 g), dried figs, fortified soy/almond milk"), gap(3)] story.append(sub("☀️ Vitamin D (600–800 IU/day — most Indian women are deficient)")) story += [ b("<b>Best source:</b> 15–20 min morning sunlight on arms & legs, 3–4 × per week (before 10 AM)"), b("Food sources: fortified milk, fortified cereals, UV-exposed mushrooms (limited in veg diet)"), b("<b>Supplement:</b> Vitamin D3 1000–2000 IU/day; target blood level 30–50 ng/mL"), gap(3)] story.append(sub("💪 Protein (1.0–1.2 g per kg body weight per day)")) story.append(p("Muscle mass falls after 40. Put protein in every meal.")) story.append(tbl( [Paragraph("Food",CELB), Paragraph("Protein per serving",CELB)], [[Paragraph(r,CELL),Paragraph(c,CELL)] for r,c in [ ("Moong / masoor dal", "~14 g per cup cooked"), ("Rajma / chole", "~15 g per cup cooked"), ("Paneer", "~18 g per 100 g"), ("Soy milk / tofu", "~10 g per cup / 10 g per 100 g"), ("Curd / dahi", "~10 g per cup"), ("Roasted chana (snack)", "~15 g per 50 g"), ("Chia seeds / flaxseeds", "~5 g per 2 tbsp"), ]], [110*mm, 60*mm], hbg=C_GREEN)) story.append(gap(3)) story.append(sub("🩸 Iron (if periods are still heavy or irregular)")) story += [ b("Sources: palak, methi, rajma, chana, til seeds, dates (khajoor), jaggery (gudh)"), b("Tip: pair with Vitamin C (lemon juice on dal, amla). Avoid tea/coffee 1 hr before/after."), gap(3)] story.append(sub("🐟 Omega-3 (heart, mood, brain fog)")) story += [ b("Vegetarian sources: flaxseeds (alsi), chia seeds, walnuts, hemp seeds"), b("Add 1 tbsp ground flaxseed to roti dough or dal daily"), b("Algae-based Omega-3 capsules if brain fog or low mood is prominent"), gap(3)] story.append(sub("🌿 Phytoestrogens — Natural Hormone Support")) story.append(p("Plant compounds that mildly mimic oestrogen and ease hot flashes:")) story += [ b("Soy products (tofu, soy milk) — richest in isoflavones"), b("Flaxseeds (alsi) — rich in lignans"), b("Lentils, chickpeas, moong, sesame seeds, sunflower seeds"), gap(3)] # ══════════════════════════════════════════════════════════════════════════════ # S2 MEAL PLAN # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("2","SAMPLE DAILY MEAL PLAN", C_AMBER), gap(2)] story.append(tbl( [Paragraph("Meal",CELB), Paragraph("Example",CELB)], [[Paragraph(m,CELL),Paragraph(e,CELL)] for m,e in [ ("Early morning", "Soaked almonds (5–6) + 1 walnut + warm lemon water"), ("Breakfast", "Ragi dosa / moong dal chilla / oats upma + 1 cup fortified milk or soy milk"), ("Mid-morning", "1 seasonal fruit (amla, guava) + roasted chana"), ("Lunch", "2 roti (flaxseed in dough) + dal/rajma/chole + palak sabzi + curd + salad"), ("Evening snack", "Til chikki / mixed nuts / chaas (buttermilk)"), ("Dinner", "Brown rice or jowar roti + moong dal + 1–2 sabzi + small bowl curd"), ("Before bed", "Warm haldi doodh (turmeric milk) — anti-inflammatory, aids sleep"), ]], [35*mm, 135*mm], hbg=C_AMBER)) story.append(gap(3)) # ══════════════════════════════════════════════════════════════════════════════ # S3 EXERCISE # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("3","EXERCISE — Non-Negotiable After 40", C_TEAL), gap(2)] story.append(p("<b>Target:</b> 150 min of moderate activity per week + 2 days strength work.")) story.append(tbl( [Paragraph("Type",CELB), Paragraph("Benefit",CELB), Paragraph("Indian-friendly Options",CELB)], [[Paragraph(a,CELL),Paragraph(b_,CELL),Paragraph(c,CELL)] for a,b_,c in [ ("Weight-bearing","Prevents bone loss", "Brisk walking, stair climbing, dancing"), ("Strength", "Builds muscle, boosts metabolism","Resistance bands, surya namaskar"), ("Yoga", "Mood, flexibility, hot flashes", "Pranayama, restorative yoga, Iyengar"), ("Cardio", "Heart health, weight control", "45-min walk daily, cycling, Zumba"), ]], [32*mm, 60*mm, 78*mm], hbg=C_TEAL)) story += [gap(1), nt("Surya Namaskar (12 rounds) = strength + flexibility + cardio in one practice."), gap(3)] # ══════════════════════════════════════════════════════════════════════════════ # S4 MENTAL HEALTH # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("4","MENTAL HEALTH", C_PURPLE), gap(2)] story.append(p("Mood swings and anxiety are real and hormonal — oestrogen regulates serotonin, dopamine, " "and GABA. Fluctuation directly affects mood, sleep, and cognition.")) story += [ b("Pranayama (anulom-vilom, bhramari) — evidence-backed for anxiety and hot flash relief"), b("Sleep: 7–8 hours; consistent bedtime; cool, dark room; no screens after 9 PM"), b("Social connection: family, friends, women's groups strongly buffer mood changes"), b("Ashwagandha: adaptogen with evidence for stress & fatigue — confirm with doctor first"), b("Brain fog: usually temporary; improves once hormones stabilise post-menopause"), nt("Persistent low mood or anxiety beyond 2 weeks = medical issue. Please see a doctor."), gap(3)] # ══════════════════════════════════════════════════════════════════════════════ # S5 SUPPLEMENTS # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("5","SUPPLEMENTS TO CONSIDER", C_BLUE), gap(2)] story.append(tbl( [Paragraph("Supplement",CELB), Paragraph("Why",CELB), Paragraph("Dose*",CELB)], [[Paragraph(a,CELL),Paragraph(b_,CELL),Paragraph(c,CELL)] for a,b_,c in [ ("Vitamin D3", "Deficiency very common in India", "1000–2000 IU/day"), ("Calcium citrate", "If dietary intake is insufficient", "500–600 mg/day"), ("Vitamin B12", "Vegetarians frequently deficient", "500–1000 mcg/day"), ("Omega-3 (algae)", "Heart, brain, mood", "250–500 mg DHA/EPA"), ("Iron", "Only if blood test confirms deficiency", "Per doctor"), ("Magnesium glycinate", "Sleep, bone health, mood", "200–400 mg/day"), ]], [42*mm, 82*mm, 46*mm], hbg=C_BLUE)) story += [gap(1), nt("*Always confirm doses with your doctor or dietitian before starting."), gap(3)] # ══════════════════════════════════════════════════════════════════════════════ # S6 SCREENING # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("6","MEDICAL SCREENING — Do Not Skip", C_GREEN), gap(2)] story.append(tbl( [Paragraph("Test",CELB), Paragraph("Frequency",CELB)], [[Paragraph(a,CELL),Paragraph(b_,CELL)] for a,b_ in [ ("Blood pressure", "Every 6 months"), ("Fasting blood sugar / HbA1c", "Annually"), ("Lipid profile (cholesterol)", "Annually"), ("Vitamin D & B12 levels", "Annually"), ("Thyroid (TSH)", "Every 1–2 years (very common in Indian women)"), ("Bone density (DEXA scan)", "At age 45–50 if risk factors present"), ("Mammogram", "As per doctor's advice after 40"), ("Pap smear / cervical screen", "Every 3–5 years"), ("Iron / ferritin", "If periods are heavy or irregular"), ]], [90*mm, 80*mm], hbg=C_GREEN)) story.append(gap(3)) # ══════════════════════════════════════════════════════════════════════════════ # S7 AYURVEDA / TRADITIONAL # ══════════════════════════════════════════════════════════════════════════════ story += [sec_banner("7","TRADITIONAL INDIAN PRACTICES THAT HELP", colors.HexColor("#6A1B9A")), gap(2)] story.append(tbl( [Paragraph("Herb / Food",CELB), Paragraph("Benefits",CELB)], [[Paragraph(a,CELL),Paragraph(b_,CELL)] for a,b_ in [ ("Turmeric (haldi)", "Anti-inflammatory; daily cooking use is beneficial"), ("Ashwagandha", "Adaptogen — energy, stress resilience, mood support"), ("Shatavari", "Women's hormonal herb; evidence for hot flashes & mood"), ("Moringa / sahjan leaves", "Very high calcium, iron & Vitamin C; add to dal or sambar"), ("Amla (Indian gooseberry)","Richest Vitamin C source — boosts iron & calcium absorption"), ]], [50*mm, 120*mm], hbg=colors.HexColor("#6A1B9A"))) story.append(gap(4)) # ── SUMMARY ─────────────────────────────────────────────────────────────────── story += [rule(C_ROSE, 1), gap(2), Paragraph("QUICK REFERENCE SUMMARY", St("QH", fontSize=11, leading=14, fontName="Helvetica-Bold", textColor=C_ROSE, spaceAfter=4)), gap(1)] sum_rows = [ ("Calcium", "Ragi, dahi, milk, til, rajma, tofu + leafy greens — every day"), ("Vitamin D", "Morning sunlight + Vitamin D3 supplement"), ("Protein", "Dal/legumes at every meal; paneer, curd, soy"), ("Omega-3", "1 tbsp ground flaxseed + handful of walnuts daily"), ("Exercise", "Walk + yoga + strength — 150 min/week minimum"), ("Mental health","Pranayama, social support, consistent 7–8 hr sleep"), ("Screening", "Thyroid, blood sugar, Vitamin D, B12 — check annually"), ] sum_data = [[Paragraph(k, SUM_H), Paragraph(v, SUM_B)] for k,v in sum_rows] sum_tbl = Table(sum_data, colWidths=[38*mm, 132*mm]) sum_tbl.setStyle(TableStyle([ ("ROWBACKGROUNDS", (0,0),(-1,-1), [WHITE, C_ROSE_PALE]), ("GRID", (0,0),(-1,-1), 0.3, C_RULE), ("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), ])) story += [sum_tbl, gap(4), rule(C_ROSE, 0.5), gap(2)] story.append(Paragraph( "This guide is for educational purposes only and does not replace professional medical advice. " "Consult your gynaecologist, physician, or registered dietitian for personalised care.", FT)) # ── Build ───────────────────────────────────────────────────────────────────── doc = SimpleDocTemplate(OUTPUT, pagesize=A4, rightMargin=RM, leftMargin=LM, topMargin=TM, bottomMargin=BM, title="Women's Health at 40 – Indian Vegetarian Guide", author="Orris Health") doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number) print(f"Done: {OUTPUT}") PYEOF python3 /tmp/workspace/women-health-guide/generate_v3.py
Women Health Guide v3
PDF Document · PDF