This is an example of health talk my topic is prevention and first aid of foreign body in eye give me a similar document and the content reffer the pdf and create another with based upon the given topic Give me some ideas how do i held that health talk what avaids should i use

Reading File
Running Command

cd /tmp/workspace/attachments/8dfa5828-f073-4126-a740-f955036e86de/ && python3 -c " import pdfplumber with pdfplumber.open('sandhra,29, pediatric health talk.pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): print(f'\\n=== PAGE {i+1} ===') text = page.extract_text() if text: print(text) "

analyse_media
Searching the Web

foreign body in eye prevention first aid management guidelines

Running Command

python3 -c " from pypdf import PdfReader import base64 reader = PdfReader('/tmp/workspace/attachments/8dfa5828-f073-4126-a740-f955036e86de/sandhra,29, pediatric health talk.pdf') print(f'Pages: {len(reader.pages)}') for i, page in enumerate(reader.pages): # Try to get images if '/XObject' in page['/Resources']: xobjects = page['/Resources']['/XObject'] for key in xobjects: obj = xobjects[key] if obj['/Subtype'] == '/Image': print(f'Page {i+1}: Image found - {obj.get(\"/Width\", \"?\")} x {obj.get(\"/Height\", \"?\")}') # Try annotations text = page.extract_text() print(f'Page {i+1} text length: {len(text) if text else 0}') "

Running Command

python3 -c " from pypdf import PdfReader from PIL import Image import io, os os.makedirs('/tmp/workspace/health_talk_pages', exist_ok=True) reader = PdfReader('/tmp/workspace/attachments/8dfa5828-f073-4126-a740-f955036e86de/sandhra,29, pediatric health talk.pdf') for i, page in enumerate(reader.pages): if '/XObject' in page['/Resources']: xobjects = page['/Resources']['/XObject'] for key in xobjects: obj = xobjects[key] if obj['/Subtype'] == '/Image': data = obj.get_data() filter_type = obj.get('/Filter', '') print(f'Page {i+1}: filter={filter_type}, data len={len(data)}') # Try to save as image try: if '/DCTDecode' in str(filter_type): img = Image.open(io.BytesIO(data)) else: mode = 'RGB' w = obj['/Width'] h = obj['/Height'] img = Image.frombytes(mode, (w, h), data) img.save(f'/tmp/workspace/health_talk_pages/page_{i+1}.png') print(f' Saved page_{i+1}.png') except Exception as e: print(f' Error: {e}') "

Loading Image
Loading Image
Running Command

python3 -c " # Use pytesseract or just try to read the images with PIL and check them from PIL import Image img = Image.open('/tmp/workspace/health_talk_pages/page_1.png') print(f'Mode: {img.mode}, Size: {img.size}') # Try to crop and describe img_small = img.resize((400, 570)) img_small.save('/tmp/workspace/health_talk_pages/page_1_small.jpg', 'JPEG', quality=85) print('Saved small version') "

analyse_media
Running Command

python3 -c " import base64, json from PIL import Image # Convert to base64 and print first part img = Image.open('/tmp/workspace/health_talk_pages/page_1_small.jpg') print(f'Image OK: {img.size} {img.mode}') # Encode to base64 with open('/tmp/workspace/health_talk_pages/page_1_small.jpg', 'rb') as f: data = base64.b64encode(f.read()).decode() print(f'Base64 length: {len(data)}') print('data:image/jpeg;base64,' + data[:100]) "

Running Command

pip install reportlab --quiet --user 2>/dev/null; python3 -c "import reportlab; print('ReportLab OK', reportlab.Version)"

Writing File

~/health_talk_eye/generate_health_talk.py

#!/usr/bin/env python3
"""Generate a Health Talk document on Prevention and First Aid of Foreign Body in Eye"""

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

os.makedirs('/tmp/workspace/health_talk_eye', exist_ok=True)

OUTPUT_PATH = '/tmp/workspace/health_talk_eye/Foreign_Body_Eye_Health_Talk.pdf'

# Color palette
DARK_BLUE   = HexColor('#1A3A5C')
MED_BLUE    = HexColor('#2E6DA4')
LIGHT_BLUE  = HexColor('#D6E8F7')
ACCENT_RED  = HexColor('#C0392B')
ACCENT_GREEN = HexColor('#1E8449')
LIGHT_GREY  = HexColor('#F2F4F6')
DARK_GREY   = HexColor('#444444')
WHITE       = white

W, H = A4

doc = SimpleDocTemplate(
    OUTPUT_PATH,
    pagesize=A4,
    rightMargin=2*cm,
    leftMargin=2*cm,
    topMargin=2*cm,
    bottomMargin=2*cm,
    title="Health Talk - Prevention and First Aid of Foreign Body in Eye"
)

styles = getSampleStyleSheet()

# Custom styles
def S(name, **kw):
    return ParagraphStyle(name, **kw)

title_style = S('MainTitle',
    fontName='Helvetica-Bold', fontSize=20,
    textColor=WHITE, alignment=TA_CENTER, leading=26,
    spaceAfter=6)

subtitle_style = S('SubTitle',
    fontName='Helvetica-Bold', fontSize=14,
    textColor=LIGHT_BLUE, alignment=TA_CENTER, leading=18,
    spaceAfter=4)

section_head = S('SecHead',
    fontName='Helvetica-Bold', fontSize=13,
    textColor=WHITE, alignment=TA_LEFT, leading=18,
    spaceBefore=8, spaceAfter=4)

body_style = S('Body',
    fontName='Helvetica', fontSize=10.5,
    textColor=DARK_GREY, alignment=TA_JUSTIFY, leading=16,
    spaceBefore=2, spaceAfter=4)

bullet_style = S('Bullet',
    fontName='Helvetica', fontSize=10.5,
    textColor=DARK_GREY, alignment=TA_LEFT, leading=15,
    leftIndent=18, spaceBefore=2, spaceAfter=2,
    bulletIndent=6)

bold_body = S('BoldBody',
    fontName='Helvetica-Bold', fontSize=10.5,
    textColor=DARK_BLUE, alignment=TA_LEFT, leading=15,
    spaceBefore=4, spaceAfter=2)

note_style = S('Note',
    fontName='Helvetica-Oblique', fontSize=9.5,
    textColor=ACCENT_RED, alignment=TA_LEFT, leading=13,
    leftIndent=10, spaceBefore=2, spaceAfter=2)

info_box_style = S('InfoBox',
    fontName='Helvetica', fontSize=10,
    textColor=DARK_GREY, alignment=TA_LEFT, leading=14,
    leftIndent=8, spaceAfter=2)

sub_head_style = S('SubHead',
    fontName='Helvetica-Bold', fontSize=11,
    textColor=MED_BLUE, alignment=TA_LEFT, leading=15,
    spaceBefore=6, spaceAfter=3)

center_style = S('Center',
    fontName='Helvetica', fontSize=10,
    textColor=DARK_GREY, alignment=TA_CENTER, leading=14)

small_center = S('SmallCenter',
    fontName='Helvetica', fontSize=9,
    textColor=DARK_GREY, alignment=TA_CENTER, leading=13)

def section_banner(text, color=DARK_BLUE):
    """Create a colored banner for section headings."""
    data = [[Paragraph(text, section_head)]]
    t = Table(data, colWidths=[W - 4*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), color),
        ('TOPPADDING', (0,0), (-1,-1), 7),
        ('BOTTOMPADDING', (0,0), (-1,-1), 7),
        ('LEFTPADDING', (0,0), (-1,-1), 12),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
        ('ROUNDEDCORNERS', [4, 4, 4, 4]),
    ]))
    return t

def info_table(rows, col_widths=None, header_row=True):
    """Create a styled table."""
    if col_widths is None:
        col_widths = [(W - 4*cm) / len(rows[0])] * len(rows[0])
    t = Table(rows, colWidths=col_widths)
    styles_list = [
        ('GRID', (0,0), (-1,-1), 0.5, HexColor('#AAAAAA')),
        ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
        ('BACKGROUND', (0,0), (-1,0), MED_BLUE if header_row else LIGHT_GREY),
        ('TEXTCOLOR', (0,0), (-1,0), WHITE if header_row else DARK_GREY),
        ('FONTSIZE', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_GREY]),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ]
    t.setStyle(TableStyle(styles_list))
    return t

def bullet(text, symbol='•'):
    return Paragraph(f'<b>{symbol}</b>  {text}', bullet_style)

def sp(n=0.3):
    return Spacer(1, n*cm)

story = []

# ─────────────────────────────────────────
# PAGE 1: TITLE PAGE
# ─────────────────────────────────────────
# Header banner
header_data = [[
    Paragraph('HEALTH TALK', title_style),
]]
header_table = Table(header_data, colWidths=[W - 4*cm])
header_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
    ('TOPPADDING', (0,0), (-1,-1), 18),
    ('BOTTOMPADDING', (0,0), (-1,-1), 12),
    ('LEFTPADDING', (0,0), (-1,-1), 10),
]))
story.append(header_table)
story.append(sp(0.4))

# Sub banner - topic
topic_data = [[
    Paragraph('Prevention and First Aid of<br/>Foreign Body in Eye', subtitle_style),
]]
topic_table = Table(topic_data, colWidths=[W - 4*cm])
topic_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), MED_BLUE),
    ('TOPPADDING', (0,0), (-1,-1), 12),
    ('BOTTOMPADDING', (0,0), (-1,-1), 12),
    ('LEFTPADDING', (0,0), (-1,-1), 10),
]))
story.append(topic_table)
story.append(sp(0.8))

# Presenter details box
detail_rows = [
    [Paragraph('<b>Presented by</b>', bold_body), Paragraph(':', body_style), Paragraph('[Name of Student/Nurse]', body_style)],
    [Paragraph('<b>Year / Semester</b>', bold_body), Paragraph(':', body_style), Paragraph('[Year & Semester]', body_style)],
    [Paragraph('<b>Roll No.</b>', bold_body), Paragraph(':', body_style), Paragraph('[Roll Number]', body_style)],
    [Paragraph('<b>Institution</b>', bold_body), Paragraph(':', body_style), Paragraph('[Name of College / Hospital]', body_style)],
    [Paragraph('<b>Venue</b>', bold_body), Paragraph(':', body_style), Paragraph('[OPD / Ward / Community Hall]', body_style)],
    [Paragraph('<b>Date</b>', bold_body), Paragraph(':', body_style), Paragraph('[Date of Presentation]', body_style)],
    [Paragraph('<b>Time</b>', bold_body), Paragraph(':', body_style), Paragraph('[HH:MM AM/PM — Duration: 30-45 minutes]', body_style)],
    [Paragraph('<b>Target Audience</b>', bold_body), Paragraph(':', body_style), Paragraph('Patients, Caregivers, School Children, Community Members', body_style)],
    [Paragraph('<b>Group Size</b>', bold_body), Paragraph(':', body_style), Paragraph('15 – 30 persons', body_style)],
]
det_table = Table(detail_rows, colWidths=[3.8*cm, 0.5*cm, (W - 4*cm - 4.3*cm)])
det_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE),
    ('GRID', (0,0), (-1,-1), 0.3, HexColor('#AACCEE')),
    ('TOPPADDING', (0,0), (-1,-1), 5),
    ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [LIGHT_BLUE, HexColor('#EAF4FC')]),
]))
story.append(det_table)
story.append(sp(0.8))

# AV Aids used
av_rows = [
    [Paragraph('AV AIDS USED', S('avh', fontName='Helvetica-Bold', fontSize=11, textColor=WHITE, alignment=TA_CENTER))],
    [Paragraph(
        'Flip chart  |  Illustrated poster  |  Physical eye model  |  Video clip  |  PowerPoint slides  |  '
        'Real objects (goggles, eye wash cup, sterile saline bottle, eye pad)',
        S('av', fontName='Helvetica', fontSize=10, textColor=DARK_GREY, alignment=TA_CENTER, leading=14)
    )],
]
av_table = Table(av_rows, colWidths=[W - 4*cm])
av_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), ACCENT_GREEN),
    ('BACKGROUND', (0,1), (-1,-1), HexColor('#EAFAF1')),
    ('GRID', (0,0), (-1,-1), 0.3, HexColor('#AAAAAA')),
    ('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(av_table)
story.append(sp(0.5))

# Guide teacher
story.append(Paragraph(
    '<b>Guide Teacher / Supervisor:</b> [Name, Designation, Department]',
    S('gt', fontName='Helvetica-Oblique', fontSize=10, textColor=DARK_GREY, alignment=TA_CENTER)
))
story.append(PageBreak())

# ─────────────────────────────────────────
# PAGE 2: INTRODUCTION
# ─────────────────────────────────────────
story.append(section_banner('1.  INTRODUCTION'))
story.append(sp(0.3))

intro_text = (
    'A <b>foreign body in the eye</b> is any object - visible or microscopic - that enters the eye from '
    'outside. This is one of the most common eye emergencies encountered in hospitals, community settings, '
    'workplaces, and among school children. Foreign bodies can range from harmless particles like dust '
    'and eyelashes to potentially dangerous objects such as metal filings, glass fragments, sand, wood '
    'splinters, or chemical droplets.'
)
story.append(Paragraph(intro_text, body_style))
story.append(sp(0.2))

story.append(Paragraph(
    'The eye is a delicate and irreplaceable organ. Even a minor foreign body can cause significant discomfort, '
    'corneal abrasion, infection, or permanent vision loss if not handled correctly. '
    'Understanding how to <b>prevent</b> foreign bodies from entering the eye and knowing the correct '
    '<b>first aid steps</b> can protect vision and save sight.',
    body_style
))
story.append(sp(0.2))

# Incidence box
inc_data = [
    [Paragraph('KEY FACTS', S('kf', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE, alignment=TA_CENTER))],
    [Paragraph(
        '• Ocular foreign bodies account for approximately <b>35–40%</b> of all eye injuries.<br/>'
        '• More than <b>2,000 workers</b> sustain eye injuries at work every day (CDC).<br/>'
        '• Most cases are preventable with simple protective measures.<br/>'
        '• Children aged 1–14 years are at high risk due to play-related activities.',
        S('kfb', fontName='Helvetica', fontSize=10, textColor=DARK_GREY, leading=15, leftIndent=8)
    )],
]
inc_table = Table(inc_data, colWidths=[W - 4*cm])
inc_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), ACCENT_RED),
    ('BACKGROUND', (0,1), (-1,-1), HexColor('#FDEEEC')),
    ('GRID', (0,0), (-1,-1), 0.3, HexColor('#CCAAAA')),
    ('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(inc_table)
story.append(sp(0.5))

# ─────────────────────────────────────────
# OBJECTIVES
# ─────────────────────────────────────────
story.append(section_banner('2.  OBJECTIVES', color=MED_BLUE))
story.append(sp(0.3))
story.append(Paragraph('<b>At the end of this health talk, the audience will be able to:</b>', sub_head_style))

objectives = [
    'Define foreign body in the eye',
    'List the common causes and types of foreign bodies in the eye',
    'Identify the signs and symptoms of a foreign body in the eye',
    'Describe the correct first aid management when a foreign body enters the eye',
    'State what <b>NOT</b> to do when a foreign body is in the eye',
    'Explain when to seek immediate medical help',
    'Demonstrate preventive measures to protect eyes from foreign bodies',
]
for obj in objectives:
    story.append(bullet(obj, '✓'))
story.append(PageBreak())

# ─────────────────────────────────────────
# PAGE 3: DEFINITION & TYPES
# ─────────────────────────────────────────
story.append(section_banner('3.  DEFINITION'))
story.append(sp(0.3))
story.append(Paragraph(
    '<b>Foreign body in the eye</b> is defined as any extraneous material or object that is accidentally '
    'introduced into or onto the eye or its adnexa (eyelids, conjunctiva, or orbit), causing irritation, '
    'injury, or potential damage to the ocular structures.',
    body_style
))
story.append(sp(0.4))

story.append(section_banner('4.  TYPES OF FOREIGN BODIES', color=MED_BLUE))
story.append(sp(0.3))

types_rows = [
    [Paragraph('TYPE', S('th', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE)),
     Paragraph('EXAMPLES', S('th', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE)),
     Paragraph('LOCATION', S('th', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE))],
    [Paragraph('Superficial / Surface', body_style),
     Paragraph('Dust, sand, pollen, eyelash, insect', body_style),
     Paragraph('Conjunctiva, corneal surface', body_style)],
    [Paragraph('Corneal Embedded', body_style),
     Paragraph('Metal filings, glass, wood splinters', body_style),
     Paragraph('Within the corneal layers', body_style)],
    [Paragraph('Sub-tarsal', body_style),
     Paragraph('Grit, particles under eyelid', body_style),
     Paragraph('Under upper or lower eyelid', body_style)],
    [Paragraph('Intra-ocular (IOFB)', body_style),
     Paragraph('High-velocity metal fragments, pellets', body_style),
     Paragraph('Inside the eyeball — EMERGENCY', body_style)],
    [Paragraph('Chemical Foreign Body', body_style),
     Paragraph('Acid, alkali, bleach, pesticide splash', body_style),
     Paragraph('Conjunctiva / cornea — EMERGENCY', body_style)],
]
story.append(info_table(types_rows, col_widths=[3.5*cm, 5.5*cm, (W - 4*cm - 9.0*cm)]))
story.append(sp(0.5))

# ─────────────────────────────────────────
# CAUSES / RISK FACTORS
# ─────────────────────────────────────────
story.append(section_banner('5.  COMMON CAUSES AND RISK FACTORS', color=DARK_BLUE))
story.append(sp(0.3))

causes_cols = [
    [
        Paragraph('<b>Occupational / Work</b>', sub_head_style),
        bullet('Grinding, welding, drilling, hammering'),
        bullet('Carpentry and woodwork'),
        bullet('Construction and masonry'),
        bullet('Mining, farming, gardening'),
        sp(0.2),
        Paragraph('<b>Domestic / Home</b>', sub_head_style),
        bullet('Cooking (hot oil splashes)'),
        bullet('Cleaning with dusty materials'),
        bullet('DIY repairs at home'),
    ],
    [
        Paragraph('<b>Outdoor / Environmental</b>', sub_head_style),
        bullet('Dust storms, sand, wind'),
        bullet('Sports and outdoor play'),
        bullet('Cycling / motorcycling without goggles'),
        bullet('Insect flying into eye'),
        sp(0.2),
        Paragraph('<b>Children</b>', sub_head_style),
        bullet('Playing in sand pits'),
        bullet('Throwing small objects'),
        bullet('Pencil / pen accidents'),
        bullet('Firecrackers during festivals'),
    ],
]
causes_table = Table([[causes_cols[0], causes_cols[1]]], colWidths=[(W - 4*cm)/2, (W - 4*cm)/2])
causes_table.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('LEFTPADDING', (0,0), (-1,-1), 4),
    ('RIGHTPADDING', (0,0), (-1,-1), 4),
    ('TOPPADDING', (0,0), (-1,-1), 4),
]))
story.append(causes_table)
story.append(PageBreak())

# ─────────────────────────────────────────
# PAGE 4: SIGNS & SYMPTOMS
# ─────────────────────────────────────────
story.append(section_banner('6.  SIGNS AND SYMPTOMS'))
story.append(sp(0.3))

symp_rows = [
    [Paragraph('SYMPTOM', S('th', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE)),
     Paragraph('DESCRIPTION', S('th', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE))],
    [Paragraph('Sudden pain / discomfort', body_style),
     Paragraph('Sharp or gritty sensation in the eye', body_style)],
    [Paragraph('Excessive tearing', body_style),
     Paragraph('Watery discharge as a protective reflex', body_style)],
    [Paragraph('Redness (conjunctival injection)', body_style),
     Paragraph('Visible redness of the white of the eye', body_style)],
    [Paragraph('Photophobia', body_style),
     Paragraph('Increased sensitivity to light', body_style)],
    [Paragraph('Blurred or decreased vision', body_style),
     Paragraph('Especially with corneal or intra-ocular involvement', body_style)],
    [Paragraph('Visible object', body_style),
     Paragraph('May be seen on the surface of the eye or under the eyelid', body_style)],
    [Paragraph('Blepharospasm', body_style),
     Paragraph('Involuntary, painful closing of the eyelid', body_style)],
    [Paragraph('Scratching sensation', body_style),
     Paragraph('Persists even after object is removed (corneal abrasion)', body_style)],
    [Paragraph('Pus / discharge', body_style),
     Paragraph('Indicates secondary infection — seek medical care immediately', body_style)],
]
story.append(info_table(symp_rows, col_widths=[4.5*cm, W - 4*cm - 4.5*cm]))
story.append(sp(0.3))

# Warning box
warn_data = [
    [Paragraph(
        '⚠  WARNING SIGNS — SEEK EMERGENCY CARE IMMEDIATELY:',
        S('wb', fontName='Helvetica-Bold', fontSize=10.5, textColor=WHITE)
    )],
    [Paragraph(
        '• Sudden loss of vision or severe blurring<br/>'
        '• Blood coming from the eye (hyphaema)<br/>'
        '• Object visibly embedded / stuck inside the eyeball<br/>'
        '• High-velocity injury (metal grinding, explosion, air-gun)<br/>'
        '• Chemical splash (acid or alkali) in the eye<br/>'
        '• Severe pain unrelieved after first aid<br/>'
        '• Irregular or misshapen pupil',
        S('wbc', fontName='Helvetica', fontSize=10, textColor=DARK_GREY, leading=15, leftIndent=8)
    )],
]
warn_table = Table(warn_data, colWidths=[W - 4*cm])
warn_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), ACCENT_RED),
    ('BACKGROUND', (0,1), (-1,-1), HexColor('#FDEEEC')),
    ('GRID', (0,0), (-1,-1), 0.5, HexColor('#CC2222')),
    ('TOPPADDING', (0,0), (-1,-1), 8),
    ('BOTTOMPADDING', (0,0), (-1,-1), 8),
    ('LEFTPADDING', (0,0), (-1,-1), 10),
]))
story.append(warn_table)
story.append(PageBreak())

# ─────────────────────────────────────────
# PAGE 5: FIRST AID
# ─────────────────────────────────────────
story.append(section_banner('7.  FIRST AID MANAGEMENT'))
story.append(sp(0.3))

story.append(Paragraph('<b>A. General First Aid Steps (Superficial / Surface Foreign Body)</b>', sub_head_style))
story.append(sp(0.1))

steps = [
    ('<b>STEP 1 — Stay Calm</b>', 'Reassure the person. Advise them not to panic or rub the eye.'),
    ('<b>STEP 2 — Wash Hands</b>', 'The first aider must wash hands thoroughly with soap and water before touching the face or eye area.'),
    ('<b>STEP 3 — Examine the Eye</b>', 'Seat the person in a well-lit area. Gently pull down the lower lid and ask the person to look up. Then hold the upper lid while they look down to locate the foreign body.'),
    ('<b>STEP 4 — Natural Blinking</b>', 'Encourage blinking several times. Natural tears may flush out loose particles.'),
    ('<b>STEP 5 — Eye Irrigation</b>', 'Flush the eye gently with clean, lukewarm water or sterile saline using a clean cup, dropper, or gentle tap water stream. Hold the eyelids open and pour water from the inner corner outward. Continue for at least 10–15 minutes for chemical splashes.'),
    ('<b>STEP 6 — Remove Contact Lenses</b>', 'If the person wears contact lenses, remove them before or during irrigation. Do not reinsert until the eye is fully healed.'),
    ('<b>STEP 7 — Cover and Refer</b>', 'If the object is not removed by irrigation, cover the eye loosely with a clean, sterile pad (do not apply pressure). Seek medical attention promptly.'),
]

step_rows = [[Paragraph(s[0], bold_body), Paragraph(s[1], body_style)] for s in steps]
step_table = Table(step_rows, colWidths=[4.5*cm, W - 4*cm - 4.5*cm])
step_table.setStyle(TableStyle([
    ('GRID', (0,0), (-1,-1), 0.3, HexColor('#AAAAAA')),
    ('BACKGROUND', (0,0), (0,-1), LIGHT_BLUE),
    ('ROWBACKGROUNDS', (1,0), (-1,-1), [WHITE, LIGHT_GREY]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 6),
    ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))
story.append(step_table)
story.append(sp(0.4))

story.append(Paragraph('<b>B. First Aid for Chemical Foreign Body (Acid / Alkali Splash)</b>', sub_head_style))
story.append(sp(0.1))
chem_steps = [
    'Immediately irrigate the eye with large amounts of clean water — do not delay.',
    'Remove contact lenses during irrigation if possible.',
    'Hold eyelids open and irrigate continuously for at least <b>15–20 minutes</b>.',
    'Do not use any neutralizing agents (vinegar, baking soda) — water only.',
    'Call emergency services / go to the nearest emergency department immediately.',
    'Note the name of the chemical if possible and inform the treating doctor.',
]
for s in chem_steps:
    story.append(bullet(s))
story.append(sp(0.3))

story.append(Paragraph('<b>C. First Aid for Penetrating / Embedded Foreign Body</b>', sub_head_style))
story.append(sp(0.1))
pen_steps = [
    '<b>Do NOT attempt to remove</b> an object that is embedded in the eyeball.',
    'Cover the eye with a rigid shield (e.g., a paper cup placed over the eye without touching it).',
    'Do NOT apply pressure or a pad that presses on the eye.',
    'Keep the person calm, in an upright or semi-recumbent position.',
    'Seek emergency medical care immediately — this is an ophthalmological emergency.',
]
for s in pen_steps:
    story.append(bullet(s))
story.append(PageBreak())

# ─────────────────────────────────────────
# PAGE 6: DO'S and DON'TS + PREVENTION
# ─────────────────────────────────────────
story.append(section_banner("8.  DO'S AND DON'TS", color=DARK_BLUE))
story.append(sp(0.3))

dos_donts = [
    [Paragraph("DO ✓", S('doth', fontName='Helvetica-Bold', fontSize=11, textColor=WHITE, alignment=TA_CENTER)),
     Paragraph("DON'T ✗", S('donth', fontName='Helvetica-Bold', fontSize=11, textColor=WHITE, alignment=TA_CENTER))],
    [Paragraph('Wash hands before touching the eye', body_style),
     Paragraph('<b>Rub</b> the eye — this pushes the object deeper and causes corneal abrasion', body_style)],
    [Paragraph('Blink naturally to allow tears to flush the eye', body_style),
     Paragraph('Try to remove a deeply embedded object', body_style)],
    [Paragraph('Irrigate with clean water or sterile saline', body_style),
     Paragraph('Use tweezers, cotton buds, fingernails, or any sharp instrument', body_style)],
    [Paragraph('Cover the eye with a clean pad if object persists', body_style),
     Paragraph('Apply any eye drops or ointment without medical advice', body_style)],
    [Paragraph('Seek medical help promptly if irrigation fails', body_style),
     Paragraph('Ignore symptoms — even minor injuries can cause infection', body_style)],
    [Paragraph('Note the type of substance (chemical, metal) for the doctor', body_style),
     Paragraph('Patch both eyes (patch only the injured eye)', body_style)],
    [Paragraph('Remove contact lenses before irrigation', body_style),
     Paragraph('Drive after patching — depth perception is altered', body_style)],
]
do_table = Table(dos_donts, colWidths=[(W - 4*cm)/2, (W - 4*cm)/2])
do_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (0,0), ACCENT_GREEN),
    ('BACKGROUND', (1,0), (1,0), ACCENT_RED),
    ('GRID', (0,0), (-1,-1), 0.4, HexColor('#AAAAAA')),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_GREY]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 6),
    ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))
story.append(do_table)
story.append(sp(0.5))

story.append(section_banner('9.  PREVENTION OF FOREIGN BODY IN THE EYE', color=ACCENT_GREEN))
story.append(sp(0.3))

prev_areas = [
    ('At the Workplace', [
        'Always wear <b>safety glasses / goggles</b> when grinding, welding, drilling, or working with chemicals.',
        'Use goggles with side shields — regular spectacles are NOT adequate protection.',
        'Follow occupational safety regulations and PPE guidelines.',
        'Keep work areas clean and dust-free wherever possible.',
    ]),
    ('At Home', [
        'Wear protective eyewear during DIY work, lawn mowing, or gardening.',
        'Store chemicals in sealed containers and handle with care.',
        'Keep sharp objects away from children.',
        'Wear goggles when swimming to avoid chlorine and microorganism exposure.',
    ]),
    ('Sports and Outdoor Activities', [
        'Use sports goggles or face shields for squash, cricket, tennis, cycling, and motorcycling.',
        'Avoid cycling in dusty conditions without protective eyewear.',
        'Wear sunglasses with UV and impact protection outdoors.',
    ]),
    ('For Children', [
        'Supervise young children during play, especially near sand, soil, or sharp objects.',
        'Educate children not to throw objects at each other.',
        'Avoid allowing children to play with firecrackers.',
        'Teach children basic eye safety from an early age.',
    ]),
]

for area, tips in prev_areas:
    story.append(Paragraph(f'<b>{area}</b>', sub_head_style))
    for tip in tips:
        story.append(bullet(tip))
    story.append(sp(0.1))
story.append(PageBreak())

# ─────────────────────────────────────────
# PAGE 7: MEDICAL TREATMENT + NURSING ROLE + SUMMARY
# ─────────────────────────────────────────
story.append(section_banner('10.  MEDICAL TREATMENT (IN HOSPITAL)'))
story.append(sp(0.3))

med_rows = [
    [Paragraph('Examination', body_style), Paragraph('Slit-lamp examination, fluorescein staining to detect corneal abrasion', body_style)],
    [Paragraph('Irrigation', body_style), Paragraph('Sterile normal saline irrigation in the eye department', body_style)],
    [Paragraph('Removal', body_style), Paragraph('Removal under magnification using cotton-tip, needle, or forceps by ophthalmologist', body_style)],
    [Paragraph('Medications', body_style), Paragraph('Antibiotic eye drops / ointment, mydriatics for pain relief, tetanus prophylaxis if needed', body_style)],
    [Paragraph('Eye Patching', body_style), Paragraph('Applied for 12–24 hours for corneal abrasions to allow healing', body_style)],
    [Paragraph('Surgery', body_style), Paragraph('Required for penetrating / intra-ocular foreign bodies (IOFB)', body_style)],
    [Paragraph('Follow-up', body_style), Paragraph('Review in 24 hours; watch for signs of infection, uveitis, or retained foreign body', body_style)],
]
story.append(info_table(
    [[Paragraph('INTERVENTION', S('th2', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE)),
      Paragraph('DETAILS', S('th2', fontName='Helvetica-Bold', fontSize=10, textColor=WHITE))]] + med_rows,
    col_widths=[3.5*cm, W - 4*cm - 3.5*cm]
))
story.append(sp(0.4))

story.append(section_banner('11.  ROLE OF THE NURSE', color=MED_BLUE))
story.append(sp(0.3))

nursing_roles = [
    '<b>Educator:</b> Teach patients about eye safety, use of PPE, and first aid for foreign body in the eye.',
    '<b>First Aider:</b> Perform prompt irrigation and assessment before medical intervention.',
    '<b>Assessor:</b> Assess visual acuity, document type of foreign body, mechanism, and time of injury.',
    '<b>Advocate:</b> Ensure prompt referral to ophthalmologist for embedded or chemical foreign bodies.',
    '<b>Preventive Care:</b> Conduct health talks, school programs, and workplace eye safety education.',
    '<b>Emotional Support:</b> Provide reassurance to anxious patients and families.',
]
for r in nursing_roles:
    story.append(bullet(r))
story.append(sp(0.4))

story.append(section_banner('12.  SUMMARY', color=DARK_BLUE))
story.append(sp(0.3))
story.append(Paragraph(
    'Foreign body in the eye is a common, preventable injury that ranges from minor surface irritation to '
    'a sight-threatening emergency. The key messages to remember are:',
    body_style
))
summary_points = [
    'Protect your eyes with appropriate PPE at all times during risk activities.',
    'Do NOT rub the eye if a foreign body enters — blink and irrigate instead.',
    'Flush with clean water or saline for surface foreign bodies.',
    'Never attempt to remove an embedded object — shield and refer.',
    'Chemical splashes require immediate, prolonged irrigation — 15–20 minutes.',
    'Seek medical help promptly if first aid does not relieve symptoms.',
    'Nurses and healthcare workers play a vital role in prevention through education.',
]
for pt in summary_points:
    story.append(bullet(pt, '★'))
story.append(sp(0.5))

story.append(section_banner('13.  REFERENCES', color=DARK_GREY))
story.append(sp(0.3))
refs = [
    'Mayo Clinic. (2024). <i>Foreign object in the eye: First aid.</i> https://www.mayoclinic.org',
    'Better Health Channel. (2023). <i>Eye injuries — foreign body in the eye.</i> Victoria, Australia.',
    'American Academy of Ophthalmology. (2023). <i>Eye trauma and foreign body management guidelines.</i>',
    'Lippincott Procedures. (2024). <i>Foreign body removal, eye (advanced practice), ambulatory care.</i>',
    'CDC National Institute for Occupational Safety and Health (NIOSH). <i>Eye Safety.</i> cdc.gov/niosh.',
    'Auerbach PS, et al. <i>Wilderness Medicine.</i> 7th ed. Philadelphia: Elsevier; 2017.',
    'Lewis SL, Bucher L, Heitkemper MM. <i>Medical-Surgical Nursing.</i> 10th ed. St. Louis: Elsevier; 2017.',
    'Park K. <i>Park\'s Textbook of Preventive and Social Medicine.</i> 25th ed. Jabalpur: Banarsidas Bhanot; 2019.',
]
for i, ref in enumerate(refs, 1):
    story.append(Paragraph(f'{i}. {ref}', S('ref', fontName='Helvetica', fontSize=9.5, textColor=DARK_GREY, leading=13, leftIndent=12, firstLineIndent=-12, spaceAfter=3)))

story.append(sp(0.5))
story.append(HRFlowable(width=W - 4*cm, thickness=1, color=MED_BLUE))
story.append(sp(0.2))
story.append(Paragraph(
    'Prepared as a Health Education Assignment | Nursing / Allied Health Program',
    small_center
))

doc.build(story)
print(f'PDF created: {OUTPUT_PATH}')
Running Command

cd /tmp/workspace/health_talk_eye && python3 generate_health_talk.py 2>&1

Running Command

ls -lh /tmp/workspace/health_talk_eye/

Your health talk document is ready. Download it here:

Foreign Body Eye Health Talk

PDF Document · PDF


What's Inside the Document (7 structured pages)

The document follows the exact format of a nursing/allied health talk assignment, with color-coded section banners, tables, and boxes - just like your sample PDF:
SectionContent
Title PageTopic, presenter details, venue, date, target audience, AV aids used, guide teacher
IntroductionOverview + Key Facts box (incidence, statistics)
Objectives7 measurable learning objectives
Definition & TypesTable of 5 types (superficial, corneal, sub-tarsal, intra-ocular, chemical)
Causes & Risk FactorsTwo-column layout: occupational, domestic, outdoor, children
Signs & SymptomsTable of 9 symptoms + Red Warning Box (emergency signs)
First Aid ManagementStep-by-step for surface FB, chemical splash, and penetrating FB
Do's and Don'tsSide-by-side table (green/red)
Prevention4 areas: workplace, home, sports, children
Medical TreatmentHospital interventions table
Nursing Role6 key roles
SummaryKey takeaway points
References8 standard references (Mayo Clinic, AAO, CDC, Park's, etc.)

Ideas for Conducting the Health Talk

How to Structure the Session (30-45 minutes)

TimeActivity
0-3 minIntroduction - greet audience, introduce yourself and topic
3-8 minIce-breaker question: "Who has ever had something in their eye?"
8-18 minTeach content using flip chart / slides
18-28 minLive demonstration of eye irrigation
28-35 minQuestion & Answer session
35-40 minPost-test / evaluation / feedback
40-45 minThank audience, distribute pamphlets

AV Aids to Use and How

1. Flip Chart / Poster
  • Hand-draw a large labelled diagram of the eye showing conjunctiva, cornea, lens
  • Separate chart for Do's vs Don'ts with bold colored headings
  • Easy to use without electricity; best for community settings
2. PowerPoint Slides / LCD Projector
  • Use for hospital OPD or classroom settings
  • Include short video clips (YouTube: "how to irrigate an eye," "corneal foreign body removal")
  • Add animations showing how objects lodge under the eyelid
3. Physical Eye Model
  • Use a 3D anatomical eye model to show where different types of foreign bodies lodge
  • Available cheaply at medical supply stores or print a paper model
4. Real Object Demonstration Tray
  • Lay out on a table: safety goggles, eye wash cup, 500 ml bottle of sterile saline, sterile eye pad, paper cup (for shielding penetrating FB), cotton applicator (as example of what NOT to use)
  • Let audience handle the items - tactile learning is very effective
5. Role Play / Demonstration
  • Ask a volunteer from the audience to sit as the "patient"
  • Demonstrate how to: pull down the lower lid to examine, perform eye irrigation with a cup, apply an eye pad
  • This is the most memorable part of the session
6. Pamphlet / Handout
  • A one-page printed handout with the Do's and Don'ts table to take home
  • Include emergency contact / nearest eye clinic number
7. Pre-test and Post-test (2-minute quiz)
  • 5 simple questions before and after: "True or False" or multiple choice
  • Shows learning outcome and satisfies academic evaluation criteria

Tips for an Engaging Talk

  • Open with a case story: "A 9-year-old was playing cricket and got a sand particle in his eye. His mother rubbed it vigorously. By the time he reached the hospital, he had a corneal scratch and early infection." - this grabs attention immediately.
  • Use simple language: Avoid medical jargon with lay audiences; say "white part of the eye" instead of "conjunctiva."
  • Ask questions frequently: "What would you do first?" keeps the audience active.
  • Involve children (if school setting): Let them wear the safety goggles and explain why they matter.
  • End with a clear call to action: "Go home and put a bottle of clean water near your work area today."
This is a shared conversation. Sign in to Orris to start your own chat.