make a case presentation on the case foreign body in the esophagus (chicken bone )
esophageal foreign body management
esophageal foreign body chicken bone management case presentation guidelines
chicken bone foreign body esophagus X-ray CT scan
esophageal foreign body impaction radiograph

This diagnostic image is a posterior-anterior (PA) plain chest radiograph demonstrating an ingested foreign body. A highly radiopaque, 'U'-shaped object is clearly visible in the midline, localized to the upper mediastinum/cervical esophagus region, just superior to the level of the aortic arch. The object features distinct lateral radiopaque projections consistent with metallic clasps of a partial denture. The long axis of the foreign body is oriented vertically within the esophageal lumen. Anatomical landmarks include the trachea, bilateral lung fields with normal vascular markings, the cardiac silhouette, and bony structures including the clavicles, ribs, and cervical-thoracic vertebrae. The image illustrates the clinical challenge of esophageal foreign body impaction, where sharp components like denture clasps increase the risk of mucosal injury or perforation. This visual material is relevant for gastroenterology and emergency medicine education focusing on diagnostic radiology and foreign body management.

Anteroposterior (AP) chest radiograph of a pediatric patient demonstrating significant pulmonary and esophageal pathology. The right lung field exhibits extensive opacification and increased density with visible loculation, consistent with a complex empyema secondary to esophageal perforation. In contrast, the left lung field shows relatively normal aeration with preserved lung markings. Centrally, located slightly to the right of the midline at the level of the mid-thoracic spine, is a distinct, highly radiopaque, circular foreign body. The morphology and location of the object are characteristic of an ingested coin impacted in the esophagus. The mediastinal structures appear obscured by the adjacent right-sided pleural disease. This image serves as a critical diagnostic example of the secondary complications of esophageal foreign body impaction, specifically mediastinitis and loculated empyema in a clinical setting.

This diagnostic image is a posteroanterior (PA) chest radiograph illustrating an accidental foreign body ingestion. Centered in the upper cervical and thoracic inlet region, projecting over the esophagus, is a large, radio-opaque, crucifix-shaped foreign object. The object exhibits high density, consistent with metal, and is oriented with its longitudinal axis slightly oblique to the midline. In addition to the foreign body, the radiograph shows several medical devices: a dual-chamber cardiac pacemaker or implantable cardioverter-defibrillator (ICD) is visible in the left infraclavicular region with leads extending into the cardiac silhouette. Multiple external monitoring leads and a right-sided vascular access device (likely a PICC line or central venous catheter) are also present. The image serves as a clinical example of esophageal foreign body impaction in an adult patient with comorbid cardiovascular conditions. Educational focus includes the recognition of dense radio-opaque objects on X-ray and the anatomical relationships between the esophagus, airway, and mediastinum.

A frontal (anteroposterior) pediatric chest radiograph demonstrating an impacted foreign body. A highly radiopaque, circular, well-defined object, approximately 1.9 cm in diameter and consistent with a coin, is located centrally in the upper mediastinum at the level of the thoracic inlet. The coronal orientation of the coin on this AP view is characteristic of an esophageal location, specifically at the cricopharyngeal area (the first physiological constriction of the esophagus). The surrounding skeletal structures, including the ribs, clavicles, and scapulae, appear intact with normal alignment and no signs of acute fracture. The pulmonary parenchyma is clear, and the cardiomediastinal silhouette is within normal limits for age. This diagnostic image illustrates a common pediatric emergency involving foreign body ingestion and highlights the radiographic features used to differentiate esophageal versus tracheal impaction based on the orientation of the object.

This anterior-posterior (AP) chest radiograph demonstrates a prominent, irregularly shaped radiopaque foreign body in the upper mediastinum, indicated by a black arrow. The structure is located centrally, extending from the level of the thoracic inlet down to the upper thoracic vertebrae (approximately T1-T4), overlying the anatomical path of the esophagus. The foreign body exhibits a complex morphology, consisting of a denser, molded base and thin, curvilinear metallic wires or hooks typical of a dental prosthesis (dentures). Key landmarks include the clavicles and the tracheal air column, which the object partially superimposes. This diagnostic image illustrates a case of accidental foreign body ingestion, highlighting the high radiopacity and sharp features of the prosthetic wires, which pose a clinical risk of esophageal perforation or impaction. The image is a critical tool for medical students and clinicians in identifying non-biological objects and assessing their size and position relative to vital mediastinal structures.
| Feature | Esophageal FB | Airway FB |
|---|---|---|
| Symptoms | Dysphagia, odynophagia, drooling, retrosternal pain | Cough, wheeze, stridor, respiratory distress |
| Onset | Immediate after swallowing | Immediate, often with choking episode |
| Danger | Perforation, mediastinitis | Airway obstruction (acute emergency) |

Create a PDF quick-reference card: Esophageal Foreign Body management algorithm
/tmp/skills/pdf
mkdir -p /tmp/workspace/esophageal-fb-card && ls -la /tmp/workspace/
~/esophageal-fb-card/build_card.py
# -*- coding: utf-8 -*-
"""
Esophageal Foreign Body Management - Quick Reference Card
Single-page A4 clinical algorithm card using ReportLab.
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
PAGE_W, PAGE_H = A4
# ---------- Colors ----------
NAVY = colors.HexColor("#0B3954")
RED = colors.HexColor("#C0392B")
RED_BG = colors.HexColor("#FDEDEC")
ORANGE = colors.HexColor("#D68910")
ORANGE_BG = colors.HexColor("#FEF5E7")
GREEN = colors.HexColor("#1E8449")
GREEN_BG = colors.HexColor("#EAFAF1")
BLUE_BG = colors.HexColor("#EBF5FB")
GREY_BG = colors.HexColor("#F4F6F6")
WHITE = colors.white
DARK = colors.HexColor("#212F3D")
styles = getSampleStyleSheet()
def pstyle(name, size=8.3, leading=10.2, color=DARK, bold=False, align=TA_LEFT, spaceAfter=0):
return ParagraphStyle(
name, parent=styles["Normal"], fontSize=size, leading=leading,
textColor=color, fontName="Helvetica-Bold" if bold else "Helvetica",
alignment=align, spaceAfter=spaceAfter,
)
P_TITLE = pstyle("title", 17, 20, WHITE, True, TA_CENTER)
P_SUB = pstyle("sub", 9.5, 12, WHITE, False, TA_CENTER)
P_HEAD = pstyle("head", 10.5, 13, WHITE, True, TA_LEFT)
P_HEAD_D = pstyle("headd", 10, 12.5, DARK, True, TA_LEFT)
P_BODY = pstyle("body", 8.2, 10.2, DARK, False, TA_LEFT)
P_BODY_B = pstyle("bodyb", 8.2, 10.2, DARK, True, TA_LEFT)
P_SMALL = pstyle("small", 7.3, 9.2, DARK, False, TA_LEFT)
P_SMALL_W = pstyle("smallw", 7.6, 9.6, WHITE, False, TA_LEFT)
P_SMALL_WB= pstyle("smallwb", 7.8, 9.8, WHITE, True, TA_LEFT)
P_FOOT = pstyle("foot", 6.6, 8.4, colors.HexColor("#5D6D7E"), False, TA_LEFT)
P_STEP_NUM= pstyle("stepnum", 11, 13, WHITE, True, TA_CENTER)
def header_bar(text, bg=NAVY, style=P_HEAD, pad=(4,4,4,4)):
t = Table([[Paragraph(text, style)]], colWidths=[None])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LEFTPADDING", (0,0), (-1,-1), pad[0]*mm/mm if False else 6),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
return t
def box(rows_html, bg=GREY_BG, border=colors.HexColor("#BDC3C7"), col_widths=None, pads=3):
"""rows_html: list of [Paragraph,...] rows"""
t = Table(rows_html, colWidths=col_widths)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 0.6, border),
("INNERGRID", (0,0), (-1,-1), 0.4, border),
("LEFTPADDING", (0,0), (-1,-1), pads+2),
("RIGHTPADDING", (0,0), (-1,-1), pads+2),
("TOPPADDING", (0,0), (-1,-1), pads),
("BOTTOMPADDING", (0,0), (-1,-1), pads),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
story = []
# ============ TITLE BLOCK ============
title_tbl = Table(
[[Paragraph("ESOPHAGEAL FOREIGN BODY", P_TITLE)],
[Paragraph("Management Algorithm | Quick Reference Card | ED / GI / ENT", P_SUB)]],
colWidths=[PAGE_W - 30*mm]
)
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (0,0), 8),
("BOTTOMPADDING", (0,0), (0,0), 2),
("TOPPADDING", (0,1), (0,1), 1),
("BOTTOMPADDING", (0,1), (0,1), 7),
]))
story.append(title_tbl)
story.append(Spacer(1, 5))
# ============ STEP 1: RECOGNIZE ============
step1_head = Table([[Paragraph("STEP 1", P_STEP_NUM), Paragraph("RECOGNIZE & TRIAGE — History and Exam", P_HEAD)]],
colWidths=[16*mm, None])
step1_head.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), RED),
("BACKGROUND", (1,0), (1,0), NAVY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(step1_head)
typical = Paragraph(
"<b>Typical Sx:</b> dysphagia, odynophagia, drooling/excess salivation, retrosternal or "
"neck pain, foreign-body sensation, sudden onset while eating (esp. fish/chicken bone, meat).",
P_BODY)
redflag = Paragraph(
"<b><font color='#C0392B'>RED FLAGS \u2192 EMERGENT (act now, do not delay for imaging):</font></b> "
"stridor / airway compromise \u00b7 respiratory distress \u00b7 inability to handle secretions "
"\u00b7 active hematemesis \u00b7 subcutaneous emphysema / neck crepitus \u00b7 severe/worsening chest pain "
"\u00b7 fever with chest pain (\u2192 think perforation / mediastinitis).",
P_BODY)
recog_box = box(
[[typical], [redflag]],
bg=WHITE, border=colors.HexColor("#BDC3C7")
)
recog_box.setStyle(TableStyle([
("BACKGROUND", (0,1), (0,1), RED_BG),
]))
story.append(recog_box)
story.append(Spacer(1, 4))
# ============ STEP 2: IMAGING ============
step2_head = Table([[Paragraph("STEP 2", P_STEP_NUM), Paragraph("IMAGING — Localize the object", P_HEAD)]],
colWidths=[16*mm, None])
step2_head.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), ORANGE),
("BACKGROUND", (1,0), (1,0), NAVY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(step2_head)
img_data = [
[Paragraph("<b>Plain XR</b> (AP + lateral, neck/chest/abd)", P_BODY_B),
Paragraph("1st line. Reliably shows coins & button batteries (coronal orientation on AP view). "
"<b>Bones (fish/chicken) are often radiolucent \u2014 a normal X-ray does NOT exclude a bone.</b>", P_BODY)],
[Paragraph("<b>CT neck/chest (\u00b1 contrast)</b>", P_BODY_B),
Paragraph("Investigation of choice when a bone is suspected or XR is negative/equivocal with persistent symptoms. "
"Sensitivity 90\u2013100% for bone/organic FB; also detects early perforation (air, stranding).", P_BODY)],
[Paragraph("<b>Barium / Gastrografin swallow</b>", P_BODY_B),
Paragraph("<font color='#C0392B'><b>Avoid</b></font> \u2014 aspiration risk and coats mucosa, degrading subsequent endoscopic view.", P_BODY)],
[Paragraph("<b>Nasopharyngoscopy / laryngoscopy</b>", P_BODY_B),
Paragraph("Useful for FB at or above the cricopharyngeus; differentiates retained FB from mucosal abrasion.", P_BODY)],
]
img_tbl = box(img_data, bg=WHITE, col_widths=[52*mm, None])
img_tbl.setStyle(TableStyle([("BACKGROUND", (0,0), (0,-1), ORANGE_BG)]))
story.append(img_tbl)
story.append(Spacer(1, 4))
# ============ STEP 3: TRIAGE BY OBJECT / URGENCY ============
step3_head = Table([[Paragraph("STEP 3", P_STEP_NUM), Paragraph("TIMING — Urgency by object type", P_HEAD)]],
colWidths=[16*mm, None])
step3_head.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), RED),
("BACKGROUND", (1,0), (1,0), NAVY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(step3_head)
urg_header = [Paragraph("<b>Object / Situation</b>", P_SMALL_WB), Paragraph("<b>Urgency</b>", P_SMALL_WB), Paragraph("<b>Key point</b>", P_SMALL_WB)]
urg_rows = [
urg_header,
[Paragraph("Button battery in esophagus", P_SMALL), Paragraph("<b><font color='#C0392B'>EMERGENT <2 h</font></b>", P_SMALL),
Paragraph("Risk of liquefactive necrosis / perforation within hours.", P_SMALL)],
[Paragraph("Sharp / pointed object \u2014 <b>fish or chicken bone</b>, pin, toothpick", P_SMALL), Paragraph("<b><font color='#D68910'>URGENT 2\u20136 h</font></b>", P_SMALL),
Paragraph("High perforation risk (up to ~35% if retained). Never observe.", P_SMALL)],
[Paragraph("Multiple magnets / long object >5 cm / disk battery", P_SMALL), Paragraph("<b><font color='#D68910'>URGENT 2\u20136 h</font></b>", P_SMALL),
Paragraph("Magnet pairs can trap tissue \u2192 pressure necrosis.", P_SMALL)],
[Paragraph("Coin, proximal esophagus, symptomatic", P_SMALL), Paragraph("<b><font color='#D68910'>URGENT 2\u20136 h</font></b>", P_SMALL),
Paragraph("Smooth \u2014 may also suit Foley/bougienage (see Step 4).", P_SMALL)],
[Paragraph("Food bolus, incomplete obstruction, tolerating secretions", P_SMALL), Paragraph("<b><font color='#1E8449'>Within 24 h</font></b>", P_SMALL),
Paragraph("Brief trial of spontaneous passage acceptable if stable; glucagon evidence is weak (no benefit vs placebo, more AEs).", P_SMALL)],
[Paragraph("Blunt object already passed into stomach, asymptomatic", P_SMALL), Paragraph("<b><font color='#1E8449'>Elective / conservative</font></b>", P_SMALL),
Paragraph("Serial X-ray / stool check. Endoscopic retrieval if >2.5 cm wide, >5 cm long, or sharp.", P_SMALL)],
]
urg_tbl = Table(urg_rows, colWidths=[62*mm, 30*mm, None])
urg_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BOX", (0,0), (-1,-1), 0.6, colors.HexColor("#BDC3C7")),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BDC3C7")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, GREY_BG]),
("BACKGROUND", (0,1), (-1,1), RED_BG),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3),
]))
story.append(urg_tbl)
story.append(Spacer(1, 4))
# ============ STEP 4: TECHNIQUE ============
step4_head = Table([[Paragraph("STEP 4", P_STEP_NUM), Paragraph("REMOVAL TECHNIQUE", P_HEAD)]],
colWidths=[16*mm, None])
step4_head.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), GREEN),
("BACKGROUND", (1,0), (1,0), NAVY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(step4_head)
tech_data = [
[Paragraph("<b>Flexible endoscopy + sedation</b>", P_BODY_B),
Paragraph("<b>Preferred, first-line for most objects</b> \u2014 direct visual control, lower complication rate than rigid scope, no GA required.", P_BODY)],
[Paragraph("<b>Rigid endoscopy</b>", P_BODY_B),
Paragraph("Select cases only (e.g. large/complex proximal objects). Requires general anesthesia; higher complication rate.", P_BODY)],
[Paragraph("<b>Foley catheter balloon extraction / bougienage</b>", P_BODY_B),
Paragraph("<font color='#1E8449'>ONLY for smooth objects (coins)</font> in proximal esophagus, impacted <1 week, no perforation signs, no known stricture. "
"<font color='#C0392B'><b>NEVER for sharp objects (bones, pins) or suspected perforation.</b></font>", P_BODY)],
[Paragraph("<b>IV Glucagon 1 mg (up to 2 mg)</b>", P_BODY_B),
Paragraph("May be trialed for distal food-bolus impaction only. Recent meta-analysis: no benefit over placebo, more adverse effects "
"(PMID 39292844). <b>Not applicable to bone/sharp FB.</b>", P_BODY)],
]
tech_tbl = box(tech_data, bg=WHITE, col_widths=[58*mm, None])
tech_tbl.setStyle(TableStyle([("BACKGROUND", (0,0), (0,-1), GREEN_BG)]))
story.append(tech_tbl)
story.append(Spacer(1, 4))
# ============ STEP 5: POST-REMOVAL & COMPLICATIONS ============
step5_head = Table([[Paragraph("STEP 5", P_STEP_NUM), Paragraph("POST-REMOVAL CARE & COMPLICATIONS TO WATCH", P_HEAD)]],
colWidths=[16*mm, None])
step5_head.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), NAVY),
("BACKGROUND", (1,0), (1,0), NAVY),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(step5_head)
post_left = Paragraph(
"<b>After successful removal:</b><br/>"
"\u2022 Observe until fully awake & tolerating oral intake<br/>"
"\u2022 Start a <b>PPI</b><br/>"
"\u2022 Arrange outpatient <b>repeat endoscopy</b> \u2014 up to 25% have an underlying "
"esophageal disorder (stricture, EoE, ring, malignancy)<br/>"
"\u2022 Discharge advice: return if fever, worsening pain, or dysphagia",
P_BODY)
post_right = Paragraph(
"<b><font color='#C0392B'>Watch for perforation / complications</font></b> "
"(may present hours\u2013days, rarely years, later):<br/>"
"\u2022 Perforation \u2192 mediastinitis, abscess<br/>"
"\u2022 Tracheoesophageal fistula<br/>"
"\u2022 Aorto-esophageal fistula (catastrophic, esp. near aortic arch)<br/>"
"\u2022 Risk \u2191 with impaction >24 h, sharp/bone objects, delayed care",
P_BODY)
post_tbl = Table([[post_left, post_right]], colWidths=[None, None])
post_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), BLUE_BG),
("BACKGROUND", (1,0), (1,0), RED_BG),
("BOX", (0,0), (-1,-1), 0.6, colors.HexColor("#BDC3C7")),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BDC3C7")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(post_tbl)
story.append(Spacer(1, 4))
# ============ ANATOMY STRIP ============
anat = Paragraph(
"<b>4 anatomic narrowings where FBs lodge:</b> "
"cricopharyngeus (UES) \u2014 most common site, esp. adults/children \u2192 aortic arch crossing "
" \u2192 left mainstem bronchus crossing \u2192 LES at diaphragmatic hiatus. "
"~90% of true esophageal obstructions occur at a pre-existing structural abnormality (peptic/malignant stricture, Schatzki ring, eosinophilic esophagitis).",
P_BODY)
anat_tbl = box([[anat]], bg=GREY_BG)
story.append(anat_tbl)
story.append(Spacer(1, 3))
# ============ FOOTER ============
foot = Paragraph(
"<b>Sources:</b> ROSEN's Emergency Medicine: Concepts and Clinical Practice, \"Foreign Bodies\", p.1219\u20131222 · "
"ESGE Clinical Guideline \u2013 Removal of foreign bodies in the upper GI tract in adults (Birk et al., Endoscopy 2016) · "
"Ismail et al., Glucagon for Esophageal FB Impaction: Systematic Review & Meta-analysis, PMID 39292844 (2024) · "
"Ahmed et al., Cap-Assisted Endoscopic Esophageal FB Removal, PMID 36350475 (2023).<br/>"
"This card is an educational quick-reference for trainees; it does not replace local institutional protocols or specialist (GI/ENT/Surgery) judgment.",
P_FOOT)
story.append(Spacer(1, 2))
story.append(foot)
doc = SimpleDocTemplate(
"/tmp/workspace/esophageal-fb-card/Esophageal_Foreign_Body_Quick_Reference_Card.pdf",
pagesize=A4,
leftMargin=12*mm, rightMargin=12*mm, topMargin=10*mm, bottomMargin=10*mm,
title="Esophageal Foreign Body - Management Algorithm Quick Reference Card",
)
doc.build(story)
print("PDF built successfully.")
cd /tmp/workspace/esophageal-fb-card && python build_card.py
cd /tmp/workspace/esophageal-fb-card && python -c " import pdfplumber with pdfplumber.open('Esophageal_Foreign_Body_Quick_Reference_Card.pdf') as pdf: print('pages:', len(pdf.pages)) for p in pdf.pages: print(p.width, p.height) " ls -la /tmp/workspace/esophageal-fb-card/
cd /tmp/workspace/esophageal-fb-card && python -c " import pdfplumber with pdfplumber.open('Esophageal_Foreign_Body_Quick_Reference_Card.pdf') as pdf: print(repr(pdf.pages[1].extract_text())) "
~/esophageal-fb-card/build_card.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
~/esophageal-fb-card/build_card.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
~/esophageal-fb-card/build_card.py
Successfully replaced 5 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
~/esophageal-fb-card/build_card.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
~/esophageal-fb-card/build_card.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
~/esophageal-fb-card/build_card.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
~/esophageal-fb-card/build_card.py
Successfully replaced 5 instance(s) of the string in '/tmp/workspace/esophageal-fb-card/build_card.py'
cd /tmp/workspace/esophageal-fb-card && python build_card.py && python -c " import pdfplumber with pdfplumber.open('Esophageal_Foreign_Body_Quick_Reference_Card.pdf') as pdf: print('pages:', len(pdf.pages)) "
cd /tmp/workspace/esophageal-fb-card && python -c " import pdfplumber with pdfplumber.open('Esophageal_Foreign_Body_Quick_Reference_Card.pdf') as pdf: p = pdf.pages[0] im = p.to_image(resolution=150) im.save('preview.png') print('saved') "
rm -f /tmp/workspace/esophageal-fb-card/preview.png; ls -la /tmp/workspace/esophageal-fb-card/
Esophageal Foreign Body Quick Reference Card
PDF Document · PDF