This is my metronidazole suspension ppt now I want you to maintain the pics where needed and font size and design the same and reduced this ppt into 20 slides by either cutting some unimportant topic or sentences or what but reduced it to 20 slides and rest keep everything same like wordings simplie and easy etc
cd "/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4" && python3 -c " from pptx import Presentation from pptx.util import Emu import re prs = Presentation('pharmaceutics grp 9.pptx') print(f'Total slides: {len(prs.slides)}') print() for i, slide in enumerate(prs.slides, 1): print(f'=== SLIDE {i} (layout: {slide.slide_layout.name}) ===') has_image = any(shape.shape_type == 13 or (hasattr(shape, 'shape_type') and shape.shape_type == 13) for shape in slide.shapes) # check for pictures more thoroughly pics = [s for s in slide.shapes if s.shape_type == 13] if pics: print(f' [HAS {len(pics)} IMAGE(S)]') for shape in slide.shapes: if shape.has_text_frame: txt = shape.text_frame.text.strip() if txt: print(f' [{shape.name}]: {txt[:200]}') print() "
cd "/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4" && python3 -c " from pptx import Presentation from pptx.util import Emu prs = Presentation('pharmaceutics grp 9.pptx') # Check image-only slides more carefully and slides with both text and images image_only = [] for i, slide in enumerate(prs.slides, 1): shapes = slide.shapes has_text = any(s.has_text_frame and s.text_frame.text.strip() for s in shapes) has_img = any(s.shape_type == 13 for s in shapes) if has_img and not has_text: image_only.append(i) print(f'Slide {i}: IMAGE ONLY') elif has_img and has_text: print(f'Slide {i}: IMAGE + TEXT') else: print(f'Slide {i}: TEXT ONLY') print() print('Image-only slides:', image_only) "
ls /tmp/workspace/ 2>/dev/null && mkdir -p /tmp/workspace/metronidazole-ppt && echo "done"
python3 /tmp/skills/pptx/scripts/office/unpack.py "/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4/pharmaceutics grp 9.pptx" /tmp/workspace/metronidazole-ppt/unpacked/ && echo "Unpacked successfully" && ls /tmp/workspace/metronidazole-ppt/unpacked/ppt/slides/ | head -40
cat /tmp/workspace/metronidazole-ppt/unpacked/ppt/presentation.xml | python3 -c " import sys content = sys.stdin.read() # Find the sldIdLst section import re match = re.search(r'<p:sldIdLst>(.*?)</p:sldIdLst>', content, re.DOTALL) if match: print('sldIdLst found:') print(match.group(0)) "
python3 -c " # Map slide numbers to rIds # rId3=slide1, rId4=slide2, ..., rId35=slide33 # Slides to remove (1-indexed): 2, 4, 9, 10, 11, 17, 19, 21, 23, 27, 29, 31, 32 # Corresponding rIds: rId4, rId6, rId11, rId12, rId13, rId19, rId21, rId23, rId25, rId29, rId31, rId33, rId34 slides_to_remove = [2, 4, 9, 10, 11, 17, 19, 21, 23, 27, 29, 31, 32] # rId = slide_number + 2 (slide1=rId3, slide2=rId4, etc.) rids_to_remove = ['rId' + str(s + 2) for s in slides_to_remove] print('Slides to remove:', slides_to_remove) print('rIds to remove:', rids_to_remove) print('Remaining slides:', [s for s in range(1,34) if s not in slides_to_remove]) print('Count remaining:', len([s for s in range(1,34) if s not in slides_to_remove])) "
python3 << 'EOF' import re # Read presentation.xml with open('/tmp/workspace/metronidazole-ppt/unpacked/ppt/presentation.xml', 'r', encoding='utf-8') as f: content = f.read() # Slides to remove (rIds) rids_to_remove = ['rId4', 'rId6', 'rId11', 'rId12', 'rId13', 'rId19', 'rId21', 'rId23', 'rId25', 'rId29', 'rId31', 'rId33', 'rId34'] # Remove the sldId entries for these rIds from the sldIdLst for rid in rids_to_remove: # Remove the <p:sldId ... r:id="rIdX"/> line pattern = r'\s*<p:sldId[^/]*/>\n' # More targeted: find and remove specific rId lines content = re.sub(r'\s*<p:sldId[^>]+r:id="' + re.escape(rid) + r'"[^/]*/>', '', content) with open('/tmp/workspace/metronidazole-ppt/unpacked/ppt/presentation.xml', 'w', encoding='utf-8') as f: f.write(content) # Verify with open('/tmp/workspace/metronidazole-ppt/unpacked/ppt/presentation.xml', 'r', encoding='utf-8') as f: content2 = f.read() match = re.search(r'<p:sldIdLst>(.*?)</p:sldIdLst>', content2, re.DOTALL) if match: print('Updated sldIdLst:') print(match.group(0)) # Count remaining count = len(re.findall(r'<p:sldId ', match.group(0))) print(f'\nTotal remaining slides in list: {count}') EOF
python3 << 'EOF' import re # Also remove from the .rels file rels_path = '/tmp/workspace/metronidazole-ppt/unpacked/ppt/_rels/presentation.xml.rels' with open(rels_path, 'r', encoding='utf-8') as f: rels = f.read() # Slides to remove (rIds) rids_to_remove = ['rId4', 'rId6', 'rId11', 'rId12', 'rId13', 'rId19', 'rId21', 'rId23', 'rId25', 'rId29', 'rId31', 'rId33', 'rId34'] for rid in rids_to_remove: # Remove lines like: <Relationship Id="rIdX" Type="...slide..." Target="slides/slideN.xml"/> rels = re.sub(r'\s*<Relationship[^>]+Id="' + re.escape(rid) + r'"[^>]*/>', '', rels) with open(rels_path, 'w', encoding='utf-8') as f: f.write(rels) print('Updated rels file. Remaining relationships:') print(rels) EOF
python3 /tmp/skills/pptx/scripts/clean.py /tmp/workspace/metronidazole-ppt/unpacked/ && echo "Clean done"
python3 /tmp/skills/pptx/scripts/office/pack.py /tmp/workspace/metronidazole-ppt/unpacked/ /tmp/workspace/metronidazole-ppt/metronidazole_20slides.pptx --original "/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4/pharmaceutics grp 9.pptx" && echo "Pack done"
python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/metronidazole-ppt/metronidazole_20slides.pptx') print(f'Final slide count: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.strip() for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] pics = [s for s in slide.shapes if s.shape_type == 13] pic_str = f' [+{len(pics)} img]' if pics else '' title = texts[0][:60] if texts else '(no text)' print(f' Slide {i}: {title}{pic_str}') "
metronidazole 20slides
Presentation · PPTX
Do one thing add the transition/member intro slides which will make 24 slides but that doesn't matter and take idea from the previous ppt about which section will be present by which member or add that exact pages
python3 -c " from pptx import Presentation from pptx.util import Emu prs = Presentation('/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4/pharmaceutics grp 9.pptx') # Show member intro slides: 2, 11, 19, 27 for i in [2, 11, 19, 27]: slide = prs.slides[i-1] print(f'=== ORIGINAL SLIDE {i} ===') for shape in slide.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): print(f' [{shape.name}]: {repr(shape.text_frame.text.strip())}') print() "
python3 -c " from pptx import Presentation # Check current 20-slide order to know insertion points prs = Presentation('/tmp/workspace/metronidazole-ppt/metronidazole_20slides.pptx') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.strip().split(chr(10))[0] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] title = texts[0][:60] if texts else '(no text)' print(f'Slide {i}: {title}') "
python3 << 'EOF' from pptx import Presentation from pptx.util import Emu import copy from lxml import etree def copy_slide(source_prs, source_slide_idx, dest_prs, insert_position): """Copy a slide from source_prs into dest_prs at insert_position (0-indexed).""" source_slide = source_prs.slides[source_slide_idx] # Get the slide layout to use (use the same layout name if available, else first) layout_name = source_slide.slide_layout.name dest_layout = dest_prs.slide_layouts[0] for layout in dest_prs.slide_layouts: if layout.name == layout_name: dest_layout = layout break # Add a blank slide at the end dest_slide = dest_prs.slides.add_slide(dest_layout) # Copy all XML from source slide's spTree to dest slide's spTree # First, clear the dest slide's shapes dest_sp_tree = dest_slide.shapes._spTree # Remove all existing shapes except the first two (sp elements that come from layout) for child in list(dest_sp_tree): dest_sp_tree.remove(child) # Copy source slide's spTree children source_sp_tree = source_slide.shapes._spTree for child in source_sp_tree: dest_sp_tree.append(copy.deepcopy(child)) # Copy background if any source_bg = source_slide._element.find('.//{http://schemas.openxmlformats.org/presentationml/2006/main}bg') if source_bg is not None: dest_slide._element.insert(2, copy.deepcopy(source_bg)) # Now move this slide from the end to insert_position xml_slides = dest_prs.slides._sldIdLst # Get the last entry (the one we just added) slides_list = list(xml_slides) last_entry = slides_list[-1] xml_slides.remove(last_entry) xml_slides.insert(insert_position, last_entry) print(f" Inserted slide at position {insert_position+1}") return dest_slide # Load both presentations src_prs = Presentation('/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4/pharmaceutics grp 9.pptx') dest_prs = Presentation('/tmp/workspace/metronidazole-ppt/metronidazole_20slides.pptx') print(f"Source slides: {len(src_prs.slides)}") print(f"Dest slides before: {len(dest_prs.slides)}") # Source indices (0-based): 1, 10, 18, 26 → original slides 2, 11, 19, 27 # Insertions (0-based positions after previous inserts): # 1. After slide 1 → position 1 # 2. After slide 7 (was 6, now 7 after first insert) → position 7 # 3. After slide 14 (was 12, now 14 after two inserts) → position 14 # 4. After slide 20 (was 17, now 20 after three inserts) → position 20 print("\nInserting Member 1 intro (original slide 2) at position 2...") copy_slide(src_prs, 1, dest_prs, 1) # insert at index 1 (after slide 1) print("Inserting Member 2 intro (original slide 11) at position 8...") copy_slide(src_prs, 10, dest_prs, 7) # after slide 7 (Surface & Interfacial Tension was slide 7, now at 7) print("Inserting Member 3 intro (original slide 19) at position 15...") copy_slide(src_prs, 18, dest_prs, 14) # before Micellization print("Inserting Member 4 intro (original slide 27) at position 22...") copy_slide(src_prs, 26, dest_prs, 21) # before Chemical Stability print(f"\nDest slides after: {len(dest_prs.slides)}") # Verify slide order for i, slide in enumerate(dest_prs.slides, 1): texts = [s.text_frame.text.strip().split('\n')[0] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] title = texts[0][:60] if texts else '(no text)' print(f" Slide {i}: {title}") dest_prs.save('/tmp/workspace/metronidazole-ppt/metronidazole_24slides.pptx') print("\nSaved!") EOF
python3 << 'EOF' from pptx import Presentation import copy def copy_slide(source_prs, source_slide_idx, dest_prs, insert_position): source_slide = source_prs.slides[source_slide_idx] layout_name = source_slide.slide_layout.name dest_layout = dest_prs.slide_layouts[0] for layout in dest_prs.slide_layouts: if layout.name == layout_name: dest_layout = layout break dest_slide = dest_prs.slides.add_slide(dest_layout) dest_sp_tree = dest_slide.shapes._spTree for child in list(dest_sp_tree): dest_sp_tree.remove(child) source_sp_tree = source_slide.shapes._spTree for child in source_sp_tree: dest_sp_tree.append(copy.deepcopy(child)) source_bg = source_slide._element.find('.//{http://schemas.openxmlformats.org/presentationml/2006/main}bg') if source_bg is not None: dest_slide._element.insert(2, copy.deepcopy(source_bg)) xml_slides = dest_prs.slides._sldIdLst slides_list = list(xml_slides) last_entry = slides_list[-1] xml_slides.remove(last_entry) xml_slides.insert(insert_position, last_entry) return dest_slide src_prs = Presentation('/tmp/workspace/attachments/26fe8972-7088-43c4-ac07-0cdfd35fdaa4/pharmaceutics grp 9.pptx') dest_prs = Presentation('/tmp/workspace/metronidazole-ppt/metronidazole_20slides.pptx') # Correct insertions (0-indexed positions): # 1. Member 1 intro before slide 2 (What Is an Oral Suspension?) → insert at index 1 # 2. Member 2 intro before slide 7 (Surface & Interfacial Tension) → after 1st insert, it's at index 7, so insert at 7 # 3. Member 3 intro before slide 13 (Micellization & CMC) → after 2 inserts, was index 12, now 14, insert at 14 # 4. Member 4 intro before slide 18 (Chemical Stability) → after 3 inserts, was index 17, now 20, insert at 20 copy_slide(src_prs, 1, dest_prs, 1) # Member 1 after Title copy_slide(src_prs, 10, dest_prs, 7) # Member 2 before Surface phenomena (was slide 7, now at index 7 after shift) copy_slide(src_prs, 18, dest_prs, 14) # Member 3 before Micellization (was slide 13, index 12 → after 2 inserts: index 14) copy_slide(src_prs, 26, dest_prs, 20) # Member 4 before Chemical Stability (was slide 18, index 17 → after 3 inserts: index 20) print(f"Total slides: {len(dest_prs.slides)}") for i, slide in enumerate(dest_prs.slides, 1): texts = [s.text_frame.text.strip().split('\n')[0] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] title = texts[0][:60] if texts else '(no text)' print(f" Slide {i}: {title}") dest_prs.save('/tmp/workspace/metronidazole-ppt/metronidazole_24slides.pptx') print("\nSaved!") EOF
metronidazole 24slides
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title |
| 2 | Member 1 - Muhammad Sulaiman (Introduction of Dosage Form) |
| 3-7 | What Is a Suspension → Drug Profile → Formulation Relevance → Dosing → Formulation Composition |
| 8 | Member 2 - Hafza Rashid (Surface Phenomena) |
| 9-14 | Surface & Interfacial Tension → Polysorbate 80 → Wetting → Tween 80 → Xanthan Gum → Colloidal Silica |
| 15 | Member 3 - Ume Ummarah Attique (Physical Stability) |
| 16-20 | Micellization → Zeta Potential → Stokes' Law → Flocculation → Controlled Flocculation |
| 21 | Member 4 - Muhammad Afridi (Chemical & Microbial Stability + Conclusion) |
| 22-24 | Chemical Stability → pH Buffering → Conclusion |