Draft a pdf of different seeds (eg. Pumpkin, sesame, poppy, sunflower, basil, flax, hemp, etc) a normal man can digest in a good portion. Note - Main focus should be to fill fibre, calcium content. And also give the benefits of those in a good portion.

Reading File
Searching the Web

seeds nutritional content fiber calcium pumpkin sesame poppy sunflower flax hemp basil seeds per serving

Reading Web Page

https://www.healthcastle.com/comparing-nutritional-values-ed…

Searching the Web

poppy seeds basil seeds sabja fiber calcium nutritional benefits daily portion

Running Command

mkdir -p /tmp/workspace/seeds-guide && ls /tmp/workspace/seeds-guide/

Writing File

~/seeds-guide/generate_seeds_pdf.py

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

OUTPUT = "/tmp/workspace/seeds-guide/Seeds_Nutrition_Guide.pdf"

# ── Color Palette ──────────────────────────────────────────────────────────
GREEN_DARK   = colors.HexColor("#2D5016")
GREEN_MID    = colors.HexColor("#4A7C2F")
GREEN_LIGHT  = colors.HexColor("#A8D5A2")
GREEN_PALE   = colors.HexColor("#EAF5E5")
AMBER        = colors.HexColor("#F0A500")
AMBER_LIGHT  = colors.HexColor("#FFF3CD")
RUST         = colors.HexColor("#C0392B")
CREAM        = colors.HexColor("#FAFDF6")
GREY_TEXT    = colors.HexColor("#333333")
WHITE        = colors.white

# ── Styles ────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def S(name, **kwargs):
    return ParagraphStyle(name, **kwargs)

title_style = S("DocTitle",
    fontName="Helvetica-Bold", fontSize=26, textColor=WHITE,
    alignment=TA_CENTER, leading=32, spaceAfter=4)

subtitle_style = S("DocSub",
    fontName="Helvetica", fontSize=12, textColor=GREEN_LIGHT,
    alignment=TA_CENTER, leading=16, spaceAfter=2)

date_style = S("DocDate",
    fontName="Helvetica-Oblique", fontSize=9, textColor=GREEN_LIGHT,
    alignment=TA_CENTER)

section_head = S("SectionHead",
    fontName="Helvetica-Bold", fontSize=15, textColor=GREEN_DARK,
    spaceBefore=18, spaceAfter=6, leading=20)

seed_title = S("SeedTitle",
    fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
    alignment=TA_LEFT, leading=17)

body_j = S("BodyJ",
    fontName="Helvetica", fontSize=9.5, textColor=GREY_TEXT,
    leading=14, alignment=TA_JUSTIFY, spaceAfter=5)

bullet_style = S("Bullet",
    fontName="Helvetica", fontSize=9.5, textColor=GREY_TEXT,
    leading=14, leftIndent=12, bulletIndent=0, spaceAfter=3)

note_style = S("Note",
    fontName="Helvetica-Oblique", fontSize=8.5, textColor=colors.HexColor("#555555"),
    leading=12, alignment=TA_CENTER, spaceBefore=4)

table_header_style = S("TH",
    fontName="Helvetica-Bold", fontSize=9, textColor=WHITE,
    alignment=TA_CENTER)

table_cell_style = S("TC",
    fontName="Helvetica", fontSize=9, textColor=GREY_TEXT,
    alignment=TA_CENTER, leading=12)

# ── Seed Data ─────────────────────────────────────────────────────────────
# Each entry: name, emoji, color_hex, recommended_daily, fiber_g, calcium_mg, 
#             calories, protein_g, fat_g, highlights (list of bullet strings)
seeds = [
    {
        "name": "Sesame Seeds",
        "emoji": "🌾",
        "color": colors.HexColor("#8B6914"),
        "bg":    colors.HexColor("#FFF8E7"),
        "portion": "2 tablespoons (18 g)",
        "fiber": "2.2 g",
        "calcium": "176 mg (18% DV)",
        "calories": "104 kcal",
        "protein": "3.2 g",
        "fat": "9.0 g",
        "highlights": [
            "Highest plant-based calcium among common seeds - vital for bone density",
            "Rich in sesamin & sesamolin (lignans) that lower LDL cholesterol",
            "Contains copper supporting energy metabolism and nerve function",
            "Phytosterols reduce dietary cholesterol absorption",
            "Excellent on salads, stir-fries, sushi, and as tahini paste",
        ],
    },
    {
        "name": "Poppy Seeds",
        "emoji": "🌸",
        "color": colors.HexColor("#6A4C9C"),
        "bg":    colors.HexColor("#F3EEFF"),
        "portion": "3 tablespoons (28 g)",
        "fiber": "4.2 g",
        "calcium": "350 mg (35% DV)",
        "calories": "138 kcal",
        "protein": "4.6 g",
        "fat": "11.2 g",
        "highlights": [
            "Outstanding calcium source - 3 tbsp covers 35% of a man's daily need",
            "High fiber supports gut health and regular bowel movements",
            "Rich in manganese (bone formation) and phosphorus (cell repair)",
            "Linoleic acid (omega-6) helps maintain healthy skin & immune response",
            "Great on breads, muffins, dressings, and baked oatmeal",
        ],
    },
    {
        "name": "Chia Seeds",
        "emoji": "✨",
        "color": colors.HexColor("#1A6B4A"),
        "bg":    colors.HexColor("#E8F8F1"),
        "portion": "2 tablespoons (20 g)",
        "fiber": "7.6 g",
        "calcium": "126 mg (13% DV)",
        "calories": "98 kcal",
        "protein": "3.2 g",
        "fat": "6.8 g",
        "highlights": [
            "Highest fiber per serving among all common seeds - keeps you full",
            "Soluble fiber forms a gel that slows digestion & stabilises blood sugar",
            "Top plant source of ALA omega-3 (1,800 mg per tablespoon)",
            "Calcium + phosphorus combo directly supports bone mineralisation",
            "Soak in water/milk overnight for pudding or add dry to smoothies",
        ],
    },
    {
        "name": "Flax Seeds",
        "emoji": "💛",
        "color": colors.HexColor("#B8860B"),
        "bg":    colors.HexColor("#FFFDE7"),
        "portion": "2 tablespoons (14 g) - ground",
        "fiber": "3.8 g",
        "calcium": "36 mg (4% DV)",
        "calories": "74 kcal",
        "protein": "2.6 g",
        "fat": "6.0 g",
        "highlights": [
            "Soluble fiber (mucilage) regulates blood sugar and lowers cholesterol",
            "Richest dietary source of plant lignans - shown to reduce cancer risk",
            "Must be ground before eating - whole seeds pass undigested",
            "ALA omega-3 content (1,600 mg per tbsp) supports heart health",
            "Add ground flax to oatmeal, yogurt, smoothies, or baked goods",
        ],
    },
    {
        "name": "Pumpkin Seeds (Pepitas)",
        "emoji": "🎃",
        "color": colors.HexColor("#2E7D32"),
        "bg":    colors.HexColor("#E8F5E9"),
        "portion": "2 tablespoons (16 g)",
        "fiber": "0.6 g",
        "calcium": "6.8 mg (1% DV)",
        "calories": "86 kcal",
        "protein": "4.0 g",
        "fat": "7.4 g",
        "highlights": [
            "Exceptional zinc source - supports testosterone, immunity & wound healing",
            "High magnesium (37% DV per oz) for muscle function and sleep quality",
            "Iron content helps prevent fatigue in active men",
            "Tryptophan converts to serotonin - promotes better mood and rest",
            "Best eaten raw or lightly roasted as a snack or on salads",
        ],
    },
    {
        "name": "Sunflower Seeds",
        "emoji": "🌻",
        "color": colors.HexColor("#E65100"),
        "bg":    colors.HexColor("#FFF3E0"),
        "portion": "2 tablespoons (18 g)",
        "fiber": "1.4 g",
        "calcium": "13 mg (1% DV)",
        "calories": "106 kcal",
        "protein": "2.0 g",
        "fat": "9.2 g",
        "highlights": [
            "Highest natural Vitamin E source - protects cells from oxidative damage",
            "High magnesium helps reduce migraine frequency and blood pressure",
            "Selenium content supports thyroid function and immune defence",
            "Phytosterols actively lower LDL cholesterol",
            "Eat as a snack, in trail mix, or sprinkled on salads and soups",
        ],
    },
    {
        "name": "Hemp Seeds",
        "emoji": "🌿",
        "color": colors.HexColor("#558B2F"),
        "bg":    colors.HexColor("#F1F8E9"),
        "portion": "3 tablespoons (30 g)",
        "fiber": "1.5 g",
        "calcium": "0 mg (<1% DV)",
        "calories": "170 kcal",
        "protein": "9.5 g",
        "fat": "14.7 g",
        "highlights": [
            "Complete plant protein with all 9 essential amino acids - comparable to eggs",
            "Ideal 3:1 omega-6 to omega-3 ratio reduces chronic inflammation",
            "Gamma-linolenic acid (GLA) supports hormonal balance in men",
            "Easily digestible - no phytic acid like most other seeds",
            "Add to smoothies, yogurt, cereal, or eat raw for maximum benefit",
        ],
    },
    {
        "name": "Basil Seeds (Sabja)",
        "emoji": "🌱",
        "color": colors.HexColor("#00695C"),
        "bg":    colors.HexColor("#E0F2F1"),
        "portion": "1 tablespoon (12 g) soaked",
        "fiber": "6.0 g",
        "calcium": "115 mg (15% DV)",
        "calories": "60 kcal",
        "protein": "2.0 g",
        "fat": "2.5 g",
        "highlights": [
            "Very high fiber:calorie ratio - one of the best seeds for gut health",
            "Swell to 30x volume in water - induce satiety and reduce overeating",
            "15% daily calcium per tbsp plus magnesium and iron",
            "Cooling effect on digestive tract - soothes acidity and bloating",
            "Soak in water 15 min before adding to drinks, lassi, or desserts",
        ],
    },
]

# ── Comparison Table Data ─────────────────────────────────────────────────
table_header = ["Seed", "Portion", "Calories", "Fiber", "Calcium", "Protein"]
table_rows = [
    ["Sesame",        "2 tbsp (18g)",     "104", "2.2 g", "176 mg ★★★", "3.2 g"],
    ["Poppy",         "3 tbsp (28g)",     "138", "4.2 g", "350 mg ★★★★", "4.6 g"],
    ["Chia",          "2 tbsp (20g)",     "98",  "7.6 g ★★★★", "126 mg ★★★", "3.2 g"],
    ["Flax (ground)", "2 tbsp (14g)",     "74",  "3.8 g ★★★", "36 mg ★",    "2.6 g"],
    ["Pumpkin",       "2 tbsp (16g)",     "86",  "0.6 g",  "6.8 mg",     "4.0 g"],
    ["Sunflower",     "2 tbsp (18g)",     "106", "1.4 g",  "13 mg",      "2.0 g"],
    ["Hemp",          "3 tbsp (30g)",     "170", "1.5 g",  "<1 mg",      "9.5 g ★★★★"],
    ["Basil (Sabja)", "1 tbsp (12g)",     "60",  "6.0 g ★★★★", "115 mg ★★★", "2.0 g"],
]

# ── Tips Data ─────────────────────────────────────────────────────────────
daily_combos = [
    ("Morning Boost Combo",
     "Chia Seeds (2 tbsp) + Hemp Seeds (3 tbsp)",
     "Fiber: 9.1 g | Calcium: 126 mg | Protein: 12.7 g",
     "Blend into a morning smoothie or mix into overnight oats"),
    ("Bone-Builder Combo",
     "Poppy Seeds (3 tbsp) + Sesame Seeds (2 tbsp)",
     "Fiber: 6.4 g | Calcium: 526 mg (~53% DV!) | Protein: 7.8 g",
     "Sprinkle on bread or stir into yogurt - a powerhouse for bones"),
    ("Gut-Health Combo",
     "Basil Seeds (1 tbsp) + Flax Seeds (2 tbsp, ground)",
     "Fiber: 9.8 g | Calcium: 151 mg | Protein: 4.6 g",
     "Soak basil seeds, mix with ground flax in a glass of water or juice"),
    ("All-Day Snack Mix",
     "Pumpkin (2 tbsp) + Sunflower (2 tbsp) + Sesame (1 tbsp)",
     "Fiber: 2.9 g | Calcium: ~107 mg | Protein: 7.6 g",
     "Trail mix base - adds zinc, vitamin E, and copper together"),
]

# ── Document Builder ──────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.8*cm, leftMargin=1.8*cm,
    topMargin=1.8*cm, bottomMargin=1.8*cm,
    title="Seeds Nutrition Guide - Fibre & Calcium Focus",
    author="Orris Health",
)

story = []

# ── Cover Banner ───────────────────────────────────────────────────────────
cover_data = [[
    Paragraph("🌱 Seeds Nutrition Guide", title_style),
]]
cover_table = Table(cover_data, colWidths=[17.4*cm])
cover_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), GREEN_DARK),
    ("TOPPADDING",    (0,0), (-1,-1), 28),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ("LEFTPADDING",   (0,0), (-1,-1), 14),
    ("RIGHTPADDING",  (0,0), (-1,-1), 14),
    ("ROUNDEDCORNERS", [8]),
]))
story.append(cover_table)

sub_data = [[
    Paragraph("What a Man Should Eat Daily - Focused on Fibre & Calcium", subtitle_style),
]]
sub_table = Table(sub_data, colWidths=[17.4*cm])
sub_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), GREEN_MID),
    ("TOPPADDING",    (0,0), (-1,-1), 8),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
story.append(sub_table)

date_data = [[
    Paragraph("Compiled July 2026  |  DV = Daily Value for adult men (2000 kcal diet)", date_style),
]]
date_table = Table(date_data, colWidths=[17.4*cm])
date_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), GREEN_LIGHT),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(date_table)
story.append(Spacer(1, 14))

# ── Why Seeds? ─────────────────────────────────────────────────────────────
why_text = (
    "Seeds are among the most nutrient-dense foods on the planet. Small in size but big in "
    "impact, they supply dietary fibre (essential for gut health, blood sugar control, and "
    "cholesterol management), plant-based calcium (critical for bone density, muscle "
    "contraction, and nerve signalling), healthy fats, and complete proteins - all in a "
    "handful. Adult men need <b>38 g of fibre</b> and <b>1,000 mg of calcium</b> per day. "
    "A carefully chosen daily seed mix can deliver a significant portion of both targets "
    "without adding junk calories."
)
story.append(Paragraph("Why Seeds for Fibre & Calcium?", section_head))
story.append(Paragraph(why_text, body_j))
story.append(HRFlowable(width="100%", thickness=1.5, color=GREEN_LIGHT, spaceAfter=8))

# ── Individual Seed Profiles ───────────────────────────────────────────────
story.append(Paragraph("Individual Seed Profiles", section_head))
story.append(Spacer(1, 4))

for i, seed in enumerate(seeds):
    # Header bar
    header_data = [[
        Paragraph(f"{seed['emoji']}  {seed['name']}", seed_title),
        Paragraph(f"Daily Portion: {seed['portion']}", 
                  ParagraphStyle("ph", fontName="Helvetica-Bold", fontSize=9,
                                 textColor=WHITE, alignment=TA_LEFT, leading=13)),
    ]]
    header_table = Table(header_data, colWidths=[9.5*cm, 7.5*cm])
    header_table.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), seed["color"]),
        ("TOPPADDING",    (0,0), (-1,-1), 8),
        ("BOTTOMPADDING", (0,0), (-1,-1), 8),
        ("LEFTPADDING",   (0,0), (-1,-1), 10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 10),
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ]))

    # Nutrition strip
    nut_style = ParagraphStyle("ns", fontName="Helvetica-Bold", fontSize=9.5,
                                textColor=GREEN_DARK, alignment=TA_CENTER)
    val_style = ParagraphStyle("vs", fontName="Helvetica", fontSize=9,
                                textColor=GREY_TEXT, alignment=TA_CENTER)

    nut_data = [
        [
            Paragraph("Fibre", nut_style),
            Paragraph("Calcium", nut_style),
            Paragraph("Calories", nut_style),
            Paragraph("Protein", nut_style),
            Paragraph("Fat", nut_style),
        ],
        [
            Paragraph(seed["fiber"], val_style),
            Paragraph(seed["calcium"], val_style),
            Paragraph(seed["calories"], val_style),
            Paragraph(seed["protein"], val_style),
            Paragraph(seed["fat"], val_style),
        ],
    ]
    col_w = 17.4*cm / 5
    nut_table = Table(nut_data, colWidths=[col_w]*5)
    nut_table.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,0), seed["bg"]),
        ("BACKGROUND", (0,1), (-1,1), WHITE),
        ("BOX",        (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
        ("INNERGRID",  (0,0), (-1,-1), 0.3, colors.HexColor("#DDDDDD")),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("ALIGN",         (0,0), (-1,-1), "CENTER"),
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ]))

    # Benefits bullets
    bullets_content = []
    for b in seed["highlights"]:
        bullets_content.append(
            Paragraph(f"<bullet>\u2022</bullet> {b}", bullet_style)
        )

    benefits_data = [[
        Paragraph("Key Benefits & How to Eat:", 
                  ParagraphStyle("bh", fontName="Helvetica-Bold", fontSize=9,
                                 textColor=GREEN_DARK, spaceAfter=4)),
    ]]
    for b in seed["highlights"]:
        benefits_data.append([
            Paragraph(f"\u2022  {b}", bullet_style)
        ])

    benefits_table = Table(benefits_data, colWidths=[17.4*cm])
    benefits_table.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), seed["bg"]),
        ("TOPPADDING",    (0,0), (-1,-1), 4),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
        ("LEFTPADDING",   (0,0), (-1,-1), 10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 10),
        ("BOX",           (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
    ]))

    block = KeepTogether([
        header_table,
        nut_table,
        benefits_table,
        Spacer(1, 10),
    ])
    story.append(block)

# ── Comparison Table ───────────────────────────────────────────────────────
story.append(PageBreak())
story.append(Paragraph("Quick Comparison Table", section_head))
story.append(Paragraph(
    "All values per recommended daily portion. ★ = top performers for that nutrient.",
    note_style
))
story.append(Spacer(1, 6))

tbl_data = []
# Header row
th = [Paragraph(h, ParagraphStyle("th2", fontName="Helvetica-Bold", fontSize=9,
                                    textColor=WHITE, alignment=TA_CENTER))
      for h in table_header]
tbl_data.append(th)

for idx, row in enumerate(table_rows):
    tc = [Paragraph(cell, ParagraphStyle("tc2", fontName="Helvetica", fontSize=8.8,
                                          textColor=GREY_TEXT, alignment=TA_CENTER,
                                          leading=12))
          for cell in row]
    tbl_data.append(tc)

col_ws = [3.5*cm, 3.5*cm, 2.0*cm, 2.4*cm, 3.0*cm, 3.0*cm]
cmp_table = Table(tbl_data, colWidths=col_ws, repeatRows=1)
cmp_table.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), GREEN_DARK),
    ("TEXTCOLOR",     (0,0), (-1,0), WHITE),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [CREAM, GREEN_PALE]),
    ("BOX",           (0,0), (-1,-1), 0.8, GREEN_MID),
    ("INNERGRID",     (0,0), (-1,-1), 0.3, colors.HexColor("#BBBBBB")),
    ("TOPPADDING",    (0,0), (-1,-1), 6),
    ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("ALIGN",         (0,0), (-1,-1), "CENTER"),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    # Highlight Fiber column
    ("BACKGROUND",    (3,1), (3,8), colors.HexColor("#E8F8F1")),
    # Highlight Calcium column  
    ("BACKGROUND",    (4,1), (4,8), colors.HexColor("#FFF8E7")),
]))
story.append(cmp_table)

story.append(Spacer(1, 16))

# ── Daily Combination Recommendations ─────────────────────────────────────
story.append(Paragraph("Recommended Daily Combination Packs", section_head))
story.append(Paragraph(
    "Mix and match these combinations throughout the day to hit fibre and calcium targets efficiently.",
    body_j
))
story.append(Spacer(1, 6))

for combo in daily_combos:
    name, seeds_txt, nutrition_txt, usage_txt = combo
    combo_data = [
        [Paragraph(f"<b>{name}</b>", 
                   ParagraphStyle("cn", fontName="Helvetica-Bold", fontSize=10,
                                  textColor=GREEN_DARK))],
        [Paragraph(f"Seeds: {seeds_txt}", 
                   ParagraphStyle("cs", fontName="Helvetica", fontSize=9.2,
                                  textColor=GREY_TEXT, leading=13))],
        [Paragraph(f"Nutrition: <b>{nutrition_txt}</b>", 
                   ParagraphStyle("cn2", fontName="Helvetica", fontSize=9,
                                  textColor=colors.HexColor("#1A5276"), leading=13))],
        [Paragraph(f"How to use: {usage_txt}", 
                   ParagraphStyle("cu", fontName="Helvetica-Oblique", fontSize=9,
                                  textColor=colors.HexColor("#555555"), leading=13))],
    ]
    combo_table = Table(combo_data, colWidths=[17.4*cm])
    combo_table.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (0,0), GREEN_PALE),
        ("BACKGROUND",    (0,1), (0,-1), WHITE),
        ("BOX",           (0,0), (-1,-1), 1, GREEN_MID),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 12),
        ("RIGHTPADDING",  (0,0), (-1,-1), 12),
    ]))
    story.append(KeepTogether([combo_table, Spacer(1, 8)]))

# ── Important Cautions ─────────────────────────────────────────────────────
story.append(Spacer(1, 8))
story.append(Paragraph("Important Notes & Cautions", section_head))

cautions = [
    ("<b>Portion control matters:</b> Seeds are calorie-dense. Stick to "
     "the recommended portions. Eating 5-6 tbsp of mixed seeds per day is "
     "reasonable for most men; more is not always better."),
    ("<b>Grind flax seeds:</b> Whole flax seeds pass through the gut largely "
     "undigested. Always grind before consuming to get the fibre and omega-3 benefits."),
    ("<b>Soak basil/chia seeds:</b> Always hydrate these seeds in water before "
     "eating. They absorb water in the gut, so consuming dry in large amounts "
     "without enough water can cause digestive discomfort."),
    ("<b>Allergies:</b> Sesame allergy is a recognised allergen (Top 9 in the USA). "
     "Anyone with sesame allergy should avoid sesame seeds and tahini."),
    ("<b>Kidney stones:</b> Individuals prone to oxalate kidney stones should "
     "moderate intake of high-oxalate seeds and drink plenty of water."),
    ("<b>Medication interactions:</b> Flax and chia seeds have blood-thinning "
     "properties. Consult a doctor if you are on anticoagulants (warfarin, etc.)."),
]

for c in cautions:
    story.append(Paragraph(f"\u26A0  {c}", 
        ParagraphStyle("caut", fontName="Helvetica", fontSize=9.2,
                       textColor=GREY_TEXT, leading=14, leftIndent=10,
                       spaceBefore=3, spaceAfter=4,
                       borderColor=AMBER, borderWidth=0.5,
                       borderPadding=4)))

# ── Footer Disclaimer ──────────────────────────────────────────────────────
story.append(Spacer(1, 16))
story.append(HRFlowable(width="100%", thickness=1, color=GREEN_LIGHT))
story.append(Spacer(1, 4))
story.append(Paragraph(
    "Nutritional values are approximate and sourced from USDA FoodData Central and peer-reviewed sources. "
    "Daily Value (DV) percentages are based on adult male reference intakes: Fibre 38 g/day, Calcium 1000 mg/day. "
    "This document is for general informational purposes and does not constitute medical advice. "
    "Consult a registered dietitian for personalised guidance.",
    ParagraphStyle("disc", fontName="Helvetica-Oblique", fontSize=7.5,
                   textColor=colors.HexColor("#777777"), alignment=TA_CENTER, leading=11)
))

# ── Build ──────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF generated: {OUTPUT}")
Running Command

cd /tmp/workspace/seeds-guide && python generate_seeds_pdf.py

Running Command

ls -lh /tmp/workspace/seeds-guide/Seeds_Nutrition_Guide.pdf

Your PDF is ready:

Seeds Nutrition Guide

PDF Document · PDF


Here's a summary of what the guide covers:

What's inside the PDF

8 Seeds profiled in detail - each with a colour-coded card:
SeedBest PortionFibreCalciumStar Nutrient
Sesame2 tbsp (18g)2.2 g176 mg (18% DV)Calcium + phytosterols
Poppy3 tbsp (28g)4.2 g350 mg (35% DV)Top calcium seed
Chia2 tbsp (20g)7.6 g126 mg (13% DV)Top fibre seed
Flax (ground)2 tbsp (14g)3.8 g36 mgSoluble fibre + lignans
Pumpkin2 tbsp (16g)0.6 g~7 mgZinc + magnesium
Sunflower2 tbsp (18g)1.4 g13 mgVitamin E
Hemp3 tbsp (30g)1.5 gtraceComplete plant protein
Basil (Sabja)1 tbsp (12g)6.0 g115 mg (15% DV)Fibre + satiety
The PDF also includes:
  • A quick comparison table with all seeds side by side (fibre and calcium columns highlighted)
  • 4 "Daily Combo Packs" - e.g. the Bone-Builder Combo (Poppy + Sesame) delivers a whopping 526 mg calcium (53% DV) in one sitting
  • Key benefits for each seed (bone health, gut health, heart, hormones)
  • Safety cautions - grinding flax, soaking basil/chia, allergy notes, blood-thinner interactions
Men's daily targets: 38 g fibre | 1,000 mg calcium. A smart daily seed mix of ~5-6 tbsp can cover ~25-30% of fibre and 30-50% of calcium needs from food alone.
This is a shared conversation. Sign in to Orris to start your own chat.