Can you make presentation
Ya mere rog nidan ka presentation topic hai Make presentation in hindi point wise Use your own knowledge Use image and data if present I gave you design already Upto 20 slides In hindi
mkdir -p /tmp/workspace/updansh-ppt && ls /tmp/workspace/updansh-ppt/
~/updansh-ppt/create_ppt.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.util import Inches, Pt
import copy
# ── Color Palette (Pink Medical Theme) ──────────────────────────────────────
PINK_DARK = RGBColor(0xC2, 0x4B, 0x7A) # deep rose
PINK_MID = RGBColor(0xE8, 0x8A, 0xA9) # medium pink
PINK_LIGHT = RGBColor(0xF9, 0xD6, 0xE3) # pale pink background
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
BLACK = RGBColor(0x1A, 0x1A, 0x1A)
GREY = RGBColor(0x66, 0x66, 0x66)
DARK_PINK_BG= RGBColor(0xF5, 0xC5, 0xD5)
prs = Presentation()
prs.slide_width = Inches(13.33)
prs.slide_height = Inches(7.5)
blank_layout = prs.slide_layouts[6] # completely blank
# ── Helper Functions ─────────────────────────────────────────────────────────
def add_rect(slide, left, top, width, height, fill_color, line_color=None):
shape = slide.shapes.add_shape(1, Inches(left), Inches(top), Inches(width), Inches(height))
shape.fill.solid()
shape.fill.fore_color.rgb = fill_color
if line_color:
shape.line.color.rgb = line_color
shape.line.width = Pt(1.5)
else:
shape.line.fill.background()
return shape
def add_text(slide, text, left, top, width, height,
font_size=18, bold=False, color=BLACK, align=PP_ALIGN.LEFT,
font_name="Mangal"):
txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height))
tf = txBox.text_frame
tf.word_wrap = True
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.color.rgb = color
run.font.name = font_name
return txBox
def add_bullet_box(slide, title, bullets, left, top, width, height,
bg_color=PINK_LIGHT, title_color=PINK_DARK, bullet_color=BLACK):
"""Adds a rounded box with a title and bullet points."""
# background box
add_rect(slide, left, top, width, height, bg_color)
# title
add_text(slide, title, left + 0.15, top + 0.08, width - 0.3, 0.42,
font_size=15, bold=True, color=title_color, align=PP_ALIGN.LEFT)
# bullets
txBox = slide.shapes.add_textbox(Inches(left + 0.15), Inches(top + 0.55),
Inches(width - 0.3), Inches(height - 0.7))
tf = txBox.text_frame
tf.word_wrap = True
for i, b in enumerate(bullets):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = "• " + b
run.font.size = Pt(13)
run.font.color.rgb = bullet_color
run.font.name = "Mangal"
def slide_header(slide, subtitle=""):
"""Adds the top pink bar with cross symbol."""
add_rect(slide, 0, 0, 13.33, 0.55, PINK_DARK)
add_text(slide, "✛ उपदंश (ध्वजभंग) - यौन संक्रमित रोग", 0.15, 0.04, 10, 0.5,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
if subtitle:
add_text(slide, subtitle, 9.5, 0.04, 3.5, 0.5,
font_size=11, color=PINK_LIGHT, align=PP_ALIGN.RIGHT)
# bottom pink bar
add_rect(slide, 0, 7.1, 13.33, 0.4, PINK_DARK)
def slide_title_box(slide, title):
"""Pink title box under header."""
add_rect(slide, 0.4, 0.7, 12.53, 0.65, PINK_MID)
add_text(slide, title, 0.55, 0.72, 12.0, 0.6,
font_size=22, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 1 — Title Slide
# ═══════════════════════════════════════════════════════════════════════════
s1 = prs.slides.add_slide(blank_layout)
add_rect(s1, 0, 0, 13.33, 7.5, PINK_LIGHT)
add_rect(s1, 0, 0, 13.33, 0.6, PINK_DARK)
add_rect(s1, 0, 6.9, 13.33, 0.6, PINK_DARK)
# decorative circles
add_rect(s1, 9.5, 0.7, 1.5, 1.5, PINK_MID)
add_rect(s1, 10.7, 1.5, 2.0, 2.0, PINK_DARK)
add_rect(s1, 10.2, 0.5, 1.0, 1.0, DARK_PINK_BG)
add_text(s1, "✛ आयुर्वेद रोग निदान", 0.5, 0.08, 8, 0.5,
font_size=13, bold=True, color=WHITE)
add_text(s1, "अध्याय - ४४", 0.5, 1.2, 6, 0.6, font_size=16, color=PINK_DARK)
add_text(s1, "उपदंश (ध्वजभंग)", 0.5, 1.9, 9, 1.0,
font_size=44, bold=True, color=PINK_DARK)
add_text(s1, "Chancroid – Soft Chancre", 0.5, 2.9, 9, 0.6,
font_size=22, color=GREY)
add_text(s1, "यौन संक्रमित रोग (Sexually Transmitted Disease)", 0.5, 3.55, 9, 0.55,
font_size=16, color=BLACK)
add_rect(s1, 0.5, 4.3, 6, 0.08, PINK_MID)
add_text(s1, "प्रस्तुतकर्ता: _________________", 0.5, 4.5, 7, 0.45, font_size=14, color=GREY)
add_text(s1, "संस्थान: _________________", 0.5, 4.95, 7, 0.45, font_size=14, color=GREY)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 2 — विषय-सूची (Index)
# ═══════════════════════════════════════════════════════════════════════════
s2 = prs.slides.add_slide(blank_layout)
add_rect(s2, 0, 0, 13.33, 7.5, WHITE)
slide_header(s2, "विषय-सूची")
slide_title_box(s2, "📋 विषय-सूची (Contents)")
topics = [
("1. व्याधि परिचय", "2. पर्याय"),
("3. प्रमुख संदर्भ ग्रन्थ", "4. निदान (कारण)"),
("5. सम्प्राप्ति (पैथोजेनेसिस)", "6. सम्प्राप्ति घटक"),
("7. उपदंश के भेद", "8. पूर्वरूप"),
("9. सामान्य लक्षण", "10. वातज उपदंश"),
("11. पित्तज उपदंश", "12. कफज उपदंश"),
("13. सन्निपातज उपदंश", "14. रक्तज उपदंश"),
("15. आधुनिक दृष्टिकोण", "16. जाँच व परीक्षण"),
("17. साध्यासाध्यता", "18. चिकित्सा सिद्धान्त"),
("19. फिरंग व उपदंश अंतर", "20. सारांश"),
]
for i, (left_t, right_t) in enumerate(topics):
row = i // 1
y = 1.55 + i * 0.52
add_rect(s2, 0.4, y, 5.9, 0.44, PINK_LIGHT)
add_text(s2, left_t, 0.55, y + 0.04, 5.7, 0.38, font_size=13, color=PINK_DARK, bold=True)
add_rect(s2, 6.9, y, 5.9, 0.44, PINK_LIGHT)
add_text(s2, right_t, 7.05, y + 0.04, 5.7, 0.38, font_size=13, color=PINK_DARK, bold=True)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 3 — व्याधि परिचय
# ═══════════════════════════════════════════════════════════════════════════
s3 = prs.slides.add_slide(blank_layout)
add_rect(s3, 0, 0, 13.33, 7.5, WHITE)
slide_header(s3, "व्याधि परिचय")
slide_title_box(s3, "🔎 व्याधि परिचय (Introduction)")
points = [
"इस रोग को 'उपदंश' इसलिए कहते हैं क्योंकि इसका प्रभाव साँप के काटने के समान ही होता है।",
"यह रोग दंश तो नहीं होता किन्तु उसके समान अवश्य होता है।",
"आचार्य चरक ने इसे 'ध्वजभंग' नाम से वर्णित किया है।",
"स्त्री एवं पुरुषों के जननांगों पर उत्पन्न पीत रक्तस्रावयुक्त व्रण को उपदंश कहते हैं।",
"आधुनिक चिकित्सा में इसे Chancroid या Soft Chancre कहा जाता है।",
"यह एक संक्रमण जन्य (Infectious) यौन संक्रमित रोग (STD) है।",
"कारक जीवाणु: Haemophilus ducreyi",
"ऊष्मायन काल (Incubation Period): 3 से 7 दिन",
]
for i, pt in enumerate(points):
y = 1.55 + i * 0.68
add_rect(s3, 0.4, y, 12.5, 0.6, PINK_LIGHT if i % 2 == 0 else WHITE)
add_text(s3, "▸ " + pt, 0.55, y + 0.06, 12.0, 0.52, font_size=14, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 4 — पर्याय एवं संदर्भ
# ═══════════════════════════════════════════════════════════════════════════
s4 = prs.slides.add_slide(blank_layout)
add_rect(s4, 0, 0, 13.33, 7.5, WHITE)
slide_header(s4, "पर्याय व ग्रन्थ")
slide_title_box(s4, "📚 पर्याय एवं प्रमुख संदर्भ ग्रन्थ")
add_bullet_box(s4, "पर्याय (Synonyms)",
["उपदंश", "ध्वजभंग", "Soft Sore", "Soft Chancre", "Chancroid"],
0.4, 1.55, 5.8, 3.0, PINK_LIGHT, PINK_DARK)
add_bullet_box(s4, "प्रमुख संदर्भ ग्रन्थ (Classical References)",
["चरक संहिता — चिकित्सास्थान अ. ३०",
"सुश्रुत संहिता — निदानस्थान अ. १२",
"सुश्रुत संहिता — चिकित्सास्थान अ. १९",
"अष्टाङ्ग हृदय — उत्तरस्थान अ. ३३,३४",
"चक्रदत्त — अध्याय ४७",
"माधव निदान — अध्याय ४७",
"भावप्रकाश — मध्यम खण्ड अ. ५१",
"भैषज्य रत्नावली — अध्याय ५२"],
6.7, 1.55, 6.2, 5.3, DARK_PINK_BG, PINK_DARK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 5 — निदान (Etiology)
# ═══════════════════════════════════════════════════════════════════════════
s5 = prs.slides.add_slide(blank_layout)
add_rect(s5, 0, 0, 13.33, 7.5, WHITE)
slide_header(s5, "निदान")
slide_title_box(s5, "⚕️ निदान / कारण (Etiology)")
add_text(s5, "उपदंश व्याधि के प्रमुख कारण:", 0.4, 1.55, 12, 0.4,
font_size=16, bold=True, color=PINK_DARK)
causes = [
"अत्यधिक व्यवाय (मैथुन) करना या ब्रह्मचर्य की अधिकता",
"रजस्वला, दीर्घरोगी, अल्पद्वारा, महाद्वारा आदि स्त्री के साथ संसर्ग",
"लिंग प्रदेश पर अभिघात — हस्त, नख, दन्त से आघात",
"लिंग प्रदेश की यथोचित सफाई न करना",
"अपवित्र/दूषित जल से प्रक्षालन",
"शुक्र, मूत्र आदि वेगों को धारण करना (वेग धारण)",
"वेश्या गमन / असुरक्षित यौन संबंध",
"चतुष्पाद (पशु) की योनि से मैथुन",
"योनिदोष से संक्रमित व्यक्ति से संसर्ग",
"लिंग को तीव्रता से दबाना",
]
col1 = causes[:5]
col2 = causes[5:]
for i, c in enumerate(col1):
y = 2.05 + i * 0.93
add_rect(s5, 0.4, y, 6.1, 0.82, PINK_LIGHT)
add_text(s5, f"{i+1}. {c}", 0.55, y + 0.08, 5.8, 0.7, font_size=13, color=BLACK)
for i, c in enumerate(col2):
y = 2.05 + i * 0.93
add_rect(s5, 6.9, y, 6.0, 0.82, DARK_PINK_BG)
add_text(s5, f"{i+6}. {c}", 7.05, y + 0.08, 5.8, 0.7, font_size=13, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 6 — सम्प्राप्ति (Pathogenesis)
# ═══════════════════════════════════════════════════════════════════════════
s6 = prs.slides.add_slide(blank_layout)
add_rect(s6, 0, 0, 13.33, 7.5, WHITE)
slide_header(s6, "सम्प्राप्ति")
slide_title_box(s6, "🔬 सम्प्राप्ति (Pathogenesis / Disease Progression)")
steps = [
"निदान सेवन\n(कारणों का सेवन)",
"पित्त प्रधान त्रिदोष प्रकोप\n(दोषों का कुपित होना)",
"लिंग प्रदेश में स्थानसंश्रय\n(दोषों का जननांग में जमाव)",
"क्षत / शोथ की उत्पत्ति\n(घाव / सूजन)",
"उपदंश व्याधि\n(रोग की उत्पत्ति)",
]
colors = [PINK_DARK, PINK_MID, PINK_DARK, PINK_MID, PINK_DARK]
for i, (step, col) in enumerate(zip(steps, colors)):
x = 0.5 + i * 2.5
add_rect(s6, x, 1.7, 2.2, 1.4, col)
add_text(s6, step, x + 0.1, 1.85, 2.0, 1.1,
font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
if i < 4:
add_text(s6, "▶", x + 2.2, 2.15, 0.35, 0.6,
font_size=22, bold=True, color=PINK_DARK, align=PP_ALIGN.CENTER)
add_text(s6, "आधुनिक पैथोजेनेसिस:", 0.4, 3.4, 12, 0.4, font_size=16, bold=True, color=PINK_DARK)
mod_steps = [
"H. ducreyi बैक्टीरिया\nत्वचा के क्षत से प्रवेश",
"4-7 दिनों में\nPMN Leukocytes का एकत्रण",
"एडिमा (Oedema) और\nऊतकों की क्षति",
"दर्दनाक जननांग\nव्रण (Ulcer) निर्माण",
]
mod_colors = [DARK_PINK_BG, PINK_LIGHT, DARK_PINK_BG, PINK_LIGHT]
for i, (step, col) in enumerate(zip(mod_steps, mod_colors)):
x = 0.5 + i * 3.1
add_rect(s6, x, 3.9, 2.8, 1.3, col)
add_text(s6, step, x + 0.1, 4.05, 2.6, 1.1,
font_size=13, color=BLACK, align=PP_ALIGN.CENTER)
if i < 3:
add_text(s6, "→", x + 2.8, 4.2, 0.35, 0.7,
font_size=22, bold=True, color=PINK_DARK, align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 7 — सम्प्राप्ति घटक
# ═══════════════════════════════════════════════════════════════════════════
s7 = prs.slides.add_slide(blank_layout)
add_rect(s7, 0, 0, 13.33, 7.5, WHITE)
slide_header(s7, "सम्प्राप्ति घटक")
slide_title_box(s7, "⚙️ सम्प्राप्ति घटक (Pathological Components)")
ghatak = [
("दोष", "पित्त प्रधान त्रिदोष\n(वात, पित्त, कफ)"),
("दूष्य", "रस, रक्त, मांस, लसिका"),
("स्रोतस", "रक्तवह, शुक्रवह, मूत्रवह"),
("स्रोतोदुष्टि", "अतिप्रवृत्ति"),
("अधिष्ठान", "जननेन्द्रिय (लिंग प्रदेश)"),
("उद्भव स्थान", "पक्वाशय"),
("व्याधि मार्ग", "बाह्य मार्ग"),
("रोग भेद", "बाह्य व्याधि, संसर्ग जन्य"),
]
cols_per_row = 4
for i, (label, val) in enumerate(ghatak):
row = i // cols_per_row
col = i % cols_per_row
x = 0.4 + col * 3.1
y = 1.65 + row * 2.5
add_rect(s7, x, y, 2.8, 2.1, PINK_DARK)
add_text(s7, label, x + 0.1, y + 0.1, 2.6, 0.5,
font_size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(s7, x + 0.1, y + 0.65, 2.6, 1.3, WHITE)
add_text(s7, val, x + 0.15, y + 0.75, 2.5, 1.1,
font_size=13, color=PINK_DARK, align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 8 — उपदंश के भेद
# ═══════════════════════════════════════════════════════════════════════════
s8 = prs.slides.add_slide(blank_layout)
add_rect(s8, 0, 0, 13.33, 7.5, WHITE)
slide_header(s8, "भेद")
slide_title_box(s8, "📊 उपदंश के भेद (Classification)")
bhed = [
("१. वातज\nउपदंश", "वात दोष की प्रधानता\nरूक्ष, शुष्क, व्रण\nकर्कश स्पर्श, कृष्ण वर्ण"),
("२. पित्तज\nउपदंश", "पित्त दोष की प्रधानता\nसदाह, पीत स्राव\nज्वर, दाह, पीत वर्ण"),
("३. कफज\nउपदंश", "कफ दोष की प्रधानता\nस्निग्ध, श्वेत स्राव\nश्वेत वर्ण, खुजली"),
("४. सन्निपातज\nउपदंश", "तीनों दोषों की प्रधानता\nसर्वाधिक कष्टकर\nमिश्रित लक्षण"),
("५. रक्तज\nउपदंश", "रक्त दुष्टि\nरक्त वर्ण स्राव\nदाह, पाक, कृमि"),
]
bhed_colors = [PINK_LIGHT, DARK_PINK_BG, PINK_LIGHT, DARK_PINK_BG, PINK_LIGHT]
for i, ((title, desc), col) in enumerate(zip(bhed, bhed_colors)):
x = 0.4 + i * 2.5
add_rect(s8, x, 1.6, 2.25, 1.0, PINK_DARK)
add_text(s8, title, x + 0.1, 1.65, 2.05, 0.9,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(s8, x, 2.65, 2.25, 3.5, col)
add_text(s8, desc, x + 0.1, 2.75, 2.05, 3.2,
font_size=13, color=BLACK, align=PP_ALIGN.LEFT)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 9 — पूर्वरूप एवं सामान्य लक्षण
# ═══════════════════════════════════════════════════════════════════════════
s9 = prs.slides.add_slide(blank_layout)
add_rect(s9, 0, 0, 13.33, 7.5, WHITE)
slide_header(s9, "पूर्वरूप")
slide_title_box(s9, "⚠️ पूर्वरूप (Prodromal Symptoms)")
add_bullet_box(s9, "पूर्वरूप (Poorvarupa)",
["रक्तिमा — त्वचा का लाल होना",
"रुजा / वेदना — हल्का दर्द होना",
"उष्माधिक्य — प्रभावित स्थान पर गर्मी",
"स्थानीय शोथ — हल्की सूजन",
"कण्डू (खुजली) — प्रभावित भाग पर",
"(नोट: आगन्तुक व्रण के पूर्वरूपों को मान्य किया जाता है)"],
0.4, 1.55, 6.0, 5.2, PINK_LIGHT, PINK_DARK)
add_text(s9, "Modern Signs (प्रारंभिक संकेत):", 6.8, 1.55, 6, 0.4,
font_size=15, bold=True, color=PINK_DARK)
mod_signs = [
"जननांग पर छोटा लाल दाना/पिण्ड",
"3-7 दिन में pustule बनना",
"Pustule फटकर दर्दनाक व्रण",
"Ulcer के किनारे कटे-फटे",
"Yellowish exudate का स्राव",
"दर्द और जलन",
]
for i, s in enumerate(mod_signs):
y = 2.05 + i * 0.78
add_rect(s9, 6.8, y, 6.0, 0.65, DARK_PINK_BG if i % 2 == 0 else WHITE)
add_text(s9, f"▸ {s}", 7.0, y + 0.1, 5.6, 0.5, font_size=13, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 10 — सामान्य लक्षण
# ═══════════════════════════════════════════════════════════════════════════
s10 = prs.slides.add_slide(blank_layout)
add_rect(s10, 0, 0, 13.33, 7.5, WHITE)
slide_header(s10, "सामान्य लक्षण")
slide_title_box(s10, "🩺 सामान्य लक्षण (General Clinical Features)")
lakshan = [
("वेदनायुक्त शोथ", "लिंग/जननांग प्रदेश में दर्दनाक सूजन"),
("पिड़काएँ", "मेढ्र पर लाल रंग की छोटी-छोटी फुंसियाँ"),
("पाक व व्रण", "जननांग का पक जाना और घाव बनना"),
("स्राव", "व्रण से रक्तमिश्रित पीला स्राव (Discharge)"),
("ज्वर आदि उपद्रव", "बुखार, प्यास, चक्कर, उल्टी, जलन"),
("दाह व वेदना", "पेडू, अण्डकोष व जांघों में जलन"),
("मांस सड़ना", "लिंग का मांस सड़ने लगना"),
("कृमि व दुर्गंध", "व्रण में कीड़े पड़ना, अत्यधिक दुर्गंध"),
("लिंग नाश", "गंभीर अवस्था में लिंग का गलकर गिरना"),
("लसिका ग्रन्थि", "Inguinal Lymphadenopathy — 50% रोगियों में"),
]
for i, (lab, desc) in enumerate(lakshan):
row = i // 2
col = i % 2
x = 0.4 + col * 6.4
y = 1.6 + row * 1.0
add_rect(s10, x, y, 2.0, 0.85, PINK_DARK)
add_text(s10, lab, x + 0.08, y + 0.1, 1.85, 0.68, font_size=12, bold=True, color=WHITE)
add_rect(s10, x + 2.05, y, 4.2, 0.85, PINK_LIGHT)
add_text(s10, desc, x + 2.15, y + 0.1, 4.0, 0.7, font_size=12, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 11 — वातज उपदंश लक्षण
# ═══════════════════════════════════════════════════════════════════════════
s11 = prs.slides.add_slide(blank_layout)
add_rect(s11, 0, 0, 13.33, 7.5, WHITE)
slide_header(s11, "वातज उपदंश")
slide_title_box(s11, "💨 वातज उपदंश — विशेष लक्षण")
add_rect(s11, 0.4, 1.6, 12.5, 0.5, PINK_MID)
add_text(s11, "दोष: वात प्रधान | वर्ण: कृष्ण/अरुण | स्राव: फेनिल", 0.55, 1.65, 12.0, 0.38,
font_size=15, bold=True, color=WHITE)
vataj = [
"व्रण का वर्ण कृष्ण (काला) होता है",
"व्रण में तीव्र वेदना (दर्द) होती है — चुभन, फाड़ने जैसा दर्द",
"स्राव फेनिल (झागदार) होता है",
"व्रण रूक्ष और शुष्क प्रकृति का होता है",
"कर्कश (खुरदरा) स्पर्श होता है",
"ग्लान्स (Glans) में दरारें व कड़ापन आ जाता है",
"शोथ (सूजन) श्यावारुण वर्ण का",
"स्पंदन (Pulsation) वेदना — धड़कन जैसी पीड़ा",
"कण्डू (खुजली) — रात्रि काल में अधिक",
"रोगी अत्यंत दुर्बल हो जाता है",
]
for i, pt in enumerate(vataj):
row = i // 2
col = i % 2
x = 0.4 + col * 6.4
y = 2.3 + row * 0.92
add_rect(s11, x, y, 6.1, 0.82, PINK_LIGHT if i % 2 == 0 else DARK_PINK_BG)
add_text(s11, f"▸ {pt}", x + 0.15, y + 0.1, 5.8, 0.68, font_size=13, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 12 — पित्तज उपदंश
# ═══════════════════════════════════════════════════════════════════════════
s12 = prs.slides.add_slide(blank_layout)
add_rect(s12, 0, 0, 13.33, 7.5, WHITE)
slide_header(s12, "पित्तज उपदंश")
slide_title_box(s12, "🔥 पित्तज उपदंश — विशेष लक्षण")
add_rect(s12, 0.4, 1.6, 12.5, 0.5, PINK_MID)
add_text(s12, "दोष: पित्त प्रधान | वर्ण: पीत/रक्त | स्राव: पीत रक्त युक्त", 0.55, 1.65, 12.0, 0.38,
font_size=15, bold=True, color=WHITE)
pittaj = [
"व्रण का वर्ण पीत (पीला) या रक्त (लाल) होता है",
"अत्यधिक दाह (जलन) — मुख्य लक्षण",
"पीत रक्तयुक्त स्राव (Yellow blood-stained discharge)",
"ज्वर (Fever) — प्रमुख उपद्रव",
"तृष्णा (अत्यधिक प्यास) लगना",
"शीघ्र पाक — व्रण जल्दी पकता है",
"लिंग आम फल जैसा — कोमल और सूजा हुआ (Udambara फल तुलना)",
"Pustules शीघ्र suppuration के साथ बनती हैं",
"छर्दि (उल्टी) और मूर्च्छा",
"भ्रम (चक्कर आना)",
]
for i, pt in enumerate(pittaj):
row = i // 2
col = i % 2
x = 0.4 + col * 6.4
y = 2.3 + row * 0.92
add_rect(s12, x, y, 6.1, 0.82, PINK_LIGHT if i % 2 == 0 else DARK_PINK_BG)
add_text(s12, f"▸ {pt}", x + 0.15, y + 0.1, 5.8, 0.68, font_size=13, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 13 — कफज व सन्निपातज उपदंश
# ═══════════════════════════════════════════════════════════════════════════
s13 = prs.slides.add_slide(blank_layout)
add_rect(s13, 0, 0, 13.33, 7.5, WHITE)
slide_header(s13, "कफज व सन्निपातज")
slide_title_box(s13, "💧 कफज व सन्निपातज उपदंश")
add_bullet_box(s13, "कफज उपदंश",
["व्रण का वर्ण श्वेत (सफेद)",
"स्राव श्वेत, स्निग्ध (चिकना)",
"कण्डू (खुजली) प्रमुख लक्षण",
"व्रण का स्पर्श ठंडा और मृदु",
"शोथ स्थिर और दृढ़",
"मन्द वेदना (हल्का दर्द)",
"Papules श्वेत और काले पड़ जाते हैं",
"Stiffness और दरारें (Fissures)"],
0.4, 1.55, 6.0, 5.3, PINK_LIGHT, PINK_DARK)
add_bullet_box(s13, "सन्निपातज उपदंश",
["तीनों दोषों के मिश्रित लक्षण",
"सर्वाधिक कष्टकर और असाध्य प्रकार",
"व्रण में सर्व प्रकार के स्रावों का मिश्रण",
"तीव्र वेदना, दाह और खुजली एक साथ",
"शीघ्र व्रण का फैलाव",
"मांस का क्षय तेजी से होता है",
"कृमि (कीड़े) और दुर्गंध",
"साध्यता: कठिन / असाध्य"],
6.7, 1.55, 6.2, 5.3, DARK_PINK_BG, PINK_DARK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 14 — रक्तज उपदंश
# ═══════════════════════════════════════════════════════════════════════════
s14 = prs.slides.add_slide(blank_layout)
add_rect(s14, 0, 0, 13.33, 7.5, WHITE)
slide_header(s14, "रक्तज उपदंश")
slide_title_box(s14, "🩸 रक्तज उपदंश — विशेष लक्षण")
raktaj = [
"रक्त दुष्टि मुख्य कारण — रक्त वहन स्रोतस में विकृति",
"व्रण का वर्ण रक्त (लाल/गहरा लाल)",
"अत्यधिक रक्त स्राव — व्रण से खून बहना",
"दाह (जलन) और तीव्र वेदना",
"व्रण शीघ्र पकता और फटता है",
"कृमि (कीड़े) व्रण में उत्पन्न होना",
"अत्यधिक दुर्गंध (Foul smell)",
"ज्वर, दाह, मूर्च्छा उपद्रव",
"मांस का शीघ्र विनाश — गंभीर जटिलता",
"Inguinal Lymph Nodes में वृद्धि (Bubo)",
]
for i, pt in enumerate(raktaj):
y = 1.6 + i * 0.56
add_rect(s14, 0.4, y, 12.5, 0.5, PINK_LIGHT if i % 2 == 0 else DARK_PINK_BG)
add_text(s14, f"{'▸':>2} {pt}", 0.55, y + 0.06, 12.1, 0.42, font_size=13, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 15 — आधुनिक दृष्टिकोण
# ═══════════════════════════════════════════════════════════════════════════
s15 = prs.slides.add_slide(blank_layout)
add_rect(s15, 0, 0, 13.33, 7.5, WHITE)
slide_header(s15, "आधुनिक दृष्टिकोण")
slide_title_box(s15, "🔬 आधुनिक दृष्टिकोण (Modern Medical View)")
add_bullet_box(s15, "कारण (Etiology)",
["कारक जीवाणु: Haemophilus ducreyi",
"ऊष्मायन काल: 3-7 दिन",
"संक्रमण: यौन संपर्क द्वारा",
"त्वचा क्षत से जीवाणु प्रवेश"],
0.4, 1.55, 6.0, 3.0, PINK_LIGHT, PINK_DARK)
add_bullet_box(s15, "लक्षण (Signs & Symptoms)",
["जननांग पर दर्दनाक व्रण (Painful ulcer)",
"पुरुष: Prepuce, Frenulum, Coronal sulcus",
"स्त्री: Labia, Vestibule, Clitoris, Fourchette",
"Ulcer हमेशा दर्दनाक होते हैं (Syphilis से अंतर)",
"50% रोगियों में एकपक्षीय Inguinal Bubo"],
6.7, 1.55, 6.2, 3.0, DARK_PINK_BG, PINK_DARK)
add_bullet_box(s15, "जाँच (Investigations)",
["Culture: H. ducreyi की पहचान",
"Gram Stain: School of fish pattern",
"PCR Test — अधिक विश्वसनीय",
"VDRL / RPR — Syphilis से विभेद हेतु"],
0.4, 4.75, 6.0, 2.1, PINK_LIGHT, PINK_DARK)
add_bullet_box(s15, "उपचार (Modern Treatment)",
["Azithromycin 1g — एकल खुराक",
"Ceftriaxone 250mg IM — एकल खुराक",
"Ciprofloxacin 500mg — 3 दिन",
"Erythromycin 500mg — 7 दिन"],
6.7, 4.75, 6.2, 2.1, DARK_PINK_BG, PINK_DARK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 16 — जाँच व परीक्षण
# ═══════════════════════════════════════════════════════════════════════════
s16 = prs.slides.add_slide(blank_layout)
add_rect(s16, 0, 0, 13.33, 7.5, WHITE)
slide_header(s16, "जाँच व परीक्षण")
slide_title_box(s16, "🧪 जाँच व परीक्षण (Diagnosis & Investigations)")
add_text(s16, "विभेदक निदान (Differential Diagnosis):", 0.4, 1.6, 12, 0.4,
font_size=16, bold=True, color=PINK_DARK)
diff_diag = [
("उपदंश\n(Chancroid)", "दर्दनाक व्रण\nनरम किनारे\nHaemophilus ducreyi"),
("सिफिलिस\n(Syphilis)", "दर्दरहित व्रण\nसख्त किनारे\nTreponema pallidum"),
("हर्पीस\n(Herpes)", "छाले → व्रण\nATigrouped lesions\nHSV-2"),
("LGV\n(Lymphogranuloma)", "छोटा painless ulcer\nBubo अधिक\nChlamydia"),
]
for i, (dis, desc) in enumerate(diff_diag):
x = 0.4 + i * 3.1
add_rect(s16, x, 2.15, 2.8, 1.0, PINK_DARK)
add_text(s16, dis, x + 0.1, 2.2, 2.6, 0.9,
font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(s16, x, 3.2, 2.8, 2.0, PINK_LIGHT)
add_text(s16, desc, x + 0.1, 3.3, 2.6, 1.8,
font_size=12, color=BLACK, align=PP_ALIGN.LEFT)
add_text(s16, "नैदानिक परीक्षण (Clinical Tests):", 0.4, 5.4, 12, 0.4,
font_size=16, bold=True, color=PINK_DARK)
tests = [
"Swab Culture (H. ducreyi)", "PCR Assay (Most accurate)",
"Gram Stain (Fish pattern)", "Serological tests (VDRL, RPR — to exclude Syphilis)",
]
for i, t in enumerate(tests):
x = 0.4 + (i % 2) * 6.4
y = 5.9 + (i // 2) * 0.6
add_rect(s16, x, y, 6.0, 0.52, DARK_PINK_BG)
add_text(s16, f"✓ {t}", x + 0.15, y + 0.06, 5.7, 0.42, font_size=13, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 17 — साध्यासाध्यता
# ═══════════════════════════════════════════════════════════════════════════
s17 = prs.slides.add_slide(blank_layout)
add_rect(s17, 0, 0, 13.33, 7.5, WHITE)
slide_header(s17, "साध्यासाध्यता")
slide_title_box(s17, "⚖️ साध्यासाध्यता (Prognosis)")
add_bullet_box(s17, "सुसाध्य (Easily Curable)",
["वातज उपदंश — उचित चिकित्सा से ठीक",
"पित्तज उपदंश — सुसाध्य",
"एकल दोष जनित उपदंश",
"प्रारंभिक अवस्था में निदान",
"बलवान रोगी, उचित आहार"],
0.4, 1.55, 4.0, 5.2, PINK_LIGHT, PINK_DARK)
add_bullet_box(s17, "कृच्छ्र साध्य (Difficult to Cure)",
["कफज उपदंश — चिकित्सा कठिन",
"रक्तज उपदंश",
"द्विदोषज उपदंश",
"व्रण पुराना होने पर",
"Lymphadenopathy के साथ"],
4.6, 1.55, 4.0, 5.2, DARK_PINK_BG, PINK_DARK)
add_bullet_box(s17, "असाध्य (Incurable)",
["सन्निपातज उपदंश",
"लिंग नाश (Penile destruction)",
"अत्यधिक कृमि व दुर्गंध",
"दुर्बल रोगी, जीर्ण अवस्था",
"Complication — HIV के साथ"],
8.8, 1.55, 4.1, 5.2, PINK_LIGHT, PINK_DARK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 18 — चिकित्सा सिद्धान्त (Treatment Principles)
# ═══════════════════════════════════════════════════════════════════════════
s18 = prs.slides.add_slide(blank_layout)
add_rect(s18, 0, 0, 13.33, 7.5, WHITE)
slide_header(s18, "चिकित्सा सिद्धान्त")
slide_title_box(s18, "💊 चिकित्सा सिद्धान्त (Treatment Principles)")
add_bullet_box(s18, "सामान्य चिकित्सा सूत्र",
["शोधन चिकित्सा — पंचकर्म: विरेचन, वमन",
"शमन चिकित्सा — दोषानुसार औषधि",
"स्थानिक चिकित्सा — व्रण पर लेप, धावन",
"रक्त शोधन — रक्तमोक्षण",
"पथ्य पालन — उचित आहार-विहार"],
0.4, 1.55, 6.0, 4.0, PINK_LIGHT, PINK_DARK)
add_bullet_box(s18, "आयुर्वेदिक औषधियाँ",
["गन्धक रसायन — रक्त शोधक",
"महामंजिष्ठादि क्वाथ",
"निम्ब क्वाथ — धावन हेतु",
"जात्यादि तैल — व्रण लेप",
"त्रिफला क्वाथ — आन्तरिक",
"कामदुधा रस — पित्तज में"],
6.7, 1.55, 6.2, 4.0, DARK_PINK_BG, PINK_DARK)
add_rect(s18, 0.4, 5.8, 12.5, 1.0, PINK_MID)
add_text(s18, "पथ्य: हल्का सुपाच्य आहार, तरल पदार्थ, दुग्ध, मधु | अपथ्य: तीखा, खट्टा, भारी, मैथुन निषेध",
0.55, 5.9, 12.0, 0.8, font_size=13, color=WHITE, align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 19 — उपदंश vs फिरंग (Syphilis) अंतर
# ═══════════════════════════════════════════════════════════════════════════
s19 = prs.slides.add_slide(blank_layout)
add_rect(s19, 0, 0, 13.33, 7.5, WHITE)
slide_header(s19, "उपदंश vs फिरंग")
slide_title_box(s19, "⚖️ उपदंश बनाम फिरंग (Chancroid vs Syphilis)")
headers = ["विषय", "उपदंश (Chancroid)", "फिरंग (Syphilis)"]
col_x = [0.4, 3.3, 8.2]
col_w = [2.8, 4.8, 4.8]
for i, (h, x, w) in enumerate(zip(headers, col_x, col_w)):
add_rect(s19, x, 1.55, w, 0.52, PINK_DARK)
add_text(s19, h, x + 0.1, 1.6, w - 0.2, 0.42,
font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
rows = [
("कारक जीवाणु", "Haemophilus ducreyi", "Treponema pallidum"),
("व्रण का दर्द", "अत्यधिक दर्दनाक (Painful)", "दर्दरहित (Painless)"),
("व्रण के किनारे", "नरम, अनियमित (Soft)", "कठोर, नियमित (Hard chancre)"),
("व्रण का तल", "अशुद्ध, पीत स्राव", "स्वच्छ, लाल"),
("Lymph nodes", "दर्दनाक Bubo (50%)", "Painless adenopathy"),
("वर्गीकरण", "5 भेद (दोष आधारित)", "3 भेद (भावमिश्र)"),
("साध्यता", "अपेक्षाकृत साध्य", "कठिन, दीर्घकालीन"),
("उपचार", "Short-course Antibiotics", "Penicillin G (Long-term)"),
]
row_colors = [PINK_LIGHT, DARK_PINK_BG]
for r_i, (subj, val1, val2) in enumerate(rows):
y = 2.2 + r_i * 0.6
rc = row_colors[r_i % 2]
add_rect(s19, 0.4, y, 2.8, 0.54, PINK_MID)
add_text(s19, subj, 0.5, y + 0.06, 2.6, 0.44, font_size=12, bold=True, color=WHITE)
add_rect(s19, 3.3, y, 4.8, 0.54, rc)
add_text(s19, val1, 3.4, y + 0.06, 4.6, 0.44, font_size=12, color=BLACK)
add_rect(s19, 8.2, y, 4.8, 0.54, rc)
add_text(s19, val2, 8.3, y + 0.06, 4.6, 0.44, font_size=12, color=BLACK)
# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 20 — सारांश / Thank You
# ═══════════════════════════════════════════════════════════════════════════
s20 = prs.slides.add_slide(blank_layout)
add_rect(s20, 0, 0, 13.33, 7.5, PINK_LIGHT)
add_rect(s20, 0, 0, 13.33, 0.6, PINK_DARK)
add_rect(s20, 0, 6.9, 13.33, 0.6, PINK_DARK)
add_text(s20, "✛ उपदंश — रोग निदान प्रस्तुति", 0.4, 0.08, 10, 0.5,
font_size=14, bold=True, color=WHITE)
add_text(s20, "सारांश (Summary)", 0.5, 0.8, 12, 0.65,
font_size=30, bold=True, color=PINK_DARK, align=PP_ALIGN.CENTER)
summary = [
("उपदंश क्या है?", "जननांग पर दर्दनाक व्रण, Haemophilus ducreyi से यौन संक्रमण"),
("आयुर्वेदिक नाम", "ध्वजभंग (चरक) — 5 भेद: वातज, पित्तज, कफज, सन्निपातज, रक्तज"),
("मुख्य लक्षण", "दर्दनाक व्रण, पीत स्राव, ज्वर, Inguinal Bubo"),
("निदान", "Haemophilus ducreyi — यौन संसर्ग से; आयुर्वेद — दोष प्रकोप से"),
("उपचार", "Azithromycin/Ceftriaxone; आयुर्वेद — गन्धक रसायन, जात्यादि तैल"),
("रोकथाम", "सुरक्षित यौन संबंध, स्वच्छता, नियमित जाँच"),
]
for i, (label, desc) in enumerate(summary):
row = i // 2
col = i % 2
x = 0.4 + col * 6.4
y = 1.7 + row * 1.5
add_rect(s20, x, y, 6.1, 0.48, PINK_DARK)
add_text(s20, label, x + 0.1, y + 0.05, 5.9, 0.38, font_size=13, bold=True, color=WHITE)
add_rect(s20, x, y + 0.5, 6.1, 0.9, WHITE)
add_text(s20, desc, x + 0.1, y + 0.55, 5.9, 0.82, font_size=12, color=BLACK)
add_rect(s20, 3.5, 6.35, 6.3, 0.4, PINK_MID)
add_text(s20, "धन्यवाद! | Thank You!", 3.6, 6.38, 6.0, 0.38,
font_size=16, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
# ── Save ────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/updansh-ppt/Updansh_Rog_Nidan.pptx"
prs.save(out)
print(f"Saved: {out}")
print(f"Total slides: {len(prs.slides)}")
cd /tmp/workspace/updansh-ppt && python create_ppt.py
Updansh Rog Nidan
Presentation · PPTX
| स्लाइड | विषय |
|---|---|
| 1 | Title Slide — उपदंश (ध्वजभंग) |
| 2 | विषय-सूची (Contents) |
| 3 | व्याधि परिचय (Introduction) |
| 4 | पर्याय एवं प्रमुख संदर्भ ग्रन्थ |
| 5 | निदान / कारण (Etiology) — 10 कारण |
| 6 | सम्प्राप्ति — आयुर्वेदिक + आधुनिक Pathogenesis |
| 7 | सम्प्राप्ति घटक (8 कार्ड) |
| 8 | उपदंश के 5 भेद |
| 9 | पूर्वरूप + Modern Early Signs |
| 10 | सामान्य लक्षण (10 लक्षण) |
| 11 | वातज उपदंश लक्षण |
| 12 | पित्तज उपदंश लक्षण |
| 13 | कफज व सन्निपातज उपदंश |
| 14 | रक्तज उपदंश |
| 15 | आधुनिक दृष्टिकोण + आधुनिक उपचार |
| 16 | जाँच व विभेदक निदान |
| 17 | साध्यासाध्यता (Prognosis) |
| 18 | चिकित्सा सिद्धान्त + पथ्य-अपथ्य |
| 19 | उपदंश vs फिरंग (Syphilis) तुलना तालिका |
| 20 | सारांश + धन्यवाद |
Create a Hindi PDF quick reference card on Chancroid diagnosis
python3 -c "from reportlab.pdfgen import canvas; from reportlab.lib.pagesizes import A4; print('ReportLab OK'); from reportlab.platypus import SimpleDocTemplate; print('platypus OK'); from reportlab.lib import colors; print('colors OK')"
python3 -c " import subprocess, sys # Check available Hindi fonts result = subprocess.run(['fc-list', ':lang=hi'], capture_output=True, text=True) print(result.stdout[:2000] if result.stdout else 'No fc-list output') print(result.stderr[:500] if result.stderr else '') "
python3 -c " from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont pdfmetrics.registerFont(TTFont('Devanagari', '/usr/share/fonts/google-droid-sans-fonts/DroidSansDevanagari-Regular.ttf')) print('Font registered OK') # Quick test from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 c = canvas.Canvas('/tmp/test_hindi.pdf', pagesize=A4) c.setFont('Devanagari', 14) c.drawString(100, 700, 'उपदंश परीक्षण') c.save() print('Test PDF created OK') "
~/updansh-ppt/create_pdf_card.py
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
# ── Register Hindi font ───────────────────────────────────────────────────
pdfmetrics.registerFont(TTFont('Hindi', '/usr/share/fonts/google-droid-sans-fonts/DroidSansDevanagari-Regular.ttf'))
# ── Canvas setup (A4) ─────────────────────────────────────────────────────
W, H = A4 # 595 x 842 pt
out = "/tmp/workspace/updansh-ppt/Updansh_Quick_Reference.pdf"
c = canvas.Canvas(out, pagesize=A4)
# ── Color palette ─────────────────────────────────────────────────────────
PINK_DARK = colors.HexColor("#C24B7A")
PINK_MID = colors.HexColor("#E88AA9")
PINK_LIGHT = colors.HexColor("#F9D6E3")
PINK_BG = colors.HexColor("#FDF0F5")
WHITE = colors.white
BLACK = colors.HexColor("#1A1A1A")
GREY = colors.HexColor("#555555")
ROSE = colors.HexColor("#F5C5D5")
# ── Helper functions ──────────────────────────────────────────────────────
def filled_rect(x, y, w, h, fill, stroke=None, radius=4):
c.saveState()
c.setFillColor(fill)
if stroke:
c.setStrokeColor(stroke)
c.setLineWidth(0.8)
c.roundRect(x, y, w, h, radius, fill=1, stroke=1)
else:
c.setStrokeColor(fill)
c.roundRect(x, y, w, h, radius, fill=1, stroke=0)
c.restoreState()
def txt(text, x, y, size=10, bold=False, color=BLACK, align='left', max_w=None):
c.saveState()
c.setFont('Hindi', size)
c.setFillColor(color)
if align == 'center' and max_w:
tw = c.stringWidth(text, 'Hindi', size)
x = x + (max_w - tw) / 2
elif align == 'right' and max_w:
tw = c.stringWidth(text, 'Hindi', size)
x = x + max_w - tw
c.drawString(x, y, text)
c.restoreState()
def section_header(x, y, w, h, title, subtitle=""):
filled_rect(x, y, w, h, PINK_DARK)
txt(title, x + 8, y + h - 14, size=11, color=WHITE)
if subtitle:
txt(subtitle, x + 8, y + 4, size=8, color=PINK_LIGHT)
def bullet_block(x, y, w, items, size=9, bg=PINK_LIGHT, dot_color=PINK_DARK):
"""Draw a list of bullet items inside a light box."""
item_h = size + 5
total_h = len(items) * item_h + 6
filled_rect(x, y - total_h + 6, w, total_h, bg)
for i, item in enumerate(items):
iy = y - i * item_h - 4
# bullet dot
c.saveState()
c.setFillColor(dot_color)
c.circle(x + 9, iy + size * 0.35, 2.5, fill=1, stroke=0)
c.restoreState()
txt(item, x + 17, iy, size=size, color=BLACK)
return total_h
def two_col_row(x, y, w, label, value, label_w=90, bg1=PINK_MID, bg2=PINK_LIGHT):
row_h = 16
filled_rect(x, y, label_w, row_h, bg1)
txt(label, x + 5, y + 4, size=8, color=WHITE)
filled_rect(x + label_w, y, w - label_w, row_h, bg2)
txt(value, x + label_w + 6, y + 4, size=8, color=BLACK)
return row_h
def divider(x, y, w):
c.saveState()
c.setStrokeColor(PINK_MID)
c.setLineWidth(0.6)
c.line(x, y, x + w, y)
c.restoreState()
# ═══════════════════════════════════════════════════════════════════════════
# PAGE 1 — Quick Reference Card (Front)
# ═══════════════════════════════════════════════════════════════════════════
# ── Full page background
filled_rect(0, 0, W, H, PINK_BG, radius=0)
# ── Top header bar ───────────────────────────────────────────────────────
filled_rect(0, H - 55, W, 55, PINK_DARK, radius=0)
txt("✛ उपदंश (ध्वजभंग) — त्वरित संदर्भ पत्रक", 16, H - 25, size=16, color=WHITE)
txt("Chancroid / Soft Chancre | Quick Reference Card", 16, H - 43, size=9, color=PINK_LIGHT)
txt("रोग निदान | Ayurveda + Modern", W - 160, H - 34, size=9, color=PINK_LIGHT)
# ── Thin accent line below header
filled_rect(0, H - 59, W, 4, PINK_MID, radius=0)
cur_y = H - 70
# ═════════════════════════════════════════════════ ROW 1: 3 columns
col1_x = 14
col2_x = 204
col3_x = 394
col_w = 183
row_h_big = 168
# ── BOX 1: परिचय
filled_rect(col1_x, cur_y - row_h_big, col_w, row_h_big, WHITE, PINK_MID, radius=6)
section_header(col1_x, cur_y - 24, col_w, 24, "व्याधि परिचय", "Introduction")
intro_items = [
"साँप के काटने सदृश दर्दनाक रोग",
"जननांगों पर पीत-रक्त स्राव युक्त व्रण",
"आचार्य चरक — ध्वजभंग",
"आधुनिक: Chancroid (Soft Chancre)",
"कारक: Haemophilus ducreyi",
"ऊष्मायन: 3-7 दिन",
"वर्गीकरण: 5 भेद (वात/पित्त/कफ/सन्नि/रक्त)",
]
bullet_block(col1_x + 2, cur_y - 28, col_w - 4, intro_items, size=8.5, bg=WHITE)
# ── BOX 2: निदान (Etiology)
filled_rect(col2_x, cur_y - row_h_big, col_w, row_h_big, WHITE, PINK_MID, radius=6)
section_header(col2_x, cur_y - 24, col_w, 24, "निदान / कारण", "Etiology")
nidan_items = [
"अत्यधिक व अनुचित मैथुन",
"रजस्वला/रोगग्रस्त स्त्री से संसर्ग",
"लिंग पर अभिघात (चोट)",
"शुचिता का अभाव",
"शुक्र-मूत्र वेग धारण",
"दूषित जल से प्रक्षालन",
"वेश्या गमन / असुरक्षित यौन",
]
bullet_block(col2_x + 2, cur_y - 28, col_w - 4, nidan_items, size=8.5, bg=WHITE)
# ── BOX 3: सम्प्राप्ति
filled_rect(col3_x, cur_y - row_h_big, col_w, row_h_big, WHITE, PINK_MID, radius=6)
section_header(col3_x, cur_y - 24, col_w, 24, "सम्प्राप्ति", "Pathogenesis")
samp_items = [
"निदान सेवन",
"पित्त प्रधान त्रिदोष प्रकोप",
"दोषों का लिंग प्रदेश में जमाव",
"क्षत / शोथ की उत्पत्ति",
"उपदंश व्याधि",
"दोष: पित्त प्रधान त्रिदोष",
"दूष्य: रस, रक्त, मांस, लसिका",
]
bullet_block(col3_x + 2, cur_y - 28, col_w - 4, samp_items, size=8.5, bg=WHITE)
cur_y -= row_h_big + 10
# ═════════════════════════════════════════════════ ROW 2: सम्प्राप्ति चक्र
filled_rect(14, cur_y - 30, W - 28, 30, ROSE, radius=6)
txt("सम्प्राप्ति चक्र:", 20, cur_y - 19, size=9, color=PINK_DARK)
flow_steps = ["निदान सेवन", "→", "दोष प्रकोप", "→", "स्थानसंश्रय", "→", "क्षत/शोथ", "→", "उपदंश"]
fx = 105
for step in flow_steps:
clr = PINK_DARK if step != "→" else PINK_MID
bg = PINK_MID if step != "→" else ROSE
if step != "→":
filled_rect(fx - 2, cur_y - 25, 72, 20, PINK_DARK, radius=4)
txt(step, fx, cur_y - 17, size=8, color=WHITE)
fx += 74
else:
txt(step, fx, cur_y - 16, size=11, color=PINK_MID)
fx += 16
cur_y -= 38
# ═════════════════════════════════════════════════ ROW 3: Lakshan + Bhed
filled_rect(14, cur_y - 195, 270, 195, WHITE, PINK_MID, radius=6)
section_header(14, cur_y - 22, 270, 22, "सामान्य लक्षण", "Clinical Features")
lakshan = [
"वेदनायुक्त शोथ — जननांग पर सूजन",
"पिड़काएँ — लाल, छोटी-छोटी फुंसियाँ",
"पाक व व्रण — घाव बनना",
"पीत-रक्त स्राव (Yellowish discharge)",
"ज्वर, तृष्णा, मूर्च्छा, छर्दि",
"बस्ति, वृषण, वंक्षण में दाह",
"कृमि, दुर्गंध — गंभीर अवस्था में",
"लिंग नाश — अत्यंत गंभीर स्थिति में",
"Inguinal Lymphadenopathy (50%)",
]
bullet_block(14 + 2, cur_y - 25, 266, lakshan, size=8.5, bg=WHITE)
# 5 BHED boxes (right side)
bx = 294
bhed_data = [
("वातज", "कृष्ण वर्ण\nफेनिल स्राव\nतीव्र वेदना"),
("पित्तज", "पीत वर्ण\nदाह प्रधान\nज्वर"),
("कफज", "श्वेत वर्ण\nकण्डू\nस्निग्ध"),
("सन्निपातज", "मिश्रित\nसर्वाधिक कष्ट\nअसाध्य"),
("रक्तज", "रक्त स्राव\nकृमि\nदुर्गंध"),
]
bw = (W - 294 - 14) / 5 - 3
section_header(294, cur_y - 22, W - 294 - 14, 22, "उपदंश के 5 भेद", "Classification")
for i, (bname, bdesc) in enumerate(bhed_data):
bxi = bx + i * (bw + 3)
filled_rect(bxi, cur_y - 22 - 158, bw, 158, PINK_LIGHT, PINK_MID, radius=5)
filled_rect(bxi, cur_y - 22 - 30, bw, 30, PINK_DARK, radius=5)
txt(bname, bxi + 5, cur_y - 38, size=9, color=WHITE)
line_h = 13
for j, line in enumerate(bdesc.split('\n')):
txt("• " + line, bxi + 4, cur_y - 60 - j * line_h, size=8, color=BLACK)
cur_y -= 205
# ═════════════════════════════════════════════════ ROW 4: Modern + Diff Diag
half = (W - 28 - 8) / 2
filled_rect(14, cur_y - 130, half, 130, WHITE, PINK_MID, radius=6)
section_header(14, cur_y - 22, half, 22, "आधुनिक निदान", "Modern Diagnosis")
mod_items = [
"Swab Culture — H. ducreyi",
"PCR Assay — सर्वाधिक सटीक",
"Gram Stain — School of fish pattern",
"VDRL/RPR — Syphilis विभेद",
"HIV Test — साथ में करना आवश्यक",
"Clinical: Painful ulcer + Bubo",
]
bullet_block(14 + 2, cur_y - 26, half - 4, mod_items, size=8.5, bg=WHITE)
rx = 14 + half + 8
filled_rect(rx, cur_y - 130, half, 130, WHITE, PINK_MID, radius=6)
section_header(rx, cur_y - 22, half, 22, "विभेदक निदान", "Differential Diagnosis")
# mini table
diff_data = [
("उपदंश (Chancroid)", "दर्दनाक", "H. ducreyi"),
("सिफिलिस (Syphilis)", "दर्दरहित", "T. pallidum"),
("हर्पीस (Herpes)", "दर्दनाक छाले", "HSV-2"),
("LGV", "Bubo प्रमुख", "Chlamydia"),
]
dy = cur_y - 28
filled_rect(rx + 2, dy - 14, half - 4, 14, PINK_MID, radius=3)
for col_txt, col_x_off, col_ww in [("रोग", rx + 4, 95), ("लक्षण", rx + 101, 85), ("जीवाणु", rx + 188, 90)]:
txt(col_txt, col_x_off, dy - 11, size=8, color=WHITE)
dy -= 14
for i, (dis, sym, bug) in enumerate(diff_data):
bg = PINK_LIGHT if i % 2 == 0 else WHITE
filled_rect(rx + 2, dy - 14, half - 4, 14, bg, radius=2)
txt(dis, rx + 4, dy - 11, size=7.5, color=BLACK)
txt(sym, rx + 101, dy - 11, size=7.5, color=BLACK)
txt(bug, rx + 188, dy - 11, size=7.5, color=PINK_DARK)
dy -= 14
cur_y -= 138
# ═════════════════════════════════════════════════ ROW 5: Treatment + Prognosis
t_w = (W - 28 - 8) * 0.55
p_w = (W - 28 - 8) * 0.45 - 8
filled_rect(14, cur_y - 120, t_w, 120, WHITE, PINK_MID, radius=6)
section_header(14, cur_y - 22, t_w, 22, "चिकित्सा सिद्धान्त", "Treatment")
tx_items = [
"आयु: शोधन + शमन + स्थानिक",
"गन्धक रसायन — रक्त शोधन",
"जात्यादि तैल — व्रण लेप",
"महामंजिष्ठादि क्वाथ",
"Modern: Azithromycin 1g (एकल)",
"Ceftriaxone 250mg IM (एकल)",
"पथ्य: हल्का, सुपाच्य, दुग्ध, मधु",
]
bullet_block(14 + 2, cur_y - 26, t_w - 4, tx_items, size=8.5, bg=WHITE)
prx = 14 + t_w + 8
filled_rect(prx, cur_y - 120, p_w, 120, WHITE, PINK_MID, radius=6)
section_header(prx, cur_y - 22, p_w, 22, "साध्यासाध्यता", "Prognosis")
pr_items = [
"सुसाध्य: वातज, पित्तज",
"कृच्छ्र: कफज, रक्तज",
"असाध्य: सन्निपातज",
"लिंग नाश — असाध्य",
"Modern: शीघ्र उपचार = पूर्ण स्वस्थ",
]
bullet_block(prx + 2, cur_y - 26, p_w - 4, pr_items, size=8.5, bg=WHITE)
cur_y -= 128
# ═════════════════════════════════════════════════ ROW 6: Samprapti Ghatak table
filled_rect(14, cur_y - 52, W - 28, 52, WHITE, PINK_MID, radius=6)
section_header(14, cur_y - 20, W - 28, 20, "सम्प्राप्ति घटक", "Samprapti Ghataka")
ghatak_data = [
("दोष", "पित्त प्रधान त्रिदोष"),
("दूष्य", "रस, रक्त, मांस, लसिका"),
("स्रोतस", "रक्तवह, शुक्रवह, मूत्रवह"),
("अधिष्ठान", "जननेन्द्रिय"),
("स्रोतोदुष्टि", "अतिप्रवृत्ति"),
("व्याधि मार्ग", "बाह्य मार्ग"),
]
cell_w = (W - 28) / len(ghatak_data)
for i, (lab, val) in enumerate(ghatak_data):
gx = 14 + i * cell_w
filled_rect(gx, cur_y - 20, cell_w - 2, 20, PINK_DARK if i % 2 == 0 else PINK_MID, radius=3)
txt(lab, gx + 5, cur_y - 15, size=8, color=WHITE)
filled_rect(gx, cur_y - 52, cell_w - 2, 32, PINK_LIGHT if i % 2 == 0 else WHITE, radius=3)
txt(val, gx + 5, cur_y - 42, size=8, color=BLACK)
cur_y -= 60
# ═════════════════════════════════════════════════ BOTTOM FOOTER
filled_rect(0, 0, W, 28, PINK_DARK, radius=0)
txt("उपदंश (Chancroid) त्वरित संदर्भ | Ayurveda + Modern Medicine", 14, 10, size=8, color=WHITE)
txt("पृष्ठ 1 / 2", W - 70, 10, size=8, color=PINK_LIGHT)
c.showPage()
# ═══════════════════════════════════════════════════════════════════════════
# PAGE 2 — Detailed Symptom Reference + Classical Quotations
# ═══════════════════════════════════════════════════════════════════════════
filled_rect(0, 0, W, H, PINK_BG, radius=0)
filled_rect(0, H - 50, W, 50, PINK_DARK, radius=0)
filled_rect(0, H - 54, W, 4, PINK_MID, radius=0)
txt("उपदंश — विस्तृत लक्षण एवं संदर्भ", 16, H - 30, size=16, color=WHITE)
txt("Detailed Symptoms, References & Memory Points", 16, H - 44, size=9, color=PINK_LIGHT)
txt("पृष्ठ 2 / 2", W - 70, H - 34, size=9, color=PINK_LIGHT)
cur_y = H - 64
# ═════════════════════════════════════════════════ 5-column BHED DETAIL
bh_w = (W - 28 - 4 * 4) / 5
section_header(14, cur_y - 22, W - 28, 22, "पाँचों भेदों के विशेष लक्षण", "Detailed Symptoms per Type")
cur_y -= 22
bhed_detail = [
("वातज", PINK_DARK, [
"कृष्ण/अरुण वर्ण व्रण",
"तीव्र वेदना — चुभन",
"फेनिल (झागदार) स्राव",
"रूक्ष, शुष्क व्रण",
"कर्कश स्पर्श",
"ग्लान्स में दरारें",
"स्पंदन वेदना (रात)",
"रोगी दुर्बल होता है",
]),
("पित्तज", PINK_MID, [
"पीत/रक्त वर्ण",
"अत्यधिक दाह (जलन)",
"पीत-रक्त स्राव",
"ज्वर, तृष्णा",
"शीघ्र पाक (Suppuration)",
"आम फल सदृश लिंग",
"छर्दि, मूर्च्छा",
"भ्रम (चक्कर)",
]),
("कफज", PINK_DARK, [
"श्वेत वर्ण व्रण",
"श्वेत स्निग्ध स्राव",
"कण्डू (खुजली) प्रधान",
"मृदु, ठंडा स्पर्श",
"स्थिर, दृढ़ शोथ",
"Papules काले पड़ते हैं",
"Stiffness + Fissures",
"मन्द वेदना",
]),
("सन्निपातज", PINK_MID, [
"तीनों दोषों के लक्षण",
"सर्वाधिक कष्टकर",
"मिश्रित स्राव",
"तीव्र दाह + खुजली",
"शीघ्र व्रण विस्तार",
"मांस क्षय तेज",
"कृमि + दुर्गंध",
"असाध्य प्रकार",
]),
("रक्तज", PINK_DARK, [
"गहरा रक्त वर्ण",
"रक्त स्राव अधिक",
"दाह + तीव्र वेदना",
"शीघ्र पाक-स्फोट",
"कृमि उत्पत्ति",
"अत्यधिक दुर्गंध",
"Inguinal Bubo",
"मांस का शीघ्र नाश",
]),
]
for i, (bname, hdr_col, items) in enumerate(bhed_detail):
bxi = 14 + i * (bh_w + 4)
box_h = len(items) * 14 + 30
filled_rect(bxi, cur_y - box_h, bh_w, box_h, WHITE, PINK_MID, radius=5)
filled_rect(bxi, cur_y - 22, bh_w, 22, hdr_col, radius=5)
txt(bname + " उपदंश", bxi + 5, cur_y - 15, size=9, color=WHITE)
for j, item in enumerate(items):
iy = cur_y - 30 - j * 14
c.saveState()
c.setFillColor(PINK_DARK)
c.circle(bxi + 9, iy + 4, 2, fill=1, stroke=0)
c.restoreState()
txt(item, bxi + 15, iy, size=8, color=BLACK)
cur_y -= (len(bhed_detail[0][2]) * 14 + 38)
# ═════════════════════════════════════════════════ Classical Reference quotations
filled_rect(14, cur_y - 80, W - 28, 80, WHITE, PINK_MID, radius=6)
section_header(14, cur_y - 22, W - 28, 22, "प्रमुख संदर्भ ग्रन्थ", "Classical Texts")
ref_data = [
("चरक संहिता", "चिकित्सास्थान", "अ. ३०", "ध्वजभंग का विस्तृत वर्णन"),
("सुश्रुत संहिता", "निदानस्थान", "अ. १२", "उपदंश के 5 भेदों का निदान"),
("सुश्रुत संहिता", "चिकित्सास्थान", "अ. १९", "चिकित्सा एवं औषधि विधान"),
("अष्टाङ्ग हृदय", "उत्तरस्थान", "अ. ३३-३४", "उपदंश एवं फिरंग वर्णन"),
("माधव निदान", "—", "अ. ४७", "निदान एवं सम्प्राप्ति"),
("भावप्रकाश", "मध्यम खण्ड", "अ. ५१", "आधुनिक समन्वय"),
]
ry = cur_y - 26
# header row
header_cols = [("ग्रन्थ", 120), ("स्थान", 90), ("अध्याय", 60), ("विषय", 220)]
hx = 16
for (ht, hw) in header_cols:
filled_rect(hx, ry - 14, hw, 14, PINK_MID, radius=2)
txt(ht, hx + 4, ry - 11, size=8, color=WHITE)
hx += hw + 2
ry -= 14
for i, (g, s, a, v) in enumerate(ref_data):
bg = PINK_LIGHT if i % 2 == 0 else WHITE
hx = 16
for (val, hw) in [(g, 120), (s, 90), (a, 60), (v, 220)]:
filled_rect(hx, ry - 9, hw, 9, bg, radius=2)
txt(val, hx + 4, ry - 8, size=7.5, color=BLACK)
hx += hw + 2
ry -= 9
cur_y -= 88
# ═════════════════════════════════════════════════ Memory Aid + Key Points
filled_rect(14, cur_y - 100, W/2 - 18, 100, WHITE, PINK_MID, radius=6)
section_header(14, cur_y - 22, W/2 - 18, 22, "स्मरण सूत्र", "Memory Aid")
mem = [
"उपदंश = उप + दंश (साँप सदृश दर्द)",
"5 भेद = वा पि क सं र (VPKSR)",
"कारक = H. ducreyi (Haemophilus)",
"ऊष्मायन = 3-7 दिन",
"दर्दनाक व्रण = Chancroid की पहचान",
"50% में Bubo = Inguinal nodes",
"Syphilis से अंतर: Painless vs Painful",
]
bullet_block(14 + 2, cur_y - 26, W/2 - 22, mem, size=8.5, bg=WHITE)
rx2 = W/2 + 4
filled_rect(rx2, cur_y - 100, W/2 - 18, 100, WHITE, PINK_MID, radius=6)
section_header(rx2, cur_y - 22, W/2 - 18, 22, "महत्वपूर्ण बिंदु", "Key Clinical Points")
key_pts = [
"Ulcer हमेशा दर्दनाक (Painful) — अनिवार्य",
"Syphilis में व्रण दर्दरहित (Hard chancre)",
"HIV के रोगियों में अधिक गंभीर",
"साथी का उपचार भी आवश्यक",
"Azithromycin 1g एकल खुराक सर्वोत्तम",
"उपचार के बाद 3-7 दिन में सुधार",
"फॉलो-अप 7 दिन बाद आवश्यक",
]
bullet_block(rx2 + 2, cur_y - 26, W/2 - 22, key_pts, size=8.5, bg=WHITE)
cur_y -= 108
# ═════════════════════════════════════════════════ Paryay + Grantha at bottom
filled_rect(14, cur_y - 48, W - 28, 48, ROSE, PINK_MID, radius=6)
txt("पर्याय (Synonyms):", 20, cur_y - 16, size=10, color=PINK_DARK)
synonyms = ["उपदंश", "ध्वजभंग", "Soft Sore", "Soft Chancre", "Chancroid"]
sx = 140
for syn in synonyms:
filled_rect(sx, cur_y - 26, 80, 18, PINK_DARK, radius=10)
txt(syn, sx + 5, cur_y - 20, size=8, color=WHITE)
sx += 86
txt("अपथ्य: तीखा, अम्ल, भारी आहार | मैथुन निषेध | मद्य वर्जित", 20, cur_y - 40, size=8, color=GREY)
txt("पथ्य: दुग्ध, मधु, लघु आहार, तरल पदार्थ", 330, cur_y - 40, size=8, color=PINK_DARK)
# ── Footer
filled_rect(0, 0, W, 28, PINK_DARK, radius=0)
txt("उपदंश (Chancroid) त्वरित संदर्भ | स्रोत: चरक, सुश्रुत, माधव निदान, भावप्रकाश", 14, 10, size=8, color=WHITE)
txt("पृष्ठ 2 / 2", W - 70, 10, size=8, color=PINK_LIGHT)
c.showPage()
c.save()
print(f"PDF saved: {out}")
cd /tmp/workspace/updansh-ppt && python create_pdf_card.py 2>&1
Updansh Quick Reference
PDF Document · PDF
| सेक्शन | विवरण |
|---|---|
| व्याधि परिचय | रोग परिचय, H. ducreyi, ऊष्मायन काल |
| निदान / कारण | 7 प्रमुख कारण |
| सम्प्राप्ति चक्र | Flow arrows — निदान → दोष → व्याधि |
| सामान्य लक्षण | 9 लक्षण — शोथ, व्रण, कृमि, ज्वर |
| 5 भेद | वातज, पित्तज, कफज, सन्निपातज, रक्तज |
| आधुनिक निदान | PCR, Culture, Gram Stain, VDRL |
| विभेदक निदान | Chancroid vs Syphilis vs Herpes vs LGV |
| चिकित्सा | आयुर्वेदिक + Azithromycin/Ceftriaxone |
| साध्यासाध्यता | सुसाध्य/कृच्छ्र/असाध्य भेद |
| सम्प्राप्ति घटक | दोष, दूष्य, स्रोतस, अधिष्ठान |
| सेक्शन | विवरण |
|---|---|
| पाँचों भेद के लक्षण | प्रत्येक भेद के 8 विशेष लक्षण |
| संदर्भ ग्रन्थ तालिका | चरक, सुश्रुत, माधव, भावप्रकाश |
| स्मरण सूत्र | Memory tricks (VPKSR, etc.) |
| महत्वपूर्ण बिंदु | Key clinical points |
| पर्याय | सभी 5 नाम pill-style badges में |
| पथ्य-अपथ्य | आहार निर्देश |
Search for medical images of chancroid lesions to add to presentation
| स्रोत | कैसे | Free? |
|---|---|---|
| DermNet NZ | dermnetnz.org → search "chancroid" | ✅ Free (CC license) |
| CDC Public Health Image Library | phil.cdc.gov → search "chancroid" | ✅ Free (public domain) |
| WHO Image Library | who.int/images | ✅ Free |
| Wikimedia Commons | commons.wikimedia.org | ✅ Free (CC) |
| Your textbook | आपकी पुस्तक के चित्र — screenshot लें | ✅ Educational use |
| VisualDx / UpToDate | College/Hospital subscription required | 🔒 Paid |