PowerPoint slide copier utility with deep copying of shapes, images, and formatting
Project description
pptx-slide-copier
PowerPoint slide copier utility - Deep copy slides between presentations while preserving all formatting, images, and layouts.
Features
- Deep copy slides from one PowerPoint presentation to another
- Preserves all formatting, fonts, colors, and styles
- Copies images with correct relationship IDs
- Matches slide layouts via slide masters (supports custom layouts)
- Compatible with python-pptx 1.0.2+ API
- Handles themes and layout preservation
Installation
pip install pptx-slide-copier
For development:
git clone https://github.com/SpringMT/pptx-slide-copier.git
cd pptx-slide-copier
pip install -e ".[dev]"
Quick Start
from pptx import Presentation
from pptx_slide_copier import SlideCopier
# Open source and target presentations
source_prs = Presentation("source.pptx")
target_prs = Presentation("target.pptx")
# Copy slide 0 from source to target
copied_slide = SlideCopier.copy_slide(source_prs, 0, target_prs)
# Save the target presentation
target_prs.save("output.pptx")
Usage
Basic Slide Copying
from pptx import Presentation
from pptx_slide_copier import SlideCopier
# Load presentations
source = Presentation("template.pptx")
target = Presentation() # Create new presentation
# Copy first slide (index 0)
SlideCopier.copy_slide(source, 0, target)
# Copy multiple slides
for i in range(3):
SlideCopier.copy_slide(source, i, target)
target.save("output.pptx")
Copying to Presentation Based on Template
For best results (to preserve themes and layouts), create the target presentation from the same template:
from pptx import Presentation
from pptx_slide_copier import SlideCopier
# Load template
template = Presentation("template.pptx")
# Create target from same template to preserve theme
target = Presentation("template.pptx")
# Remove all slides from target
while len(target.slides) > 0:
rId = target.slides._sldIdLst[0].rId
target.part.drop_rel(rId)
del target.slides._sldIdLst[0]
# Now copy slides
SlideCopier.copy_slide(template, 0, target)
target.save("output.pptx")
How It Works
Deep Copying at XML Level
The library uses deepcopy at the XML element level to ensure all shape properties, formatting, and attributes are preserved:
from copy import deepcopy
new_element = deepcopy(shape.element)
dest_slide.shapes._spTree.insert_element_before(new_element, "p:extLst")
Image Relationship Mapping
Images are copied with proper relationship ID mapping to ensure they display correctly:
- Copy image data from source slide
- Add image to target presentation
- Map old relationship IDs to new ones
- Update XML references in copied shapes
Layout Matching
Slide layouts are matched via slide masters to support custom layouts:
- Find source slide's layout and master
- Match master by name in target presentation
- Find matching layout within the matched master
- Fall back to index-based matching if name match fails
Technical Details
- python-pptx 1.0.2+ compatibility: Handles both old and new API for
get_or_add_image_part() - XML namespaces: Correctly handles presentationml, drawingml, and relationship namespaces
- Theme preservation: Works best when target presentation is created from same template
- Error handling: Gracefully continues if individual shapes or images fail to copy
Testing
pytest
With coverage:
pytest --cov=pptx_slide_copier --cov-report=html
License
MIT
Author
SpringMT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pptx_slide_copier-0.1.4.tar.gz.
File metadata
- Download URL: pptx_slide_copier-0.1.4.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5922ca1cd175071f3dfe2ec492e6e463dd4e2c0973fe0ed6dceff27c8de9718
|
|
| MD5 |
d85c5449dac3718326e102b736072257
|
|
| BLAKE2b-256 |
1e78d997c99adeb53ccfd72dca3eee9e5ff34af3e18ec5b82e118eb193e2e3f4
|
File details
Details for the file pptx_slide_copier-0.1.4-py3-none-any.whl.
File metadata
- Download URL: pptx_slide_copier-0.1.4-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
441ccc80f4c41d756a8f3daffc318888184fd005fd592ecf10fe7da85d9ada58
|
|
| MD5 |
1627a3e640836277e803b35ddd64a6cc
|
|
| BLAKE2b-256 |
6dfe11b13afe8a3879e8351ccfb293169da4ebf07e5ba485e9ea3751a4dd218b
|