Highlight the mistakes in the poster
dentin bonding agent generations classification 1st 2nd 3rd 4th 5th 6th composition examples
| Location | What the Poster Says | What is Correct |
|---|---|---|
| 1st Gen era | 1980s | Late 1960s-early 1970s |
| 1st Gen advantage | High bond strength | Very LOW bond strength |
| 1st Gen example | NPG-GMA | NPG-GMA is 2nd gen |
| 2nd Gen era | 1990s | 1970s |
| 2nd Gen type | Total-etch 3-step | Chemical bond (chelation), 2-step |
| 3rd Gen era | 1990s | Late 1970s-1980s |
| 3rd Gen type | Total-etch 2-step | Separate enamel/dentin bonding, smear layer penetration |
| 4th Gen type | All-in-one (1-bottle) | Total-etch 3-step (etch + primer + bond) |
| 5th Gen type | Self-etch 2-step | Total-etch 2-step (single bottle) |
| 6th Gen type | Self-etch 1-step | Self-etch 2-step |
| 7th Gen type | Universal adhesive | All-in-one self-etch 1-step |
| 7th Gen note | "no MDP" | Most contain MDP or equivalent functional monomer |
Create a corrected infographic with accurate generation dates and classifications
mkdir -p /home/daytona/workspace/dentin-bonding-infographic && ls /home/daytona/…
~/dentin-bonding-infographic/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dentin Bonding Agent – Corrected Infographic</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Segoe UI', Arial, sans-serif;
background: #1a3a1a;
padding: 18px;
min-width: 1300px;
}
.poster {
background: #1a3a1a;
border: 3px solid #c8a400;
border-radius: 10px;
overflow: hidden;
width: 1264px;
margin: 0 auto;
}
/* ─── HEADER ─── */
.header {
background: #1a3a1a;
text-align: center;
padding: 14px 20px 0;
color: #ffffff;
}
.header h1 {
font-size: 22px;
font-weight: 900;
letter-spacing: 1px;
text-transform: uppercase;
}
.header h2 {
font-size: 14px;
font-weight: 600;
letter-spacing: 0.5px;
margin-top: 3px;
text-transform: uppercase;
}
.title-banner {
background: #c8a400;
color: #1a3a1a;
font-size: 26px;
font-weight: 900;
letter-spacing: 3px;
text-align: center;
padding: 8px 0;
margin: 10px 0 0;
text-transform: uppercase;
border: 2px solid #fff;
}
.definition-box {
background: #e8f4e8;
border: 2px solid #1a3a1a;
margin: 8px 12px;
padding: 7px 14px;
font-size: 12.5px;
color: #1a3a1a;
text-align: center;
font-weight: 600;
border-radius: 4px;
}
/* ─── MAIN TABLE ─── */
.main-table-wrap {
margin: 0 8px 8px;
border: 2px solid #c8a400;
border-radius: 6px;
overflow: hidden;
}
table.main-table {
width: 100%;
border-collapse: collapse;
font-size: 11.5px;
}
table.main-table thead tr th {
background: #1a5c1a;
color: #ffffff;
text-align: center;
padding: 7px 5px;
font-size: 12px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.5px;
border: 1px solid #4a8a4a;
}
table.main-table tbody tr td {
border: 1px solid #4a8a4a;
vertical-align: top;
padding: 7px 7px;
line-height: 1.45;
font-size: 11px;
}
table.main-table tbody tr:nth-child(even) td {
background: #f0f7f0;
}
table.main-table tbody tr:nth-child(odd) td {
background: #ffffff;
}
.gen-cell {
font-weight: 900;
font-size: 12px;
text-align: center;
min-width: 105px;
}
.type-cell {
min-width: 110px;
font-weight: 700;
color: #1a3a1a;
}
.comp-cell {
min-width: 180px;
color: #1a3a1a;
}
.steps-cell {
min-width: 130px;
}
.adv-cell {
min-width: 155px;
}
.ex-cell {
min-width: 160px;
font-weight: 700;
color: #1a3a1a;
}
ul.dot-list {
list-style: none;
padding: 0;
}
ul.dot-list li::before {
content: "● ";
font-size: 9px;
}
ul.dot-list li { margin-bottom: 2px; }
.badge {
display: inline-block;
padding: 2px 7px;
border-radius: 10px;
font-size: 10px;
font-weight: 700;
margin-bottom: 3px;
}
/* Generation color coding */
.g1 { color: #8B0000; }
.g2 { color: #0000AA; }
.g3 { color: #006600; }
.g4 { color: #804000; }
.g5 { color: #5500AA; }
.g6 { color: #006666; }
.g7 { color: #AA5500; }
.g8 { color: #005577; }
.badge-g1 { background:#ffe0e0; color:#8B0000; border:1px solid #8B0000; }
.badge-g2 { background:#e0e0ff; color:#0000AA; border:1px solid #0000AA; }
.badge-g3 { background:#e0ffe0; color:#006600; border:1px solid #006600; }
.badge-g4 { background:#fff3e0; color:#804000; border:1px solid #804000; }
.badge-g5 { background:#f3e0ff; color:#5500AA; border:1px solid #5500AA; }
.badge-g6 { background:#e0ffff; color:#006666; border:1px solid #006666; }
.badge-g7 { background:#fff0e0; color:#AA5500; border:1px solid #AA5500; }
.badge-g8 { background:#e0f0ff; color:#005577; border:1px solid #005577; }
/* ─── STEPS VISUAL ─── */
.step-pills { display: flex; flex-direction: column; gap: 3px; }
.pill {
display: inline-block;
padding: 2px 8px;
border-radius: 12px;
font-size: 10px;
font-weight: 700;
text-align: center;
color: white;
}
.pill-etch { background: #e05050; }
.pill-rinse { background: #5080e0; }
.pill-prime { background: #50a050; }
.pill-bond { background: #c07000; }
.pill-combo { background: #7050b0; }
.pill-self { background: #007070; }
.pill-multi { background: #555; }
.step-note {
font-size: 9.5px;
color: #555;
font-style: italic;
margin-top: 3px;
}
.step-count {
font-weight: 900;
font-size: 13px;
color: #1a3a1a;
margin-bottom: 3px;
}
/* ─── CORRECTION NOTE ─── */
.correction-banner {
background: #fff3cd;
border: 2px solid #c8a400;
margin: 0 8px 8px;
padding: 7px 14px;
font-size: 11.5px;
color: #5a3a00;
border-radius: 5px;
font-weight: 600;
}
.correction-banner strong { color: #c00; }
/* ─── EVOLUTION TIMELINE ─── */
.evolution-section {
background: #f5f5e8;
margin: 0 8px 8px;
border: 2px solid #c8a400;
border-radius: 6px;
padding: 10px 12px;
}
.evo-title {
text-align: center;
font-size: 15px;
font-weight: 900;
color: #1a3a1a;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 10px;
border-bottom: 2px solid #1a3a1a;
padding-bottom: 5px;
}
.evo-grid {
display: flex;
align-items: flex-start;
gap: 0;
justify-content: space-between;
}
.evo-card {
flex: 1;
text-align: center;
padding: 6px 4px;
border-radius: 6px;
font-size: 9.5px;
position: relative;
min-width: 130px;
}
.evo-arrow {
font-size: 22px;
color: #1a3a1a;
font-weight: 900;
align-self: center;
padding: 0 2px;
}
.evo-gen-num {
font-size: 11px;
font-weight: 900;
margin-bottom: 2px;
}
.evo-gen-label {
font-size: 10px;
font-weight: 800;
margin-bottom: 3px;
}
.evo-era {
font-size: 9px;
font-style: italic;
margin-bottom: 3px;
font-weight: 700;
}
.evo-desc {
font-size: 9px;
line-height: 1.35;
}
.ec1 { background: #ffe0e0; border: 1.5px solid #8B0000; color: #5a0000; }
.ec2 { background: #e0e0ff; border: 1.5px solid #0000AA; color: #00004a; }
.ec3 { background: #e0ffe0; border: 1.5px solid #006600; color: #003300; }
.ec4 { background: #fff3e0; border: 1.5px solid #804000; color: #402000; }
.ec5 { background: #f3e0ff; border: 1.5px solid #5500AA; color: #2a0055; }
.ec6 { background: #e0ffff; border: 1.5px solid #006666; color: #003333; }
.ec7 { background: #fff0e0; border: 1.5px solid #AA5500; color: #552a00; }
.ec8 { background: #e0f0ff; border: 1.5px solid #005577; color: #002a3a; }
/* ─── FOOTER ─── */
.footer {
background: #1a3a1a;
color: #fff;
padding: 10px 18px;
display: flex;
justify-content: space-between;
align-items: flex-start;
font-size: 10.5px;
gap: 20px;
}
.footer-col { flex: 1; }
.footer-col h4 { color: #c8a400; font-size: 11px; margin-bottom: 4px; }
/* ─── CORRECTION CALLOUTS IN TABLE ─── */
.corrected {
background: #fffde0;
border-left: 3px solid #c8a400;
padding-left: 4px;
font-size: 10.5px;
}
</style>
</head>
<body>
<div class="poster">
<!-- HEADER -->
<div class="header">
<h1>Index Institute of Dental Sciences</h1>
<h2>Department of Conservative Dentistry and Endodontics</h2>
</div>
<div class="title-banner">DENTIN BONDING AGENT</div>
<div class="definition-box">
A dentin bonding agent is a material used to achieve adhesion between restorative materials and dentin
by forming a micromechanical and/or chemical bond with the tooth structure.
</div>
<!-- CORRECTION NOTE -->
<div class="correction-banner">
⚠️ <strong>Corrected Version</strong> — Generation eras, type classifications, and example attributions have been corrected per established literature.
Key fixes: accurate decade assignment for each generation; correct step-system labeling (total-etch vs self-etch); NPG-GMA moved to 2nd generation; bond strength corrected for early generations.
</div>
<!-- MAIN TABLE -->
<div class="main-table-wrap">
<table class="main-table">
<thead>
<tr>
<th style="width:8%">GENERATION</th>
<th style="width:10%">TYPE</th>
<th style="width:19%">COMPOSITION</th>
<th style="width:14%">STEPS</th>
<th style="width:14%">STEP COUNT & MECHANISM</th>
<th style="width:17%">ADVANTAGES / LIMITATIONS</th>
<th style="width:18%">EXAMPLES</th>
</tr>
</thead>
<tbody>
<!-- GEN 1 -->
<tr>
<td class="gen-cell g1">
<div class="badge badge-g1">1st GENERATION</div><br>
<span class="corrected">Late 1960s–Early 1970s</span>
</td>
<td class="type-cell">
Conventional adhesive<br>
<span style="font-size:10px; color:#555;">(Enamel-only bonding)</span>
</td>
<td class="comp-cell">
Polyurethanes, cyanoacrylate,<br>
glycerophosphoric acid,<br>
dimethacrylate
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-etch">1. Etch enamel</span>
<span class="pill pill-bond">2. Apply adhesive</span>
</div>
<div class="step-note">Enamel bonding only; does not bond to dentin</div>
</td>
<td>
<div class="step-count">2 Steps</div>
Acid-etch enamel + simple adhesive resin
</td>
<td class="adv-cell">
<ul class="dot-list">
<li><span class="corrected">Very LOW bond strength (2–3 MPa)</span></li>
<li>Frequent debonding within months</li>
<li>Suitable only for small retentive cavities</li>
<li>Post-op sensitivity common</li>
</ul>
</td>
<td class="ex-cell">
Cervident,<br>
Copal varnish-based adhesives<br>
<span class="corrected" style="font-size:9.5px;">⚠ NPG-GMA belongs to 2nd generation (see below)</span>
</td>
</tr>
<!-- GEN 2 -->
<tr>
<td class="gen-cell g2">
<div class="badge badge-g2">2nd GENERATION</div><br>
<span class="corrected">Late 1970s</span>
</td>
<td class="type-cell">
<span class="corrected">Chemical bond (chelation)</span><br>
<span style="font-size:10px;color:#555;">2-step; smear layer utilized</span>
</td>
<td class="comp-cell">
Halophosphorous monomers,<br>
<span class="corrected">NPG-GMA</span>,<br>
phosphate esters (e.g., Bis-GMA/HEMA not yet standard)
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-etch">1. Etch enamel only</span>
<span class="pill pill-bond">2. Apply adhesive (dentin not etched)</span>
</div>
<div class="step-note">Chelation to calcium of dentin through smear layer</div>
</td>
<td>
<div class="step-count">2 Steps</div>
Chemical chelation to dentin calcium; smear layer left intact
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>Low bond strength (1–3 MPa)</li>
<li>Frequent interfacial failure</li>
<li>Introduced concept of dentin adhesion</li>
</ul>
</td>
<td class="ex-cell">
<span class="corrected">NPG-GMA (Scotchbond 1st iteration),<br>Clearfil Bond System F</span>
</td>
</tr>
<!-- GEN 3 -->
<tr>
<td class="gen-cell g3">
<div class="badge badge-g3">3rd GENERATION</div><br>
<span class="corrected">Late 1970s – Late 1980s</span>
</td>
<td class="type-cell">
<span class="corrected">Smear layer modifier<br>(3-step; separate enamel & dentin bonding)</span>
</td>
<td class="comp-cell">
Separate etchant, conditioner/primer<br>
and bonding resin;<br>
acidic primers, HEMA,<br>
increased hydrophilic monomers
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-etch">1. Etch (separate etchant)</span>
<span class="pill pill-prime">2. Primer / conditioner</span>
<span class="pill pill-bond">3. Bonding resin</span>
</div>
<div class="step-note">Partial smear layer removal; early dentin priming</div>
</td>
<td>
<div class="step-count">3 Steps</div>
Separate agents for enamel and dentin; partial smear layer removal
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>Improved dentin bond vs 1st/2nd gen</li>
<li>First use of dentin primer</li>
<li>Bond strength ~8–15 MPa</li>
<li>Technique-sensitive</li>
</ul>
</td>
<td class="ex-cell">
Scotchbond 2,<br>Gluma,<br>Tenure
</td>
</tr>
<!-- GEN 4 -->
<tr>
<td class="gen-cell g4">
<div class="badge badge-g4">4th GENERATION</div><br>
<span class="corrected">Mid–Late 1980s</span>
</td>
<td class="type-cell">
<span class="corrected">Total-etch 3-step system<br>(Gold Standard)</span>
</td>
<td class="comp-cell">
37% phosphoric acid (etchant),<br>
HEMA, TEGDMA dissolved in<br>
ethanol/acetone/water;<br>
Bis-GMA, hydrophobic bonding resin
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-etch">1. Etch (37% H₃PO₄)</span>
<span class="pill pill-prime">2. Primer (separate)</span>
<span class="pill pill-bond">3. Bonding resin (separate)</span>
</div>
<div class="step-note">Total-etch of enamel AND dentin; true hybrid layer formation</div>
</td>
<td>
<div class="step-count">3 Steps</div>
Total-etch (enamel + dentin); complete smear layer removal; hybrid layer
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>Highest bond strength (17–25 MPa)</li>
<li>True hybrid layer formation</li>
<li>Bonds to moist dentin</li>
<li>Applicable to porcelain & alloys</li>
<li>Technique-sensitive (moisture control)</li>
</ul>
</td>
<td class="ex-cell">
Scotchbond Multipurpose (3M),<br>
All-Bond 2 (Bisco),<br>
OptiBond FL (Kerr),<br>
Clearfil Liner Bond 2
</td>
</tr>
<!-- GEN 5 -->
<tr>
<td class="gen-cell g5">
<div class="badge badge-g5">5th GENERATION</div><br>
<span class="corrected">Early 1990s</span>
</td>
<td class="type-cell">
<span class="corrected">Total-etch 2-step system<br>(Single-bottle)</span>
</td>
<td class="comp-cell">
HEMA, Bis-GMA, Acetone,<br>
ethanol and water;<br>
Photoinitiators;<br>
Primer + adhesive combined in one bottle
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-etch">1. Etch (37% H₃PO₄, rinse off)</span>
<span class="pill pill-combo">2. Single-bottle primer + bond</span>
</div>
<div class="step-note">Total-etch retained; primer and adhesive combined; simpler than 4th gen</div>
</td>
<td>
<div class="step-count">2 Steps</div>
<span class="corrected">Total-etch + single-bottle primer-adhesive (NOT self-etch)</span>
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>Fewer steps than 4th gen</li>
<li>Good bond strength (17–22 MPa)</li>
<li>Less technique-sensitive</li>
<li>Still requires rinsing after etch</li>
</ul>
</td>
<td class="ex-cell">
Single Bond (3M),<br>
Prime & Bond NT (Dentsply),<br>
One-Step (Bisco),<br>
OptiBond Solo Plus
</td>
</tr>
<!-- GEN 6 -->
<tr>
<td class="gen-cell g6">
<div class="badge badge-g6">6th GENERATION</div><br>
<span class="corrected">Mid–Late 1990s – Early 2000s</span>
</td>
<td class="type-cell">
<span class="corrected">Self-etch 2-step system</span><br>
<span style="font-size:10px;color:#555;">Self-etching primer + bonding resin</span>
</td>
<td class="comp-cell">
Acidic methacrylate monomers (self-etching primer),<br>
HEMA, Bis-GMA or UDMA,<br>
Water, Acetone/ethanol,<br>
Photoinitiator, Fluoride
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-self">1. Self-etch primer (no rinse)</span>
<span class="pill pill-bond">2. Bonding resin</span>
</div>
<div class="step-note">No separate phosphoric acid; smear layer incorporated; no rinsing needed</div>
</td>
<td>
<div class="step-count">2 Steps</div>
<span class="corrected">Self-etch primer then separate bonding resin (NOT 1-step all-in-one)</span>
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>No separate etch/rinse needed</li>
<li>Reduced post-op sensitivity</li>
<li>Less technique-sensitive</li>
<li>Bond strength ~18–20 MPa</li>
<li>Enamel bonding slightly weaker</li>
</ul>
</td>
<td class="ex-cell">
Clearfil SE Bond (Kuraray),<br>
AdheSE (Ivoclar),<br>
OptiBond Solo Plus SE
</td>
</tr>
<!-- GEN 7 -->
<tr>
<td class="gen-cell g7">
<div class="badge badge-g7">7th GENERATION</div><br>
<span class="corrected">Early–Mid 2000s</span>
</td>
<td class="type-cell">
<span class="corrected">Self-etch 1-step system<br>(All-in-One)</span>
</td>
<td class="comp-cell">
Acidic monomers (MDP or similar),<br>
hydrophilic & hydrophobic resins,<br>
water, volatile organic solvents;<br>
all components in a single bottle
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-self">1. Apply all-in-one adhesive (no rinse)</span>
</div>
<div class="step-note">Single application; etch + prime + bond in one bottle; light cure</div>
</td>
<td>
<div class="step-count">1 Step</div>
<span class="corrected">All-in-one self-etch (NOT "universal"; contains MDP functional monomer)</span>
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>Simplest technique</li>
<li>Fewest steps</li>
<li>Reduced chair time</li>
<li>Good patient comfort</li>
<li>Moderate bond strength</li>
</ul>
</td>
<td class="ex-cell">
G-Bond (GC),<br>
iBond (Heraeus),<br>
Xeno III (Dentsply),<br>
Clearfil S³ Bond
</td>
</tr>
<!-- GEN 8 -->
<tr>
<td class="gen-cell g8">
<div class="badge badge-g8">8th GENERATION</div><br>
<span class="corrected">2010s–Present</span>
</td>
<td class="type-cell">
Universal / Multi-mode adhesive<br>
<span style="font-size:10px;color:#555;">(Advanced universal)</span>
</td>
<td class="comp-cell">
10-MDA / MDP, HEMA, Bis-GMA,<br>
Dimethacrylates, PAC,<br>
Water, SiO₂ nanoparticles,<br>
CQ, Ethanol;<br>
Bioactive / remineralizing components
</td>
<td class="steps-cell">
<div class="step-pills">
<span class="pill pill-multi">Multiple modes:</span>
<span class="pill pill-etch">Etch & Rinse mode</span>
<span class="pill pill-self">Self-Etch mode</span>
<span class="pill pill-combo">Selective-Etch mode</span>
</div>
<div class="step-note">Clinician selects mode per case; compatible with all techniques</div>
</td>
<td>
<div class="step-count">1–3 Steps</div>
Multi-mode; works in total-etch, self-etch, or selective-etch; bioactive potential
</td>
<td class="adv-cell">
<ul class="dot-list">
<li>Bioactive & reparative potential</li>
<li>Excellent durability</li>
<li>Reduced post-op sensitivity</li>
<li>Highly versatile</li>
<li>Compatible with all substrates</li>
</ul>
</td>
<td class="ex-cell">
Scotchbond Universal Plus (3M),<br>
Clearfil Universal Bond Quick (Kuraray),<br>
G-Premio Bond (GC)
</td>
</tr>
</tbody>
</table>
</div>
<!-- EVOLUTION TIMELINE -->
<div class="evolution-section">
<div class="evo-title">Evolution of Dentin Bonding Agents — 8 Generations (Corrected Timeline)</div>
<div class="evo-grid">
<div class="evo-card ec1">
<div class="evo-gen-num">Gen 1</div>
<div class="evo-gen-label">Enamel Adhesion</div>
<div class="evo-era">Late 1960s – Early 1970s</div>
<div class="evo-desc">Acid-etch enamel + simple adhesive resin. 2-step. Very low bond strength. No dentin bonding.</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec2">
<div class="evo-gen-num">Gen 2</div>
<div class="evo-gen-label">Chemical Bond</div>
<div class="evo-era">Late 1970s</div>
<div class="evo-desc">NPG-GMA. Chelation to dentin calcium. 2-step. Smear layer left intact. Low bond strength (1–3 MPa).</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec3">
<div class="evo-gen-num">Gen 3</div>
<div class="evo-gen-label">Smear Layer Primer</div>
<div class="evo-era">Late 1970s – Late 1980s</div>
<div class="evo-desc">Separate etchant + primer + adhesive. 3-step. Partial smear layer removal. Scotchbond 2, Gluma.</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec4">
<div class="evo-gen-num">Gen 4</div>
<div class="evo-gen-label">Hybrid Layer<br>(Total-Etch 3-step)</div>
<div class="evo-era">Mid–Late 1980s</div>
<div class="evo-desc">37% H₃PO₄ + Primer + Bond (3 bottles). Complete smear layer removal. Highest bond strength (17–25 MPa). Gold standard.</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec5">
<div class="evo-gen-num">Gen 5</div>
<div class="evo-gen-label">Total-Etch & Rinse<br>(2-step)</div>
<div class="evo-era">Early 1990s</div>
<div class="evo-desc">Etch + rinse + single-bottle primer-adhesive. 2-step. Single Bond, Prime & Bond NT.</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec6">
<div class="evo-gen-num">Gen 6</div>
<div class="evo-gen-label">Self-Etch (2-step)</div>
<div class="evo-era">Mid 1990s – Early 2000s</div>
<div class="evo-desc">Self-etch primer + bonding resin. 2-step. No rinsing. Clearfil SE Bond.</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec7">
<div class="evo-gen-num">Gen 7</div>
<div class="evo-gen-label">Self-Etch (1-step<br>All-in-One)</div>
<div class="evo-era">Early–Mid 2000s</div>
<div class="evo-desc">Single bottle: etch + prime + bond. 1-step. Contains MDP monomer. G-Bond, iBond, Xeno III.</div>
</div>
<div class="evo-arrow">→</div>
<div class="evo-card ec8">
<div class="evo-gen-num">Gen 8</div>
<div class="evo-gen-label">Universal Bond<br>(Multi-mode)</div>
<div class="evo-era">2010s–Present</div>
<div class="evo-desc">Multi-mode (total/self/selective etch). Single bottle with MDP. Bioactive. Scotchbond Universal Plus, G-Premio Bond.</div>
</div>
</div>
</div>
<!-- FOOTER -->
<div class="footer">
<div class="footer-col">
<h4>GUIDED BY</h4>
<div>Dr. Suparna G. Saha</div>
<div>Dr. Aruna Kanaparthy</div>
<div>Dr. Shefali Singh</div>
</div>
<div class="footer-col">
<h4>PRESENTED BY</h4>
<div>Dr. Shakti Singh | Dr. Katya Pandey</div>
<div>Dr. Ankita Grace Lal | Dr. Mrinalini Chaddha</div>
</div>
<div class="footer-col">
<h4>STUDENTS</h4>
<div>Taniya Sirodiya (22059) · Vidyut Parmar (22062)</div>
<div>Vanshika Patidar (22060) · Vijeta Patil (22063)</div>
<div>Tanishka Soni (22058) · Vanshita Gupta (22061)</div>
<div>Shweta Kumari (22057) · Yashi Sharma (22064)</div>
</div>
<div class="footer-col" style="font-size:9px; color:#aaa; text-align:right; align-self:flex-end;">
Index Institute of Dental Sciences<br>
Dept. of Conservative Dentistry & Endodontics<br>
<strong style="color:#c8a400;">CORRECTED VERSION</strong>
</div>
</div>
</div>
</body>
</html>
which wkhtmltoimage wkhtmltopdf chromium-browser google-chrome puppeteer 2>/dev/…
python3 -c "import playwright; print('playwright ok')" 2>/dev/null || echo "no p…
python3 -c " from PIL import Image, ImageDraw, ImageFont print('PIL available') …
~/dentin-bonding-infographic/generate_infographic.py
#!/usr/bin/env python3
"""
Generate Corrected Dentin Bonding Agent Infographic as PDF using ReportLab.
"""
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.units import mm, inch
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus.flowables import HRFlowable
# ─── COLORS ───────────────────────────────────────────────────────────────────
DARK_GREEN = colors.HexColor('#1a3a1a')
MEDIUM_GREEN = colors.HexColor('#1a5c1a')
LIGHT_GREEN = colors.HexColor('#e0f2e0')
GOLD = colors.HexColor('#c8a400')
LIGHT_YELLOW = colors.HexColor('#fffde0')
OFF_WHITE = colors.HexColor('#f9f9f9')
WHITE = colors.white
RED_DARK = colors.HexColor('#8B0000')
BLUE_DARK = colors.HexColor('#0000AA')
GREEN_DARK = colors.HexColor('#006600')
BROWN = colors.HexColor('#804000')
PURPLE = colors.HexColor('#5500AA')
TEAL = colors.HexColor('#006666')
ORANGE = colors.HexColor('#AA5500')
STEEL_BLUE = colors.HexColor('#005577')
WARN_BG = colors.HexColor('#fff3cd')
WARN_FG = colors.HexColor('#5a3a00')
CORR_BG = colors.HexColor('#fffde0')
# Lighter backgrounds
BG_G1 = colors.HexColor('#fff0f0')
BG_G2 = colors.HexColor('#f0f0ff')
BG_G3 = colors.HexColor('#f0fff0')
BG_G4 = colors.HexColor('#fff9f0')
BG_G5 = colors.HexColor('#f9f0ff')
BG_G6 = colors.HexColor('#f0ffff')
BG_G7 = colors.HexColor('#fff8f0')
BG_G8 = colors.HexColor('#f0f8ff')
PAGE = landscape(A3)
W, H = PAGE
# ─── STYLES ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def PS(name, parent='Normal', **kwargs):
return ParagraphStyle(name, parent=styles[parent], **kwargs)
title_style = PS('Title', 'Normal',
fontName='Helvetica-Bold', fontSize=20, textColor=WHITE,
alignment=TA_CENTER, spaceAfter=2)
subtitle_style = PS('Subtitle', 'Normal',
fontName='Helvetica-Bold', fontSize=11, textColor=WHITE,
alignment=TA_CENTER, spaceAfter=2)
banner_style = PS('Banner', 'Normal',
fontName='Helvetica-Bold', fontSize=22, textColor=DARK_GREEN,
alignment=TA_CENTER, spaceAfter=3, spaceBefore=3)
defn_style = PS('Defn', 'Normal',
fontName='Helvetica-Bold', fontSize=10, textColor=DARK_GREEN,
alignment=TA_CENTER, spaceAfter=4)
warn_style = PS('Warn', 'Normal',
fontName='Helvetica-BoldOblique', fontSize=8.5, textColor=WARN_FG,
alignment=TA_LEFT)
hdr_style = PS('Hdr', 'Normal',
fontName='Helvetica-Bold', fontSize=9, textColor=WHITE,
alignment=TA_CENTER)
cell_bold = PS('CellBold', 'Normal',
fontName='Helvetica-Bold', fontSize=8.5, textColor=DARK_GREEN,
leading=11)
cell_norm = PS('CellNorm', 'Normal',
fontName='Helvetica', fontSize=8, textColor=colors.black,
leading=11)
cell_corr = PS('CellCorr', 'Normal',
fontName='Helvetica-BoldOblique', fontSize=8, textColor=colors.HexColor('#8B0000'),
leading=10)
cell_small = PS('CellSmall', 'Normal',
fontName='Helvetica', fontSize=7.5, textColor=colors.HexColor('#333333'),
leading=10)
gen_label = PS('GenLabel', 'Normal',
fontName='Helvetica-Bold', fontSize=9.5,
alignment=TA_CENTER)
gen_era = PS('GenEra', 'Normal',
fontName='Helvetica-BoldOblique', fontSize=8,
alignment=TA_CENTER)
evo_title_style = PS('EvoTitle', 'Normal',
fontName='Helvetica-Bold', fontSize=13, textColor=DARK_GREEN,
alignment=TA_CENTER, spaceAfter=4, spaceBefore=4)
evo_num = PS('EvoNum', 'Normal',
fontName='Helvetica-Bold', fontSize=9.5,
alignment=TA_CENTER)
evo_lbl = PS('EvoLbl', 'Normal',
fontName='Helvetica-Bold', fontSize=8.5,
alignment=TA_CENTER)
evo_era_s = PS('EvoEra', 'Normal',
fontName='Helvetica-Oblique', fontSize=7.5,
alignment=TA_CENTER)
evo_desc_s = PS('EvoDesc', 'Normal',
fontName='Helvetica', fontSize=7,
alignment=TA_CENTER, leading=9)
foot_style = PS('Foot', 'Normal',
fontName='Helvetica', fontSize=8.5, textColor=WHITE, leading=12)
foot_hdr = PS('FootHdr', 'Normal',
fontName='Helvetica-Bold', fontSize=9.5, textColor=GOLD, leading=13)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
def P(text, style):
return Paragraph(text, style)
def bullet_para(items, style, bullet='•'):
lines = [f'{bullet} {item}' for item in items]
return Paragraph('<br/>'.join(lines), style)
def steps_para(steps, style):
colored_steps = []
pill_colors = {
'Etch': '#e05050', 'Rinse': '#3366cc', 'Primer': '#3a8a3a',
'Bond': '#c07000', 'Self': '#007070', 'Single': '#7050b0',
'Apply': '#007070', 'Multiple': '#555555', 'No': '#555555',
}
for step in steps:
first_word = step.split()[0] if step.split() else ''
c = pill_colors.get(first_word, '#555555')
colored_steps.append(f'<font color="{c}"><b>{step}</b></font>')
return Paragraph('<br/>'.join(colored_steps), style)
# ─── DATA ─────────────────────────────────────────────────────────────────────
GENERATIONS = [
{
'num': '1st GENERATION',
'era': 'Late 1960s–Early 1970s',
'era_correct': True,
'bg': BG_G1,
'color': RED_DARK,
'type': 'Conventional adhesive\n(Enamel-only bonding)',
'composition': 'Polyurethanes, cyanoacrylate,\nglycero-phosphoric acid,\ndimethacrylate',
'steps': ['1. Etch enamel', '2. Apply adhesive resin'],
'step_note': '2 steps. Enamel-only; no dentin bonding',
'advantages': ['Very LOW bond strength (2–3 MPa) ⚠', 'Frequent debonding within months', 'Suitable for small retentive cavities only', 'Post-op sensitivity common'],
'examples': 'Cervident,\ncopal varnish-based adhesives\n[NPG-GMA = 2nd generation ⚠]',
'corrected_fields': ['era', 'advantages', 'examples'],
},
{
'num': '2nd GENERATION',
'era': 'Late 1970s',
'era_correct': True,
'bg': BG_G2,
'color': BLUE_DARK,
'type': 'Chemical bond (chelation)\n2-step; smear layer utilized',
'composition': 'Halophosphorous monomers,\nNPG-GMA (key component),\nphosphate esters',
'steps': ['1. Etch enamel only', '2. Apply adhesive (dentin not etched)'],
'step_note': '2 steps. Chelation to dentin calcium through intact smear layer',
'advantages': ['Low bond strength (1–3 MPa)', 'Frequent interfacial failure', 'Introduced concept of dentin adhesion'],
'examples': 'NPG-GMA (Scotchbond 1st),\nClearfil Bond System F',
'corrected_fields': ['era', 'type'],
},
{
'num': '3rd GENERATION',
'era': 'Late 1970s–Late 1980s',
'era_correct': True,
'bg': BG_G3,
'color': GREEN_DARK,
'type': 'Smear layer modifier\n3-step; separate enamel & dentin bonding',
'composition': 'Separate etchant + conditioner/primer\n+ bonding resin;\nHEMA, increased hydrophilic monomers',
'steps': ['1. Etch (separate etchant)', '2. Primer / conditioner', '3. Bonding resin'],
'step_note': '3 steps. Partial smear layer removal; early dentin priming',
'advantages': ['Bond strength ~8–15 MPa', 'First use of dedicated dentin primer', 'Improved dentin adhesion vs 1st/2nd gen', 'Still technique-sensitive'],
'examples': 'Scotchbond 2, Gluma, Tenure',
'corrected_fields': ['era', 'type'],
},
{
'num': '4th GENERATION',
'era': 'Mid–Late 1980s',
'era_correct': True,
'bg': BG_G4,
'color': BROWN,
'type': 'Total-etch 3-step system\n(GOLD STANDARD)',
'composition': '37% phosphoric acid (etchant),\nHEMA, TEGDMA in ethanol/acetone,\nBis-GMA, hydrophobic bonding resin',
'steps': ['1. Etch (37% H₃PO₄, rinse off)', '2. Primer (separate)', '3. Bonding resin (separate)'],
'step_note': '3 steps. Total-etch enamel + dentin; full smear layer removal; true hybrid layer',
'advantages': ['Highest bond strength (17–25 MPa)', 'True hybrid layer formation', 'Bonds to moist dentin', 'Compatible with porcelain & alloys'],
'examples': 'Scotchbond Multipurpose (3M),\nAll-Bond 2 (Bisco),\nOptiBond FL (Kerr),\nClearfil Liner Bond 2',
'corrected_fields': ['era', 'type'],
},
{
'num': '5th GENERATION',
'era': 'Early 1990s',
'era_correct': True,
'bg': BG_G5,
'color': PURPLE,
'type': 'Total-etch 2-step system\n(Single-bottle primer-adhesive)',
'composition': 'HEMA, Bis-GMA, acetone,\nethanol & water;\nPhotoinitiators;\nPrimer + adhesive in one bottle',
'steps': ['1. Etch (37% H₃PO₄, rinse off)', '2. Single-bottle primer + adhesive'],
'step_note': '2 steps. Total-etch retained; primer & bond combined. NOT self-etch ⚠',
'advantages': ['Fewer steps than 4th gen', 'Good bond strength (17–22 MPa)', 'Less technique-sensitive', 'Requires rinsing after etch'],
'examples': 'Single Bond (3M),\nPrime & Bond NT (Dentsply),\nOne-Step (Bisco),\nOptiBond Solo Plus',
'corrected_fields': ['era', 'type'],
},
{
'num': '6th GENERATION',
'era': 'Mid 1990s–Early 2000s',
'era_correct': True,
'bg': BG_G6,
'color': TEAL,
'type': 'Self-etch 2-step system\n(Self-etch primer + bonding resin)',
'composition': 'Acidic methacrylate monomers\n(self-etching primer),\nHEMA, Bis-GMA or UDMA,\nWater, acetone/ethanol,\nPhotoinitiator, Fluoride',
'steps': ['1. Self-etch primer (no rinse)', '2. Bonding resin (separate)'],
'step_note': '2 steps. No phosphoric acid; smear layer incorporated; no rinsing. NOT 1-step ⚠',
'advantages': ['No separate etch/rinse', 'Reduced post-op sensitivity', 'Bond strength ~18–20 MPa', 'Enamel bonding slightly weaker than total-etch'],
'examples': 'Clearfil SE Bond (Kuraray),\nAdheSE (Ivoclar),\nOptiBond Solo Plus SE',
'corrected_fields': ['era', 'type'],
},
{
'num': '7th GENERATION',
'era': 'Early–Mid 2000s',
'era_correct': True,
'bg': BG_G7,
'color': ORANGE,
'type': 'Self-etch 1-step system\n(All-in-One; single bottle)',
'composition': 'Acidic monomers (MDP or similar),\nhydrophilic & hydrophobic resins,\nwater, volatile organic solvents;\nall components in single bottle',
'steps': ['1. Apply all-in-one adhesive (no rinse)'],
'step_note': '1 step. Etch + prime + bond in one bottle; light cure. Contains MDP monomer ⚠',
'advantages': ['Simplest technique; fewest steps', 'Reduced chair time', 'Good patient comfort', 'Moderate bond strength'],
'examples': 'G-Bond (GC),\niBond (Heraeus),\nXeno III (Dentsply),\nClearfil S³ Bond',
'corrected_fields': ['era', 'type'],
},
{
'num': '8th GENERATION',
'era': '2010s–Present',
'era_correct': True,
'bg': BG_G8,
'color': STEEL_BLUE,
'type': 'Universal / Multi-mode adhesive\n(Advanced universal)',
'composition': '10-MDP, HEMA, Bis-GMA,\nDimethacrylates, PAC,\nWater, SiO₂ nanoparticles,\nCQ, Ethanol;\nbioactive components',
'steps': ['Multiple modes:', '• Etch & Rinse mode', '• Self-Etch mode', '• Selective-Etch mode'],
'step_note': '1–3 steps depending on mode. Clinician selects per case',
'advantages': ['Bioactive & reparative potential', 'Excellent durability', 'Reduced post-op sensitivity', 'Highly versatile; all substrates'],
'examples': 'Scotchbond Universal Plus (3M),\nClearfil Universal Bond Quick,\nG-Premio Bond (GC)',
'corrected_fields': [],
},
]
# ─── BUILD TABLE DATA ─────────────────────────────────────────────────────────
def build_table():
# Column headers
header_data = [
P('GENERATION', hdr_style),
P('TYPE', hdr_style),
P('COMPOSITION', hdr_style),
P('STEPS', hdr_style),
P('STEP COUNT & MECHANISM', hdr_style),
P('ADVANTAGES / LIMITATIONS', hdr_style),
P('EXAMPLES', hdr_style),
]
rows = [header_data]
row_styles = [] # (bg_color, row_index)
for i, g in enumerate(GENERATIONS):
ri = i + 1 # +1 for header row
# Gen cell
gen_lbl_p = P(f'<b>{g["num"]}</b>', ParagraphStyle('gl', parent=gen_label,
textColor=g['color'], fontSize=9.5))
era_style = ParagraphStyle('ge', parent=gen_era,
textColor=RED_DARK if g['era_correct'] and 'era' in g.get('corrected_fields',[]) else g['color'],
fontSize=8)
era_prefix = '✔ ' if g['era_correct'] else ''
era_p = P(f'<b>{era_prefix}{g["era"]}</b>', era_style)
# Type cell
type_lines = g['type'].split('\n')
type_p = Paragraph(
'<b>' + type_lines[0] + '</b>' +
('<br/><font size="7" color="#555555">' + '<br/>'.join(type_lines[1:]) + '</font>'
if len(type_lines) > 1 else ''),
cell_bold
)
# Composition
comp_p = Paragraph(g['composition'].replace('\n', '<br/>'), cell_norm)
# Steps
step_lines = []
for s in g['steps']:
if s.startswith('•'):
step_lines.append(f'<font color="#555555">{s}</font>')
elif s.endswith(':'):
step_lines.append(f'<b>{s}</b>')
else:
step_lines.append(f'<b>{s}</b>')
step_p = Paragraph('<br/>'.join(step_lines), cell_norm)
note_p = Paragraph(f'<i><font size="7" color="#555">{g["step_note"]}</font></i>', cell_small)
# Advantages
adv_lines = ['• ' + a for a in g['advantages']]
adv_p = Paragraph('<br/>'.join(adv_lines), cell_norm)
# Examples
ex_p = Paragraph('<b>' + g['examples'].replace('\n', '<br/>') + '</b>', cell_bold)
row = [
[gen_lbl_p, era_p],
type_p,
comp_p,
[step_p, note_p],
note_p, # reuse note as step-count col placeholder (replaced below)
adv_p,
ex_p,
]
# Actually build step count separately
sc_text = g['step_note']
sc_p = Paragraph(f'<b><font size="9" color="{g["color"].hexval() if hasattr(g["color"],"hexval") else "#1a3a1a"}">{sc_text.split(".")[0]}.</font></b><br/>'
+ '.'.join(sc_text.split('.')[1:]) if '.' in sc_text else sc_text,
cell_norm)
row_final = [
[gen_lbl_p, era_p],
type_p,
comp_p,
step_p,
sc_p,
adv_p,
ex_p,
]
rows.append(row_final)
row_styles.append((g['bg'], ri))
return rows, row_styles
# ─── EVOLUTION TIMELINE TABLE ─────────────────────────────────────────────────
EVO_DATA = [
('Gen 1', 'Enamel\nAdhesion', 'Late 1960s–\nEarly 1970s', 'Acid-etch enamel + simple adhesive. 2-step. Very low bond strength (2–3 MPa). No dentin bonding.', BG_G1, RED_DARK),
('Gen 2', 'Chemical\nBond', 'Late 1970s', 'NPG-GMA. Chelation to dentin calcium. 2-step. Smear layer intact. Low bond strength.', BG_G2, BLUE_DARK),
('Gen 3', 'Smear Layer\nPrimer', 'Late 1970s–\nLate 1980s', 'Etch + primer + bond. 3-step. Partial smear removal. Scotchbond 2, Gluma.', BG_G3, GREEN_DARK),
('Gen 4', 'Hybrid Layer\n(Total-Etch 3-step)', 'Mid–Late 1980s', '37% H₃PO₄ + Primer + Bond. Full smear layer removal. Hybrid layer. Highest bond (17–25 MPa). Gold standard.', BG_G4, BROWN),
('Gen 5', 'Total-Etch\n& Rinse (2-step)', 'Early 1990s', 'Etch + rinse + single-bottle primer-adhesive. 2-step. Single Bond, Prime & Bond NT.', BG_G5, PURPLE),
('Gen 6', 'Self-Etch\n(2-step)', 'Mid 1990s–\nEarly 2000s', 'Self-etch primer + bonding resin. 2-step. No rinsing. Clearfil SE Bond, AdheSE.', BG_G6, TEAL),
('Gen 7', 'Self-Etch\n(1-step All-in-One)', 'Early–Mid 2000s', 'Single bottle: etch + prime + bond. 1-step. Contains MDP monomer. G-Bond, iBond, Xeno III.', BG_G7, ORANGE),
('Gen 8', 'Universal Bond\n(Multi-mode)', '2010s–Present', 'Multi-mode (total/self/selective etch). Single bottle + MDP. Bioactive. Scotchbond Universal Plus, G-Premio Bond.', BG_G8, STEEL_BLUE),
]
def build_evo_table():
rows = []
for num, lbl, era, desc, bg, col in EVO_DATA:
cell_content = [
P(f'<b>{num}</b>', ParagraphStyle('en', parent=evo_num, textColor=col)),
P(f'<b>{lbl}</b>', ParagraphStyle('el', parent=evo_lbl, textColor=col)),
P(era, ParagraphStyle('ee', parent=evo_era_s, textColor=col)),
P(desc, evo_desc_s),
]
rows.append(cell_content)
return rows
# ─── MAIN DOCUMENT ────────────────────────────────────────────────────────────
def build_pdf(output_path):
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.platypus import NextPageTemplate
import reportlab.platypus as plat
doc = SimpleDocTemplate(
output_path,
pagesize=PAGE,
leftMargin=12*mm, rightMargin=12*mm,
topMargin=10*mm, bottomMargin=10*mm,
title='Dentin Bonding Agent – Corrected Infographic',
)
story = []
# ── HEADER BLOCK ──
# Use a table to create dark green header
header_table_data = [[
P('INDEX INSTITUTE OF DENTAL SCIENCES', title_style),
], [
P('DEPARTMENT OF CONSERVATIVE DENTISTRY AND ENDODONTICS', subtitle_style),
]]
ht = Table(header_table_data, colWidths=[W - 24*mm])
ht.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_GREEN),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
story.append(ht)
# Title banner
banner_data = [[P('DENTIN BONDING AGENT', banner_style)]]
bt = Table(banner_data, colWidths=[W - 24*mm])
bt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), GOLD),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('BOX', (0,0), (-1,-1), 1.5, DARK_GREEN),
]))
story.append(bt)
story.append(Spacer(1, 3*mm))
# Definition box
defn_data = [[P('A dentin bonding agent is a material used to achieve adhesion between restorative materials and dentin<br/>by forming a micromechanical and/or chemical bond with the tooth structure.', defn_style)]]
dt = Table(defn_data, colWidths=[W - 24*mm])
dt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), LIGHT_GREEN),
('BOX', (0,0), (-1,-1), 1.5, DARK_GREEN),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 10),
('RIGHTPADDING', (0,0), (-1,-1), 10),
]))
story.append(dt)
story.append(Spacer(1, 2*mm))
# Correction warning
warn_data = [[P('⚠ CORRECTED VERSION — Generation eras, type classifications, step counts, and example attributions corrected per established literature. '
'Key fixes: accurate decade assignment; correct step-system labels (total-etch vs self-etch); '
'NPG-GMA moved to 2nd generation; bond strength corrected for early generations; 4th gen restored as 3-step gold standard; '
'5th gen correctly labeled total-etch (not self-etch); 7th gen labeled 1-step all-in-one (not universal).', warn_style)]]
wt = Table(warn_data, colWidths=[W - 24*mm])
wt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), WARN_BG),
('BOX', (0,0), (-1,-1), 1.5, GOLD),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 8),
('RIGHTPADDING', (0,0), (-1,-1), 8),
]))
story.append(wt)
story.append(Spacer(1, 3*mm))
# ── MAIN TABLE ──
rows, row_styles = build_table()
# Col widths (total available ~A3 landscape minus margins ≈ 377mm)
cw = W - 24*mm
col_widths = [
cw * 0.09, # Generation
cw * 0.11, # Type
cw * 0.17, # Composition
cw * 0.13, # Steps
cw * 0.14, # Step count
cw * 0.18, # Advantages
cw * 0.18, # Examples
]
mt = Table(rows, colWidths=col_widths, repeatRows=1)
ts = [
# Header
('BACKGROUND', (0,0), (-1,0), MEDIUM_GREEN),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 9),
('ALIGN', (0,0), (-1,0), 'CENTER'),
('VALIGN', (0,0), (-1,0), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,0), 6),
('BOTTOMPADDING', (0,0), (-1,0), 6),
# All cells
('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#4a8a4a')),
('VALIGN', (0,1), (-1,-1), 'TOP'),
('TOPPADDING', (0,1), (-1,-1), 5),
('BOTTOMPADDING', (0,1), (-1,-1), 5),
('LEFTPADDING', (0,1), (-1,-1), 5),
('RIGHTPADDING', (0,1), (-1,-1), 5),
]
# Row backgrounds
for bg, ri in row_styles:
ts.append(('BACKGROUND', (0, ri), (-1, ri), bg))
# Gen column center-align
for ri in range(1, 9):
ts.append(('ALIGN', (0, ri), (0, ri), 'CENTER'))
ts.append(('VALIGN', (0, ri), (0, ri), 'MIDDLE'))
mt.setStyle(TableStyle(ts))
story.append(mt)
story.append(Spacer(1, 4*mm))
# ── EVOLUTION TIMELINE ──
evo_title_data = [[P('EVOLUTION OF DENTIN BONDING AGENTS — 8 GENERATIONS (CORRECTED TIMELINE)', evo_title_style)]]
et_title = Table(evo_title_data, colWidths=[W - 24*mm])
et_title.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#f5f5e8')),
('BOX', (0,0), (-1,-1), 1.5, GOLD),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
]))
story.append(et_title)
evo_rows = build_evo_table()
# Flatten into single row with 8 cells (one per gen)
evo_row_data = [[cell for cell in evo_rows]]
# flatten: each 'cell' is a list of paragraphs
flat_cells = []
for cell in evo_rows:
flat_cells.append(cell)
single_row = [flat_cells]
evo_cw = (W - 24*mm) / 8
evo_table = Table([flat_cells], colWidths=[evo_cw] * 8)
evo_ts = [
('VALIGN', (0,0), (-1,-1), 'TOP'),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 4),
('RIGHTPADDING', (0,0), (-1,-1), 4),
('GRID', (0,0), (-1,-1), 0.8, GOLD),
]
# Background per cell
bgs = [BG_G1, BG_G2, BG_G3, BG_G4, BG_G5, BG_G6, BG_G7, BG_G8]
borders = [RED_DARK, BLUE_DARK, GREEN_DARK, BROWN, PURPLE, TEAL, ORANGE, STEEL_BLUE]
for i, (bg, bc) in enumerate(zip(bgs, borders)):
evo_ts.append(('BACKGROUND', (i,0), (i,0), bg))
evo_ts.append(('BOX', (i,0), (i,0), 1.5, bc))
evo_table.setStyle(TableStyle(evo_ts))
story.append(evo_table)
story.append(Spacer(1, 3*mm))
# ── FOOTER ──
footer_data = [[
[P('GUIDED BY', foot_hdr), P('Dr. Suparna G. Saha', foot_style),
P('Dr. Aruna Kanaparthy', foot_style), P('Dr. Shefali Singh', foot_style)],
[P('PRESENTED BY', foot_hdr),
P('Dr. Shakti Singh | Dr. Katya Pandey', foot_style),
P('Dr. Ankita Grace Lal | Dr. Mrinalini Chaddha', foot_style)],
[P('STUDENTS', foot_hdr),
P('Taniya Sirodiya (22059) · Vidyut Parmar (22062)', foot_style),
P('Vanshika Patidar (22060) · Vijeta Patil (22063)', foot_style),
P('Tanishka Soni (22058) · Vanshita Gupta (22061)', foot_style),
P('Shweta Kumari (22057) · Yashi Sharma (22064)', foot_style)],
[P('Index Institute of Dental Sciences', ParagraphStyle('fr', parent=foot_style, fontSize=7.5, textColor=colors.HexColor('#cccccc'))),
P('Dept. of Conservative Dentistry & Endodontics', ParagraphStyle('fr2', parent=foot_style, fontSize=7.5, textColor=colors.HexColor('#cccccc'))),
P('CORRECTED VERSION', ParagraphStyle('frh', parent=foot_style, fontSize=9, textColor=GOLD, fontName='Helvetica-Bold'))],
]]
ft = Table(footer_data, colWidths=[cw*0.22, cw*0.28, cw*0.32, cw*0.18])
ft.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_GREEN),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 10),
('RIGHTPADDING', (0,0), (-1,-1), 10),
('LINEAFTER', (0,0), (2,0), 0.5, colors.HexColor('#4a8a4a')),
]))
story.append(ft)
doc.build(story)
print(f'PDF generated: {output_path}')
if __name__ == '__main__':
build_pdf('/home/daytona/workspace/dentin-bonding-infographic/Dentin_Bonding_Agent_Corrected.pdf')
cd /home/daytona/workspace/dentin-bonding-infographic && python3 generate_infogr…
ls -lh /home/daytona/workspace/dentin-bonding-infographic/
Dentin Bonding Agent Corrected
PDF Document · PDF
index
HTML File · HTML
| Generation | Original Poster | Corrected Version |
|---|---|---|
| 1st Gen | 1980s; "High bond strength"; NPG-GMA listed as example | Late 1960s-Early 1970s; Very LOW bond strength (2-3 MPa); copal/polyurethane adhesives; NPG-GMA moved to 2nd gen |
| 2nd Gen | 1990s; "Total-etch 3-step" | Late 1970s; Chemical bond/chelation, 2-step, smear layer intact; NPG-GMA correctly placed here |
| 3rd Gen | 1990s; "Total-etch 2-step" | Late 1970s-Late 1980s; Smear layer modifier, 3-step, separate enamel/dentin bonding |
| 4th Gen | 2000s; "All-in-one single bottle" | Mid-Late 1980s; Total-etch 3-step (gold standard) - separate etchant + primer + bond |
| 5th Gen | 2000s; "Self-etch 2-step" | Early 1990s; Total-etch 2-step (single-bottle primer-adhesive; still requires rinsing) |
| 6th Gen | 2000s; "Self-etch 1-step" | Mid 1990s-Early 2000s; Self-etch 2-step (self-etch primer + separate bonding resin) |
| 7th Gen | 2010s; "Universal adhesive; no MDP" | Early-Mid 2000s; Self-etch 1-step all-in-one; contains MDP functional monomer |
| 8th Gen | No significant error | 2010s-Present; Universal / multi-mode (confirmed) |