Lignocaine Different forms

Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Finding Sources
Reading File
Finding Sources
Reading File
Finding Sources
Finding Sources
Reading File
Finding Sources
I now have comprehensive information from multiple authoritative textbooks. Here is the full answer:

Lignocaine (Lidocaine) - Different Forms

Lignocaine (also called lidocaine) is an amide-type local anesthetic and Class Ib antiarrhythmic. It is available in a remarkably wide range of formulations, each designed for a specific clinical purpose.

1. Injectable Solutions (Parenteral)

These are the most widely used forms.
ConcentrationStrengthUse
0.5%5 mg/mLInfiltration, regional blocks
1%10 mg/mLInfiltration, nerve blocks, epidural
1.5%15 mg/mLEpidural, nerve blocks
2%20 mg/mLEpidural, dental, nerve blocks
4%40 mg/mLTopical (NOT for injection)
5%50 mg/mLSpinal (heavy / hyperbaric)

With Epinephrine (adrenaline)

  • 1:100,000 epi: 1%, 2% lignocaine - prolongs action, reduces absorption
  • 1:200,000 epi: 0.5%, 1%, 1.5%, 2% lignocaine - wider use including digital blocks (with caution)
Maximum dose without epi: 4.5 mg/kg (up to 300 mg); with epi: 7 mg/kg (up to 500 mg)
  • Harriet Lane Handbook, p. 1212; Pye's Surgical Handicraft

2. IV Infusion (Antiarrhythmic Use)

Pre-mixed in D5W for cardiac use (Class Ib antiarrhythmic - suppresses ventricular ectopy):
  • 0.4% (4 mg/mL) - in 250 mL or 500 mL bags
  • 0.8% (8 mg/mL) - in 250 mL bags
  • IV bolus: 1-1.5 mg/kg; maintenance infusion: 1-4 mg/min
  • Used for hemodynamically stable VT, post-ROSC after VF
  • Tintinalli's Emergency Medicine

3. Topical Forms

Ointment

  • 4% (50 g), 5% (30, 50 g)
  • Applied to skin or mucous membranes

Cream (Topical)

  • 3% (30, 85 g)
  • 4% - LMX-4 [OTC] (5-45 g) - intact skin anesthesia
  • 5% - LMX-5 [OTC] (15-30 g) - intact skin / anorectal
  • Harriet Lane Handbook, p. 1212

Rectal Cream

  • 5% (15-30 g) - for anorectal pain; contains benzyl alcohol

Gel (External)

  • 2%, 3%, 4%, 5% (5-113 g sizes)
  • Applied to mucous membranes, urethral instillation, wound surfaces, nasogastric tube lubrication
  • May contain benzyl alcohol or EDTA

Lotion

  • 3% (118, 177 mL), 4% (88 mL)

Solution (External/Topical)

  • 2% oral solution (15-100 mL) - for mouth and throat (e.g., before endoscopy, teething)
  • 4% oral solution (4 mL)
  • 4% external solution (50 mL) - may contain parabens

Aerosol Spray

  • 4% (104 mL) - used for topical anesthesia of the oropharynx, airway, and mucous membranes
  • Also available as 10% pump spray (e.g., Xylocaine 10%) for rapid mucosal anesthesia during intubation

4. Transdermal Patch

ProductStrengthNotes
Lidoderm5% (700 mg/patch)For postherpetic neuralgia (PHN); 1-3 patches, 12h on/12h off
Gen7T Plus3.5%May contain menthol
OTC patches4%May contain menthol, capsaicin, methyl salicylate
  • Primary use: neuropathic pain (PHN), localized musculoskeletal pain
  • Morgan & Mikhail's Clinical Anesthesiology, p. 2036; Goodman & Gilman's

5. Combination Products

EMLA Cream (Eutectic Mixture of Local Anesthetics)

  • Lidocaine 2.5% + Prilocaine 2.5%
  • Forms a eutectic mixture with a lower melting point than either component alone, allowing penetration of intact keratinized skin
  • Applied under occlusive dressing 45-60 min before venipuncture; widely used in pediatrics
  • Katzung's Basic and Clinical Pharmacology; Miller's Anesthesia

Lidocaine + Tetracaine / Triple-mix gels

  • Compounded topical preparations (e.g., 10% lidocaine + 10% prilocaine + 4% tetracaine "Profound") used for deep mucosal anesthesia in emergency procedures

6. Summary: Techniques by Form

Route / TechniqueConcentration Used
Topical (skin/mucosa)2-5%
Local infiltration0.5-1%
Peripheral nerve block1-2%
Epidural1-2%
Spinal (intrathecal)5% (hyperbaric)
IV regional (Bier block)0.5%
IV antiarrhythmic0.4-0.8% infusion
Transdermal patch3.5-5%
  • Morgan & Mikhail's Clinical Anesthesiology, Table 16-3, p. 492

Key Notes

  • Brand names: Xylocaine, Lidoderm, LMX-4, LMX-5, Gen7T Plus, Lidocaine Pain Relief, Xylotox, Lidothesin
  • Duration: Medium (intermediate) - generally 1-2 hours for nerve blocks, extendable with epinephrine
  • Metabolism: Hepatic (CYP enzymes) - reduce dose/infusion rate by 50% in liver disease or patients >70 years
  • Toxicity (dose-dependent, NOT allergic): perioral tingling, tinnitus, dizziness, drowsiness, seizures, cardiac depression (widening QRS, hypotension)
  • Lignocaine causes vasodilation at the injection site (unlike mepivacaine which causes mild vasoconstriction), hence why it has a shorter duration than mepivacaine when used without epinephrine
  • Pye's Surgical Handicraft; Katzung's Basic and Clinical Pharmacology

Make Pdf

Reading File
Running Command

mkdir -p /tmp/workspace/lignocaine && ls /tmp/workspace/lignocaine/

Writing File

~/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 &amp; 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 &gt;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)
Running Command

python /tmp/workspace/lignocaine/generate_pdf.py

Your PDF is ready! Here's the download link:

Lignocaine Different Forms

PDF Document · PDF

The PDF includes all 7 sections in a clean, colour-coded clinical reference layout:
  1. Injectable Solutions - concentrations (0.5%–5%), plain and with epinephrine, max doses
  2. IV Infusion (Antiarrhythmic) - D5W pre-mix concentrations and dosing protocol
  3. Topical Forms - ointment, cream, gel, lotion, solution, spray with sizes
  4. Transdermal Patch - Lidoderm, Gen7T Plus, OTC patches
  5. Combination Products - EMLA cream, triple-mix gels
  6. Techniques vs. Concentration table - quick-reference by route
  7. Key Clinical Notes - mechanism, toxicity, metabolism, contraindications
Sources cited from 7 major textbooks at the bottom.
This is a shared conversation. Sign in to Orris to start your own chat.