Lignocaine Different forms
| Concentration | Strength | Use |
|---|---|---|
| 0.5% | 5 mg/mL | Infiltration, regional blocks |
| 1% | 10 mg/mL | Infiltration, nerve blocks, epidural |
| 1.5% | 15 mg/mL | Epidural, nerve blocks |
| 2% | 20 mg/mL | Epidural, dental, nerve blocks |
| 4% | 40 mg/mL | Topical (NOT for injection) |
| 5% | 50 mg/mL | Spinal (heavy / hyperbaric) |
Maximum dose without epi: 4.5 mg/kg (up to 300 mg); with epi: 7 mg/kg (up to 500 mg)
| Product | Strength | Notes |
|---|---|---|
| Lidoderm | 5% (700 mg/patch) | For postherpetic neuralgia (PHN); 1-3 patches, 12h on/12h off |
| Gen7T Plus | 3.5% | May contain menthol |
| OTC patches | 4% | May contain menthol, capsaicin, methyl salicylate |
| Route / Technique | Concentration Used |
|---|---|
| Topical (skin/mucosa) | 2-5% |
| Local infiltration | 0.5-1% |
| Peripheral nerve block | 1-2% |
| Epidural | 1-2% |
| Spinal (intrathecal) | 5% (hyperbaric) |
| IV regional (Bier block) | 0.5% |
| IV antiarrhythmic | 0.4-0.8% infusion |
| Transdermal patch | 3.5-5% |
Make Pdf
mkdir -p /tmp/workspace/lignocaine && ls /tmp/workspace/lignocaine/
~/lignocaine/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import PageBreak
OUTPUT = "/tmp/workspace/lignocaine/Lignocaine_Different_Forms.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm
)
styles = getSampleStyleSheet()
# Custom styles
BLUE_DARK = colors.HexColor("#1a3a5c")
BLUE_MID = colors.HexColor("#1e6091")
BLUE_LIGHT = colors.HexColor("#d6eaf8")
BLUE_PALE = colors.HexColor("#eaf4fb")
ORANGE = colors.HexColor("#e67e22")
WHITE = colors.white
GREY_TEXT = colors.HexColor("#333333")
TABLE_HEAD = colors.HexColor("#1e6091")
title_style = ParagraphStyle(
"TitleStyle", parent=styles["Title"],
fontSize=22, textColor=WHITE, spaceAfter=6,
alignment=TA_CENTER, fontName="Helvetica-Bold"
)
subtitle_style = ParagraphStyle(
"SubtitleStyle", parent=styles["Normal"],
fontSize=11, textColor=colors.HexColor("#d6eaf8"),
spaceAfter=4, alignment=TA_CENTER, fontName="Helvetica"
)
h1_style = ParagraphStyle(
"H1", parent=styles["Heading1"],
fontSize=13, textColor=WHITE, spaceBefore=10, spaceAfter=4,
fontName="Helvetica-Bold", backColor=BLUE_MID,
borderPad=(4, 6, 4, 6), leading=18
)
h2_style = ParagraphStyle(
"H2", parent=styles["Heading2"],
fontSize=11, textColor=BLUE_DARK, spaceBefore=8, spaceAfter=3,
fontName="Helvetica-Bold"
)
body_style = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=9.5, textColor=GREY_TEXT, spaceAfter=4,
fontName="Helvetica", leading=14
)
bullet_style = ParagraphStyle(
"Bullet", parent=styles["Normal"],
fontSize=9.5, textColor=GREY_TEXT, spaceAfter=3,
fontName="Helvetica", leftIndent=14, leading=14,
bulletIndent=4
)
note_style = ParagraphStyle(
"Note", parent=styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#555555"),
spaceAfter=3, fontName="Helvetica-Oblique", leading=12,
leftIndent=10
)
source_style = ParagraphStyle(
"Source", parent=styles["Normal"],
fontSize=7.5, textColor=colors.HexColor("#777777"),
spaceAfter=2, fontName="Helvetica-Oblique"
)
def section_header(text):
return [
Spacer(1, 0.3*cm),
Table([[Paragraph(text, h1_style)]],
colWidths=[17*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), BLUE_MID),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [4]),
])),
Spacer(1, 0.2*cm),
]
def make_table(header_row, data_rows, col_widths=None):
col_widths = col_widths or []
table_data = [header_row] + data_rows
t = Table(table_data, colWidths=col_widths if col_widths else None, hAlign="LEFT")
style = TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 9),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, BLUE_PALE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaccee")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS",(0,0), (-1,-1), [None]),
])
# Re-apply alternating row colors properly
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 9),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaccee")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
for i in range(1, len(table_data)):
bg = BLUE_PALE if i % 2 == 0 else WHITE
t.setStyle(TableStyle([("BACKGROUND", (0,i), (-1,i), bg)]))
return t
# ─── Build content ───────────────────────────────────────────────────────────
story = []
# ── Cover Banner ──
banner = Table(
[[Paragraph("LIGNOCAINE (LIDOCAINE)", title_style)],
[Paragraph("Different Forms & Formulations — Clinical Reference", subtitle_style)]],
colWidths=[17*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), BLUE_DARK),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("ROUNDEDCORNERS", [6]),
])
)
story.append(banner)
story.append(Spacer(1, 0.4*cm))
# Classification box
class_box = Table(
[[Paragraph(
"<b>Class:</b> Amide-type Local Anesthetic & Class Ib Antiarrhythmic | "
"<b>Brands:</b> Xylocaine, Lidoderm, LMX-4, LMX-5, Xylotox, EMLA | "
"<b>Duration:</b> Intermediate (medium)",
ParagraphStyle("ClassBox", parent=styles["Normal"], fontSize=9,
textColor=BLUE_DARK, fontName="Helvetica", leading=14)
)]],
colWidths=[17*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), BLUE_LIGHT),
("BOX", (0,0), (-1,-1), 1, BLUE_MID),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
])
)
story.append(class_box)
story.append(Spacer(1, 0.3*cm))
# ── 1. Injectable Solutions ──
story += section_header("1. Injectable Solutions (Parenteral)")
story.append(Paragraph(
"The most commonly used forms. Plain solutions or combined with epinephrine (adrenaline) to "
"prolong action and reduce systemic absorption.",
body_style
))
story.append(Spacer(1, 0.15*cm))
inj_table = make_table(
["Concentration", "Strength", "Primary Use"],
[
["0.5%", "5 mg/mL", "Infiltration, IV regional (Bier block)"],
["1%", "10 mg/mL", "Infiltration, peripheral nerve blocks, epidural"],
["1.5%", "15 mg/mL", "Epidural anesthesia, nerve blocks"],
["2%", "20 mg/mL", "Epidural, dental blocks, nerve blocks"],
["4%", "40 mg/mL", "Topical use ONLY — NOT for injection"],
["5%", "50 mg/mL", "Spinal (intrathecal) — hyperbaric preparation"],
],
col_widths=[3.5*cm, 3.5*cm, 10*cm]
)
story.append(inj_table)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>With Epinephrine:</b>", h2_style))
epi_table = make_table(
["Preparation", "Lidocaine Concentrations Available"],
[
["With 1:100,000 epinephrine", "1%, 2%"],
["With 1:200,000 epinephrine", "0.5%, 1%, 1.5%, 2%"],
],
col_widths=[7*cm, 10*cm]
)
story.append(epi_table)
story.append(Spacer(1, 0.15*cm))
dose_box = Table(
[[Paragraph(
"<b>Max Dose (plain):</b> 4.5 mg/kg (up to 300 mg) — do not repeat within 2 hr<br/>"
"<b>Max Dose (with epi):</b> 7 mg/kg (up to 500 mg) — do not repeat within 2 hr",
ParagraphStyle("DoseBox", parent=styles["Normal"], fontSize=9,
textColor=colors.HexColor("#7b241c"), fontName="Helvetica", leading=15)
)]],
colWidths=[17*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#fdf2f2")),
("BOX", (0,0), (-1,-1), 1, ORANGE),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
])
)
story.append(dose_box)
story.append(Paragraph("Source: Harriet Lane Handbook; Pye's Surgical Handicraft", source_style))
# ── 2. IV Infusion (Antiarrhythmic) ──
story += section_header("2. IV Infusion — Antiarrhythmic Use (Class Ib)")
story.append(Paragraph(
"Pre-mixed in 5% Dextrose (D5W) for cardiac use. Reduces automaticity and suppresses "
"ventricular ectopy. Used for hemodynamically stable VT and post-ROSC after VF/pulseless VT.",
body_style
))
story.append(Spacer(1, 0.15*cm))
iv_table = make_table(
["Preparation", "Concentration", "Volume"],
[
["IV Infusion in D5W", "0.4% (4 mg/mL)", "250 mL, 500 mL bags"],
["IV Infusion in D5W", "0.8% (8 mg/mL)", "250 mL bags"],
],
col_widths=[5.5*cm, 5.5*cm, 6*cm]
)
story.append(iv_table)
story.append(Spacer(1, 0.15*cm))
for txt in [
"• <b>IV Bolus:</b> 1–1.5 mg/kg; repeat bolus 0.5 mg/kg if rhythm persists",
"• <b>Maintenance infusion:</b> 1–4 mg/min after ROSC",
"• Reduce infusion by 50% in patients with liver disease or age >70 years",
"• Routine post-ROSC use is no longer recommended per 2015 guidelines; may be considered on a case-by-case basis",
]:
story.append(Paragraph(txt, bullet_style))
story.append(Paragraph("Source: Tintinalli's Emergency Medicine", source_style))
# ── 3. Topical Forms ──
story += section_header("3. Topical Forms")
topical_table = make_table(
["Form", "Concentration(s)", "Size / Notes"],
[
["Ointment", "4%, 5%", "50 g / 30–50 g"],
["Cream (topical)", "3%, 4% (LMX-4 OTC), 5% (LMX-5 OTC)", "5–45 g; intact skin anesthesia"],
["Rectal cream", "5%", "15–30 g; contains benzyl alcohol; anorectal pain"],
["Gel (external)", "2%, 3%, 4%, 5%", "5–113 g; urethral instillation, NG tube lubrication, mucosa"],
["Lotion", "3%, 4%", "88–177 mL"],
["Solution (oral)", "2%, 4%", "15–100 mL; mouth/throat, endoscopy prep, teething"],
["Solution (ext.)", "4%", "50 mL; may contain parabens"],
["Aerosol Spray", "4% / 10%", "104 mL; oropharynx, airway, pre-intubation"],
],
col_widths=[3.5*cm, 5.5*cm, 8*cm]
)
story.append(topical_table)
story.append(Paragraph("Source: Harriet Lane Handbook, p. 1212", source_style))
# ── 4. Transdermal Patch ──
story += section_header("4. Transdermal Patch")
story.append(Paragraph(
"Used primarily for neuropathic pain, especially postherpetic neuralgia (PHN). "
"Each patch delivers lidocaine through intact skin over 12 hours.",
body_style
))
story.append(Spacer(1, 0.15*cm))
patch_table = make_table(
["Product", "Strength", "Additional Ingredients", "Notes"],
[
["Lidoderm", "5% (700 mg/patch)", "—", "Rx; 1–3 patches, 12h on/12h off; PHN"],
["Gen7T Plus", "3.5%", "May contain menthol", "Rx; packs of 5/10/15"],
["OTC Lidocaine patches", "4%", "May contain menthol, capsaicin, methyl salicylate", "OTC; musculoskeletal pain"],
],
col_widths=[3.8*cm, 3.2*cm, 5.5*cm, 4.5*cm]
)
story.append(patch_table)
story.append(Paragraph("Source: Morgan & Mikhail's Clinical Anesthesiology, p. 2036; Goodman & Gilman's", source_style))
# ── 5. Combination Products ──
story += section_header("5. Combination Products")
story.append(Paragraph("<b>EMLA Cream (Eutectic Mixture of Local Anesthetics)</b>", h2_style))
story.append(Paragraph(
"Contains <b>Lidocaine 2.5% + Prilocaine 2.5%</b>. The two agents form a eutectic mixture "
"with a lower melting point than either component alone, allowing penetration of intact "
"keratinized skin. Applied under an occlusive dressing 45–60 minutes before venipuncture. "
"Widely used in pediatrics.",
body_style
))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph("<b>Triple-mix / Compounded topical gels</b>", h2_style))
story.append(Paragraph(
"e.g., Profound: 10% Lidocaine + 10% Prilocaine + 4% Tetracaine. Used for deep mucosal "
"anesthesia in emergency procedures (e.g., nasopharyngeal, wound care).",
body_style
))
story.append(Paragraph("Source: Katzung's Basic and Clinical Pharmacology; Miller's Anesthesia", source_style))
# ── 6. Techniques by Form ──
story += section_header("6. Summary: Technique vs. Concentration")
tech_table = make_table(
["Route / Technique", "Concentration Used", "Max Dose"],
[
["Topical (skin/mucosa)", "2–5%", "4.5 mg/kg (up to 300 mg)"],
["Local infiltration", "0.5–1%", "4.5 mg/kg plain; 7 mg/kg with epi"],
["Peripheral nerve block", "1–2%", "4.5 mg/kg plain; 7 mg/kg with epi"],
["Epidural anesthesia", "1–2%", "Varies with volume used"],
["Spinal (intrathecal)", "5%", "Hyperbaric preparation; ~75–100 mg"],
["IV regional (Bier block)", "0.5%", "3 mg/kg"],
["IV antiarrhythmic (infusion)", "0.4–0.8% (in D5W)", "Bolus 1–1.5 mg/kg; infusion 1–4 mg/min"],
["Transdermal patch", "3.5–5%", "Max 3 patches simultaneously (12h on/off)"],
],
col_widths=[5.5*cm, 5*cm, 6.5*cm]
)
story.append(tech_table)
story.append(Paragraph("Source: Morgan & Mikhail's Clinical Anesthesiology, Table 16-3, p. 492", source_style))
# ── 7. Key Clinical Notes ──
story += section_header("7. Key Clinical Notes")
notes = [
("<b>Mechanism:</b>", "Blocks voltage-gated sodium (Na⁺) channels → prevents action potential propagation."),
("<b>Class:</b>", "Amide-type local anesthetic; also Class Ib antiarrhythmic."),
("<b>Onset:</b>", "Rapid. Lignocaine diffuses readily through tissues."),
("<b>Duration:</b>", "Intermediate (medium) — 1–2 hours for nerve blocks; prolonged with epinephrine."),
("<b>Metabolism:</b>", "Hepatic (CYP enzymes). Reduce dose/infusion by 50% in liver disease or age >70 years."),
("<b>Vasoactivity:</b>", "Causes vasodilation at injection site (unlike mepivacaine which causes mild vasoconstriction) → shorter duration than mepivacaine without epinephrine."),
("<b>Toxicity:</b>", "Dose-dependent, NOT allergic. Signs: perioral tingling → tinnitus → dizziness → drowsiness → seizures → cardiac depression (wide QRS, hypotension). Risk increases above 3 mg/kg bolus."),
("<b>Allergy:</b>", "True allergy is extremely rare. Most 'reactions' are vasovagal or epinephrine-mediated or due to overdose."),
("<b>Contraindications:</b>", "Severe SA, AV, or intraventricular block (without pacemaker); hypersensitivity to amide-type local anesthetics."),
]
notes_data = [[Paragraph(k, ParagraphStyle("NoteKey", parent=styles["Normal"],
fontSize=9, fontName="Helvetica-Bold", textColor=BLUE_DARK, leading=14)),
Paragraph(v, ParagraphStyle("NoteVal", parent=styles["Normal"],
fontSize=9, fontName="Helvetica", textColor=GREY_TEXT, leading=14))]
for k, v in notes]
notes_table = Table(notes_data, colWidths=[4.5*cm, 12.5*cm])
notes_table.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 4),
("LINEBELOW", (0,0), (-1,-2), 0.3, colors.HexColor("#ccddee")),
]))
for i in range(0, len(notes_data), 2):
notes_table.setStyle(TableStyle([("BACKGROUND", (0,i), (-1,i), BLUE_PALE)]))
story.append(notes_table)
story.append(Spacer(1, 0.3*cm))
# Footer note
story.append(HRFlowable(width="100%", thickness=0.5, color=BLUE_MID))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
"References: Harriet Lane Handbook (23rd ed.) · Tintinalli's Emergency Medicine · "
"Morgan & Mikhail's Clinical Anesthesiology (7th ed.) · Goodman & Gilman's Pharmacological Basis "
"of Therapeutics · Katzung's Basic & Clinical Pharmacology (16th ed.) · Miller's Anesthesia (10th ed.) · "
"Pye's Surgical Handicraft (22nd ed.)",
ParagraphStyle("Footer", parent=styles["Normal"], fontSize=7.5,
textColor=colors.HexColor("#666666"), fontName="Helvetica-Oblique", leading=11)
))
# ─── Build PDF ───────────────────────────────────────────────────────────────
doc.build(story)
print("PDF created:", OUTPUT)
python /tmp/workspace/lignocaine/generate_pdf.py
Lignocaine Different Forms
PDF Document · PDF