Lefort fractures
LeFort fractures classification types management
"LeFort fracture" OR "Le Fort fracture" midface
https://www.ncbi.nlm.nih.gov/books/NBK526060

LeFort IV (described in some texts) includes all features of LeFort III plus involvement of the frontal bone/supraorbital bar.
| Feature | LeFort I | LeFort II | LeFort III |
|---|---|---|---|
| Mobile segment | Hard palate + teeth only | Hard palate + nose | Entire midface |
| Periorbital ecchymosis | No | Yes (bilateral) | Yes (bilateral) |
| CSF rhinorrhea | No | Possible | Common |
| Infraorbital anesthesia | No | Yes | Yes |
| Diplopia | No | Possible | Possible |
| Dish face deformity | No | No | Yes |
Make a pdf of it
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /home/daytona/workspace/lefort-fractures
~/lefort-fractures/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, Image as RLImage
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
import urllib.request
import os
OUTPUT = "/home/daytona/workspace/lefort-fractures/LeFort_Fractures.pdf"
IMG_URL = "https://cdn.orris.care/cdss_images/294182db9b386166ae3d7afd0e1a5dcbe2aff7662cec878c34c29facf90c7232.png"
IMG_PATH = "/home/daytona/workspace/lefort-fractures/lefort_diagram.png"
# Download image
try:
urllib.request.urlretrieve(IMG_URL, IMG_PATH)
print("Image downloaded.")
except Exception as e:
print(f"Image download failed: {e}")
IMG_PATH = None
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm
)
W, H = A4
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
'Title', parent=styles['Title'],
fontSize=22, spaceAfter=4,
textColor=colors.HexColor('#1a3a5c'),
alignment=TA_LEFT
)
subtitle_style = ParagraphStyle(
'Subtitle', parent=styles['Normal'],
fontSize=11, spaceAfter=12,
textColor=colors.HexColor('#555555'),
alignment=TA_LEFT
)
h1_style = ParagraphStyle(
'H1', parent=styles['Heading1'],
fontSize=14, spaceBefore=14, spaceAfter=4,
textColor=colors.HexColor('#1a3a5c'),
borderPad=4
)
h2_style = ParagraphStyle(
'H2', parent=styles['Heading2'],
fontSize=12, spaceBefore=10, spaceAfter=3,
textColor=colors.HexColor('#2c5f8a')
)
body_style = ParagraphStyle(
'Body', parent=styles['Normal'],
fontSize=10, leading=15, spaceAfter=6,
alignment=TA_JUSTIFY
)
bullet_style = ParagraphStyle(
'Bullet', parent=styles['Normal'],
fontSize=10, leading=14, spaceAfter=3,
leftIndent=16, firstLineIndent=-10
)
caption_style = ParagraphStyle(
'Caption', parent=styles['Normal'],
fontSize=8, leading=11, spaceAfter=6,
textColor=colors.HexColor('#555555'),
alignment=TA_CENTER
)
note_style = ParagraphStyle(
'Note', parent=styles['Normal'],
fontSize=9, leading=13, spaceAfter=6,
textColor=colors.HexColor('#333333'),
backColor=colors.HexColor('#f0f4f8'),
borderPad=6, leftIndent=6, rightIndent=6
)
story = []
# ── TITLE BLOCK ──────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("LeFort Fractures", title_style))
story.append(Paragraph("Classification · Clinical Features · Management", subtitle_style))
story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3a5c'), spaceAfter=10))
# ── INTRODUCTION ─────────────────────────────────────────────────────────────
story.append(Paragraph("Introduction", h1_style))
story.append(Paragraph(
"LeFort fractures are classified patterns of midface fractures first described in 1901 by Rene LeFort of Lille, "
"France, who determined common lines of fracture after cadaveric experiments. All three types share one defining "
"anatomical feature: <b>involvement of the pterygoid plates of the sphenoid bone</b>. They typically result from "
"high-energy trauma such as motor vehicle accidents, falls, or assaults.",
body_style
))
# ── DIAGRAM ──────────────────────────────────────────────────────────────────
if IMG_PATH and os.path.exists(IMG_PATH):
img = RLImage(IMG_PATH, width=9*cm, height=10.5*cm)
img.hAlign = 'CENTER'
story.append(img)
story.append(Paragraph(
"Figure 1. LeFort fracture lines: I (lower horizontal), II (pyramidal), III (craniofacial dysjunction).<br/>"
"Source: Tintinalli's Emergency Medicine.",
caption_style
))
story.append(Spacer(1, 0.3*cm))
# ── CLASSIFICATION ────────────────────────────────────────────────────────────
story.append(Paragraph("Classification", h1_style))
# LeFort I
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#cccccc'), spaceAfter=4))
story.append(Paragraph("LeFort I - Horizontal (Alveolar)", h2_style))
bullets_I = [
"Horizontal fracture passing <b>above the floor of the nose</b>, above the apices of the maxillary teeth.",
"Mobilizes the hard palate, maxillary alveolar process, lower third of the pterygoid plates, and parts of the palatine bones.",
"All three walls of the maxillary sinus are disrupted; bilateral fractures also involve the nasal septum.",
"<b>Mechanism:</b> low force directed downward just below the nose, above the teeth.",
"<b>Clinical sign:</b> only the hard palate and teeth move - 'like a loose upper denture'; swollen upper lip; anterior open bite malocclusion; buccal vestibule ecchymosis.",
]
for b in bullets_I:
story.append(Paragraph(f"• {b}", bullet_style))
story.append(Spacer(1, 0.2*cm))
# LeFort II
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#cccccc'), spaceAfter=4))
story.append(Paragraph("LeFort II - Pyramidal", h2_style))
bullets_II = [
"Begins at the junction of the thick upper nasal bone, crosses the <b>medial orbital wall</b> (including the lacrimal bone), passes below the zygomaticomaxillary suture, crosses the lateral antral wall, and runs posteriorly through the pterygoid plates.",
"Involves the <b>inferior orbital rim and floor</b>; the fractured segment includes the maxilla and nose together.",
"<b>Mechanism:</b> trauma to the lower or mid maxilla.",
"<b>Clinical signs:</b> mobility of the hard palate AND nose as one unit; bilateral periorbital edema/ecchymosis; epistaxis; possible CSF rhinorrhea; diplopia; infraorbital nerve hypoesthesia extending to the upper lip.",
]
for b in bullets_II:
story.append(Paragraph(f"• {b}", bullet_style))
story.append(Spacer(1, 0.2*cm))
# LeFort III
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#cccccc'), spaceAfter=4))
story.append(Paragraph("LeFort III - Craniofacial Dysjunction", h2_style))
bullets_III = [
"Fracture line parallels the skull base, <b>completely separating the midfacial skeleton from the cranium</b>.",
"Passes through the base of the nose, ethmoid bone, orbital plates, lesser wing of sphenoid, pterygomaxillary fissure, and frontozygomatic suture; zygomatic arches are fractured.",
"<b>Always involves the naso-orbito-ethmoid (NOE) complex.</b> The cribriform plate may or may not be fractured.",
"<b>Mechanism:</b> massive force to the midface.",
"<b>Clinical signs:</b> entire face shifts with globes held only by the optic nerve; characteristic 'dish face deformity' (facial convexity becomes concave); malocclusion with maxillary incisors no longer overlapping mandibular incisors.",
"<b>LeFort IV</b> (some classifications): LeFort III features plus involvement of the frontal bone/supraorbital bar.",
]
for b in bullets_III:
story.append(Paragraph(f"• {b}", bullet_style))
story.append(Spacer(1, 0.3*cm))
# ── PHYSICAL EXAM TIP ─────────────────────────────────────────────────────────
story.append(Paragraph(
"<b>Bedside Test:</b> Grasp the upper incisors and gently rock while stabilizing the forehead. "
"Movement of the upper alveolar ridge alone = LeFort I; movement of the midface and nose = LeFort II; "
"movement of the entire face including the orbits = LeFort III.",
note_style
))
story.append(Spacer(1, 0.3*cm))
# ── COMPARISON TABLE ──────────────────────────────────────────────────────────
story.append(Paragraph("Clinical Features at a Glance", h1_style))
table_data = [
[Paragraph("<b>Feature</b>", body_style),
Paragraph("<b>LeFort I</b>", body_style),
Paragraph("<b>LeFort II</b>", body_style),
Paragraph("<b>LeFort III</b>", body_style)],
["Mobile segment", "Hard palate + teeth", "Hard palate + nose", "Entire midface"],
["Periorbital ecchymosis", "No", "Yes (bilateral)", "Yes (bilateral)"],
["CSF rhinorrhea", "No", "Possible", "Common"],
["Infraorbital anesthesia", "No", "Yes", "Yes"],
["Diplopia", "No", "Possible", "Possible"],
["Dish face deformity", "No", "No", "Yes"],
["NOE involvement", "No", "No", "Yes (always)"],
]
col_widths = [4.5*cm, 3.8*cm, 3.8*cm, 3.8*cm]
tbl = Table(table_data, colWidths=col_widths, repeatRows=1)
tbl.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 9),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f5f8fc'), colors.white]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#aaaaaa')),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
]))
story.append(tbl)
story.append(Spacer(1, 0.4*cm))
# ── ANATOMY: BUTTRESSES ───────────────────────────────────────────────────────
story.append(Paragraph("Facial Buttresses", h1_style))
story.append(Paragraph(
"Vertical buttresses resist anteroposterior forces; horizontal buttresses resist superoinferior forces. "
"All LeFort fractures disrupt the <b>pterygomaxillary buttress</b> (the only one typically not fixated due to its deep location). "
"LeFort II additionally disrupts the <b>inferior orbital rim</b>; LeFort III violates the <b>zygomatic arch</b>. "
"Buttress anatomy forms the roadmap for surgical reconstruction.",
body_style
))
# ── IMAGING ───────────────────────────────────────────────────────────────────
story.append(Paragraph("Imaging", h1_style))
story.append(Paragraph(
"CT of the face with axial and coronal slices plus 3D reconstruction is the gold standard. "
"Pure LeFort patterns are rare in high-energy trauma - most patients have mixed, asymmetric, or comminuted "
"patterns combining multiple LeFort levels with zygomatic and nasoethmoid fractures.",
body_style
))
# ── EMERGENCY MANAGEMENT ──────────────────────────────────────────────────────
story.append(Paragraph("Emergency Management", h1_style))
story.append(Paragraph("1. Airway (Highest Priority)", h2_style))
story.append(Paragraph(
"Massive hemorrhage, posterior impaction of the maxilla, and disrupted anatomy all threaten the airway.",
body_style
))
airway_bullets = [
"<b>Nasotracheal intubation is CONTRAINDICATED in LeFort II and III</b> - risk of cribriform plate traversal; the tube can enter the cranial vault or introduce infection causing meningitis. Even bag-mask positive pressure can force air into the skull.",
"Preferred: video laryngoscopy or flexible fiberoptic bronchoscopy; surgical airway (cricothyrotomy) if conventional intubation fails.",
"Cervical spine must be protected until cleared (C-spine injury ~1.2% of high-velocity facial trauma; intracranial injury up to 88.7%).",
]
for b in airway_bullets:
story.append(Paragraph(f"• {b}", bullet_style))
story.append(Paragraph("2. Hemorrhage Control", h2_style))
hemorrhage_bullets = [
"Anterior and posterior nasal packing (epistats).",
"Oral packing for fractures involving the hard palate.",
"Manual forward traction on an impacted maxilla: hook index and middle fingers behind the soft palate to pull the maxilla anteriorly.",
]
for b in hemorrhage_bullets:
story.append(Paragraph(f"• {b}", bullet_style))
story.append(Paragraph("3. Additional Measures", h2_style))
additional_bullets = [
"IV antibiotics (open fractures communicate with sinuses and oral cavity).",
"Admission for management of associated injuries.",
"Ophthalmology consult for diplopia or visual changes.",
"Neurosurgery consult if CSF leak or intracranial injury.",
]
for b in additional_bullets:
story.append(Paragraph(f"• {b}", bullet_style))
story.append(Spacer(1, 0.3*cm))
# ── SURGICAL REPAIR ───────────────────────────────────────────────────────────
story.append(Paragraph("Surgical Repair", h1_style))
surgical_bullets = [
"<b>Reduction:</b> digital pressure plus traction via arch bars or interdental wires; Rowe maxillary disimpaction forceps for impacted maxillae.",
"<b>Fixation:</b> internal fixation with 1.3-1.5 mm low-profile miniplates placed along the buttresses (has replaced external fixation); provides satisfactory stabilization.",
"<b>Access:</b> gingivobuccal incision (with adequate mucosa cuff to isolate plates from the mouth); subperiosteal elevation preserving the infraorbital nerve.",
"LeFort II requires reduction and fixation of the infraorbital rim.",
"<b>Goal:</b> restoration of dental occlusion is the key surgical endpoint.",
]
for b in surgical_bullets:
story.append(Paragraph(f"• {b}", bullet_style))
# ── SOURCES ───────────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc'), spaceAfter=6))
story.append(Paragraph("Sources", ParagraphStyle('SourceHead', parent=styles['Normal'],
fontSize=9, textColor=colors.HexColor('#555555'), fontName='Helvetica-Bold')))
sources = [
"Barash, Cullen & Stoelting's Clinical Anesthesia, 9e - Maxillofacial Trauma",
"Tintinalli's Emergency Medicine: A Comprehensive Study - Midfacial Fractures",
"Scott-Brown's Otorhinolaryngology Head & Neck Surgery - Surgical Anatomy",
"StatPearls - Le Fort Fractures (NCBI Bookshelf, NBK526060)",
]
for s in sources:
story.append(Paragraph(f"• {s}", ParagraphStyle('Source', parent=styles['Normal'],
fontSize=8, leading=12, textColor=colors.HexColor('#555555'), leftIndent=12, firstLineIndent=-8)))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/lefort-fractures && python generate_pdf.py
LeFort Fractures
PDF Document · PDF