Edit the PPTX:- On slide no 13 "MOTOR EXAMINATION - Voluntary Control Grading" of the attached PPTX add the attached picture with a heading of "Generalized Voluntary Control Grading" & add the below mentioned line somewhere with adjusting the previous chart diagram not changing a thing:- "The clinical contradiction between VCG & MAS tools is a matter of timing and neurophysiology: Voluntary Control Grading (VCG) is used actively during the initial flaccid phase to evaluate the loss of descending corticospinal tract signals caused by cerebral shock. Conversely, the Modified Ashworth Scale (MAS) is used passively only after spinal reflex arcs escape cortical inhibition, resulting in the alpha motor neuron hyperexcitability that drives muscle spasticity."
cd /home/daytona/skills/pptx && python scripts/office/unpack.py /home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx /home/daytona/workspace/pptx_edit/unpacked/ 2>&1
cd /home/daytona/skills/pptx && python scripts/office/unpack.py /home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx /home/daytona/workspace/pptx_edit/unpacked/ 2>&1
mkdir -p /home/daytona/workspace/pptx_edit/unpacked && unzip -o /home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx -d /home/daytona/workspace/pptx_edit/unpacked/ 2>&1 | tail -20
ls /home/daytona/workspace/pptx_edit/unpacked/ppt/slides/ | head -30
python3 -c " import xml.dom.minidom with open('/home/daytona/workspace/pptx_edit/unpacked/ppt/slides/slide13.xml') as f: content = f.read() dom = xml.dom.minidom.parseString(content) pretty = dom.toprettyxml(indent=' ') with open('/home/daytona/workspace/pptx_edit/slide13_pretty.xml', 'w') as f: f.write(pretty) print('Done, lines:', pretty.count('\n')) "
cat /home/daytona/workspace/pptx_edit/unpacked/ppt/slides/_rels/slide13.xml.rels && echo "---" && ls /home/daytona/workspace/pptx_edit/unpacked/ppt/media/
curl -s -L "https://d361swluvexzqs.cloudfront.net/chats-attachments/IMG_20260616_221923-1781629773799-vifo7a.jpg" -o /home/daytona/workspace/pptx_edit/unpacked/ppt/media/image-13-new.jpeg && echo "Downloaded:" && ls -lh /home/daytona/workspace/pptx_edit/unpacked/ppt/media/image-13-new.jpeg
python3 << 'PYEOF' # Add rId4 for new image to rels file rels_path = '/home/daytona/workspace/pptx_edit/unpacked/ppt/slides/_rels/slide13.xml.rels' with open(rels_path, 'r') as f: content = f.read() new_rel = '<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/image-13-new.jpeg"/>' # Insert before closing tag content = content.replace('</Relationships>', new_rel + '</Relationships>') with open(rels_path, 'w') as f: f.write(content) print("Rels updated:") print(content) PYEOF
python3 << 'PYEOF' # Build the new slide13 XML # Slide dimensions: 9144000 x 5143500 # Header bar height: 594360 # Content area starts at y=658368 (some padding) # LAYOUT: # Left column (existing chart): x=91440, y=670000, w=4250000, h=3100000 (unchanged content, resized box) # Right column heading: x=4617000, y=670000, w=4435000, h=305000 # Right column image: x=4617000, y=980000, w=4435000, h=2790000 # Explanation text (bottom): x=91440, y=3820000, w=8960000, h=1120000 new_xml = '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld name="Slide 13"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Shape 0"></p:cNvPr><p:cNvSpPr/><p:nvPr></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="9144000" cy="5143500"/></a:xfrm><a:prstGeom prst="rect"><a:avLst></a:avLst></a:prstGeom><a:solidFill><a:srgbClr val="F3F7FF"/></a:solidFill><a:ln w="12700"><a:solidFill><a:srgbClr val="F3F7FF"/></a:solidFill><a:prstDash val="solid"/></a:ln></p:spPr></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Shape 1"></p:cNvPr><p:cNvSpPr/><p:nvPr></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="9144000" cy="594360"/></a:xfrm><a:prstGeom prst="rect"><a:avLst></a:avLst></a:prstGeom><a:solidFill><a:srgbClr val="1A3A6A"/></a:solidFill><a:ln w="12700"><a:solidFill><a:srgbClr val="1A3A6A"/></a:solidFill><a:prstDash val="solid"/></a:ln></p:spPr></p:sp><p:sp><p:nvSpPr><p:cNvPr id="4" name="Text 2"></p:cNvPr><p:cNvSpPr/><p:nvPr></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="274320" y="0"/><a:ext cx="8595360" cy="594360"/></a:xfrm><a:prstGeom prst="rect"><a:avLst></a:avLst></a:prstGeom><a:noFill/><a:ln></a:ln></p:spPr><p:txBody><a:bodyPr wrap="square" lIns="0" tIns="0" rIns="0" bIns="0" rtlCol="0" anchor="ctr"></a:bodyPr><a:lstStyle/><a:p><a:pPr indent="0" marL="0"><a:buNone/></a:pPr><a:r><a:rPr lang="en-US" sz="2000" b="1" dirty="0"><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill></a:rPr><a:t>MOTOR EXAMINATION — Voluntary Control Grading</a:t></a:r><a:endParaRPr lang="en-US" sz="2000" dirty="0"/></a:p></p:txBody></p:sp><p:pic><p:nvPicPr><p:cNvPr id="5" name="Image 0" descr="preencoded.png"></p:cNvPr><p:cNvPicPr><a:picLocks noChangeAspect="1"/></p:cNvPicPr><p:nvPr></p:nvPr></p:nvPicPr><p:blipFill><a:blip r:embed="rId1"/><a:stretch><a:fillRect/></a:stretch></p:blipFill><p:spPr><a:xfrm><a:off x="91440" y="670000"/><a:ext cx="4250000" cy="3060000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr></p:pic><p:sp><p:nvSpPr><p:cNvPr id="6" name="Text VCG Heading"></p:cNvPr><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="4617000" y="660000"/><a:ext cx="4435000" cy="318000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:solidFill><a:srgbClr val="1A3A6A"/></a:solidFill><a:ln><a:noFill/></a:ln></p:spPr><p:txBody><a:bodyPr wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle/><a:p><a:pPr algn="ctr"><a:buNone/></a:pPr><a:r><a:rPr lang="en-US" sz="1400" b="1" dirty="0"><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill></a:rPr><a:t>Generalized Voluntary Control Grading</a:t></a:r></a:p></p:txBody></p:sp><p:pic><p:nvPicPr><p:cNvPr id="7" name="Image VCG"></p:cNvPr><p:cNvPicPr><a:picLocks noChangeAspect="1"/></p:cNvPicPr><p:nvPr></p:nvPr></p:nvPicPr><p:blipFill><a:blip r:embed="rId4"/><a:stretch><a:fillRect/></a:stretch></p:blipFill><p:spPr><a:xfrm><a:off x="4617000" y="980000"/><a:ext cx="4435000" cy="2750000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr></p:pic><p:sp><p:nvSpPr><p:cNvPr id="8" name="Text Explanation"></p:cNvPr><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="91440" y="3790000"/><a:ext cx="8960000" cy="1250000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:solidFill><a:srgbClr val="DDEEFF"/></a:solidFill><a:ln w="12700"><a:solidFill><a:srgbClr val="1A3A6A"/></a:solidFill></a:ln></p:spPr><p:txBody><a:bodyPr wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr"/><a:lstStyle/><a:p><a:pPr indent="0" marL="0"><a:buNone/></a:pPr><a:r><a:rPr lang="en-US" sz="1000" b="0" dirty="0"><a:solidFill><a:srgbClr val="1A1A1A"/></a:solidFill></a:rPr><a:t>The clinical contradiction between VCG & MAS tools is a matter of timing and neurophysiology: Voluntary Control Grading (VCG) is used actively during the initial flaccid phase to evaluate the loss of descending corticospinal tract signals caused by cerebral shock. Conversely, the Modified Ashworth Scale (MAS) is used passively only after spinal reflex arcs escape cortical inhibition, resulting in the alpha motor neuron hyperexcitability that drives muscle spasticity.</a:t></a:r></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld>''' with open('/home/daytona/workspace/pptx_edit/unpacked/ppt/slides/slide13.xml', 'w') as f: f.write(new_xml) print("slide13.xml written successfully") PYEOF
cd /home/daytona/workspace/pptx_edit/unpacked && zip -r /home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx . 2>&1 | tail -5 && echo "Done" && ls -lh /home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx
python3 << 'PYEOF' import zipfile, os src_dir = '/home/daytona/workspace/pptx_edit/unpacked' out_path = '/home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx' with zipfile.ZipFile(out_path, 'w', zipfile.ZIP_DEFLATED) as zf: for root, dirs, files in os.walk(src_dir): for file in files: abs_path = os.path.join(root, file) arc_name = os.path.relpath(abs_path, src_dir) zf.write(abs_path, arc_name) size = os.path.getsize(out_path) print(f"Packed OK: {out_path} ({size/1024:.0f} KB)") PYEOF
Try again
python3 << 'PYEOF' import zipfile, os, shutil src_dir = '/home/daytona/workspace/pptx_edit/unpacked' tmp_path = '/tmp/Sensory_Motor_v2.pptx' final_path = '/home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx' with zipfile.ZipFile(tmp_path, 'w', zipfile.ZIP_DEFLATED) as zf: for root, dirs, files in os.walk(src_dir): for file in files: abs_path = os.path.join(root, file) arc_name = os.path.relpath(abs_path, src_dir) try: zf.write(abs_path, arc_name) except Exception as e: print(f"Skipping {arc_name}: {e}") shutil.copy2(tmp_path, final_path) size = os.path.getsize(final_path) print(f"Done: {final_path} ({size/1024:.0f} KB)") PYEOF
python3 << 'PYEOF' import zipfile, os, shutil src_dir = '/home/daytona/workspace/pptx_edit/unpacked' tmp_path = '/tmp/Sensory_Motor_v2.pptx' final_path = '/home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx' with zipfile.ZipFile(tmp_path, 'w', zipfile.ZIP_DEFLATED) as zf: for root, dirs, files in os.walk(src_dir): for file in files: abs_path = os.path.join(root, file) arc_name = os.path.relpath(abs_path, src_dir) try: zf.write(abs_path, arc_name) except Exception as e: print(f"Skipping {arc_name}: {e}") size = os.path.getsize(tmp_path) print(f"Zip created at {tmp_path} ({size/1024:.0f} KB)") # Use copyfile (no metadata) instead of copy2 shutil.copyfile(tmp_path, final_path) size2 = os.path.getsize(final_path) print(f"Copied to {final_path} ({size2/1024:.0f} KB)") PYEOF
python3 -c " import zipfile with zipfile.ZipFile('/home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx') as z: names = z.namelist() slide13 = z.read('ppt/slides/slide13.xml') # Check media present media = [n for n in names if 'media' in n] print('Media files:', media) # Validate XML import xml.etree.ElementTree as ET ET.fromstring(slide13) print('slide13.xml: valid XML') # Check rId4 referenced print('rId4 in slide13:', b'rId4' in slide13) print('image-13-new in zip:', any('image-13-new' in n for n in names)) "
Sensory Motor Examination Final v2
Presentation · PPTX
Downloading format is not working. Correct it
ls -lh /home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx && file /home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx
python3 -c " import shutil shutil.copyfile( '/home/daytona/workspace/pptx_edit/Sensory_Motor_Examination_Final_v2.pptx', '/home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx' ) import os print(os.path.getsize('/home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx')) "
Sensory Motor Examination Final v2
Presentation · PPTX
Can download, but this is showing.
ls /home/daytona/skills/pptx/scripts/office/
python3 /home/daytona/skills/pptx/scripts/office/pack.py /home/daytona/workspace/pptx_edit/unpacked/ /home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx --original /home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx 2>&1
pip install --user lxml -q && python3 /home/daytona/skills/pptx/scripts/office/pack.py /home/daytona/workspace/pptx_edit/unpacked/ /home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx --original /home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx 2>&1
pip show python-pptx 2>&1 | head -3
pip install --user python-pptx -q 2>&1 | tail -3
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN import urllib.request, io, os SRC = '/home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx' OUT = '/home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx' IMG_URL = 'https://d361swluvexzqs.cloudfront.net/chats-attachments/IMG_20260616_221923-1781629773799-vifo7a.jpg' IMG_LOCAL = '/home/daytona/workspace/pptx_edit/unpacked/ppt/media/image-13-new.jpeg' prs = Presentation(SRC) # Slide 13 is index 12 slide = prs.slides[12] print(f"Slide 13 name: {slide.name}") print(f"Slide dimensions: {prs.slide_width} x {prs.slide_height}") # List current shapes for i, shape in enumerate(slide.shapes): print(f" Shape {i}: id={shape.shape_id} name='{shape.name}' left={shape.left} top={shape.top} w={shape.width} h={shape.height}") PYEOF
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.oxml.ns import qn from lxml import etree import io, os SRC = '/home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx' OUT = '/home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx' IMG_LOCAL = '/home/daytona/workspace/pptx_edit/unpacked/ppt/media/image-13-new.jpeg' prs = Presentation(SRC) slide = prs.slides[12] # Slide 13 = index 12 # --- 1. Resize existing chart image (Shape index 3) to left half --- # Original: left=164592 top=658368 w=8796528 h=4343400 # New: left half, same top, squeeze width to ~47% and height to ~60% chart_img = slide.shapes[3] chart_img.left = Emu(91440) chart_img.top = Emu(660000) chart_img.width = Emu(4250000) chart_img.height = Emu(3060000) # --- 2. Add "Generalized Voluntary Control Grading" heading (right side) --- # Dark navy box heading_box = slide.shapes.add_textbox( Emu(4480000), Emu(660000), Emu(4572000), Emu(310000) ) tf = heading_box.text_frame tf.word_wrap = True p = tf.paragraphs[0] p.alignment = PP_ALIGN.CENTER run = p.add_run() run.text = "Generalized Voluntary Control Grading" run.font.bold = True run.font.size = Pt(13) run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Set background fill on the textbox to navy fill = heading_box.fill fill.solid() fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x6A) # --- 3. Add new image (right side, below heading) --- new_img = slide.shapes.add_picture( IMG_LOCAL, Emu(4480000), Emu(980000), Emu(4572000), Emu(2740000) ) # --- 4. Add explanation text box at bottom (full width) --- EXPLANATION = ( "The clinical contradiction between VCG & MAS tools is a matter of timing and neurophysiology: " "Voluntary Control Grading (VCG) is used actively during the initial flaccid phase to evaluate " "the loss of descending corticospinal tract signals caused by cerebral shock. Conversely, the " "Modified Ashworth Scale (MAS) is used passively only after spinal reflex arcs escape cortical " "inhibition, resulting in the alpha motor neuron hyperexcitability that drives muscle spasticity." ) txt_box = slide.shapes.add_textbox( Emu(91440), Emu(3790000), Emu(8960000), Emu(1260000) ) tf2 = txt_box.text_frame tf2.word_wrap = True # Set light blue background + navy border on the text box fill2 = txt_box.fill fill2.solid() fill2.fore_color.rgb = RGBColor(0xDD, 0xEE, 0xFF) # Add navy border via line element sp = txt_box._element spPr = sp.find(qn('p:spPr')) ln_xml = '<a:ln xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" w="12700"><a:solidFill><a:srgbClr val="1A3A6A"/></a:solidFill></a:ln>' ln_el = etree.fromstring(ln_xml) spPr.append(ln_el) # Set internal padding via bodyPr txBody = sp.find(qn('p:txBody')) bodyPr = txBody.find(qn('a:bodyPr')) bodyPr.set('lIns', '91440') bodyPr.set('tIns', '45720') bodyPr.set('rIns', '91440') bodyPr.set('bIns', '45720') p2 = tf2.paragraphs[0] p2.alignment = PP_ALIGN.LEFT run2 = p2.add_run() run2.text = EXPLANATION run2.font.size = Pt(9.5) run2.font.color.rgb = RGBColor(0x1A, 0x1A, 0x1A) run2.font.bold = False # --- Save --- prs.save(OUT) print(f"Saved: {OUT}") print(f"Size: {os.path.getsize(OUT)/1024:.0f} KB") PYEOF
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.oxml.ns import qn from lxml import etree import io, os, shutil SRC = '/home/daytona/workspace/attachments/815f0576-5ee2-4d3f-848b-1496a3998ae2/Sensory_Motor_Examination_Final.pptx' TMP = '/tmp/Sensory_Motor_v2.pptx' OUT = '/home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx' IMG_LOCAL = '/home/daytona/workspace/pptx_edit/unpacked/ppt/media/image-13-new.jpeg' prs = Presentation(SRC) slide = prs.slides[12] # 1. Resize existing chart image to left half chart_img = slide.shapes[3] chart_img.left = Emu(91440) chart_img.top = Emu(660000) chart_img.width = Emu(4250000) chart_img.height = Emu(3060000) # 2. Heading box (navy background, white bold text) heading_box = slide.shapes.add_textbox( Emu(4480000), Emu(660000), Emu(4572000), Emu(310000) ) tf = heading_box.text_frame tf.word_wrap = True p = tf.paragraphs[0] p.alignment = PP_ALIGN.CENTER run = p.add_run() run.text = "Generalized Voluntary Control Grading" run.font.bold = True run.font.size = Pt(13) run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) heading_box.fill.solid() heading_box.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x6A) # 3. New image right side slide.shapes.add_picture( IMG_LOCAL, Emu(4480000), Emu(980000), Emu(4572000), Emu(2740000) ) # 4. Explanation text box at bottom EXPLANATION = ( "The clinical contradiction between VCG & MAS tools is a matter of timing and neurophysiology: " "Voluntary Control Grading (VCG) is used actively during the initial flaccid phase to evaluate " "the loss of descending corticospinal tract signals caused by cerebral shock. Conversely, the " "Modified Ashworth Scale (MAS) is used passively only after spinal reflex arcs escape cortical " "inhibition, resulting in the alpha motor neuron hyperexcitability that drives muscle spasticity." ) txt_box = slide.shapes.add_textbox( Emu(91440), Emu(3790000), Emu(8960000), Emu(1260000) ) tf2 = txt_box.text_frame tf2.word_wrap = True txt_box.fill.solid() txt_box.fill.fore_color.rgb = RGBColor(0xDD, 0xEE, 0xFF) sp = txt_box._element spPr = sp.find(qn('p:spPr')) ln_xml = '<a:ln xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" w="12700"><a:solidFill><a:srgbClr val="1A3A6A"/></a:solidFill></a:ln>' spPr.append(etree.fromstring(ln_xml)) txBody = sp.find(qn('p:txBody')) bodyPr = txBody.find(qn('a:bodyPr')) bodyPr.set('lIns', '91440'); bodyPr.set('tIns', '45720') bodyPr.set('rIns', '91440'); bodyPr.set('bIns', '45720') p2 = tf2.paragraphs[0] p2.alignment = PP_ALIGN.LEFT run2 = p2.add_run() run2.text = EXPLANATION run2.font.size = Pt(9.5) run2.font.color.rgb = RGBColor(0x1A, 0x1A, 0x1A) # Save to /tmp (no seek issue there) prs.save(TMP) print(f"Saved to /tmp: {os.path.getsize(TMP)//1024} KB") # Read bytes and write to workspace with open(TMP, 'rb') as f: data = f.read() with open(OUT, 'wb') as f: f.write(data) print(f"Written to workspace: {os.path.getsize(OUT)//1024} KB") PYEOF
python3 -c " import zipfile with zipfile.ZipFile('/home/daytona/workspace/Sensory_Motor_Examination_Final_v2.pptx') as z: names = z.namelist() print('Total files:', len(names)) print('Media:', [n for n in names if 'media' in n]) # Verify slide 13 XML is valid import xml.etree.ElementTree as ET xml = z.read('ppt/slides/slide13.xml') ET.fromstring(xml) print('slide13.xml: valid') # Verify rels has new image rels = z.read('ppt/slides/_rels/slide13.xml.rels').decode() print('new image in rels:', 'image-13-new' in rels or 'rId' in rels) print(rels) "
image1.jpg (python-pptx auto-named it). The file is 3.7 MB and properly structured.Sensory Motor Examination Final v2
Presentation · PPTX