Metadata-Version: 2.4
Name: svg2ooxml
Version: 0.6.2
Summary: SVG to Office Open XML conversion toolkit.
Author: SVG2OOXML Contributors
License-Expression: AGPL-3.0-only
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: LICENSE-COMMERCIAL.md
License-File: LICENSE-CONTENT
Requires-Dist: tinycss2>=1.2
Requires-Dist: click>=8.1
Requires-Dist: lxml>=4.9.0
Provides-Extra: dev
Requires-Dist: black>=24.0; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: isort>=5.12; extra == "dev"
Requires-Dist: mypy>=1.8; extra == "dev"
Requires-Dist: pre-commit>=3.5; extra == "dev"
Requires-Dist: pytest>=7.4; extra == "dev"
Requires-Dist: ruff>=0.4.0; extra == "dev"
Requires-Dist: python-pptx>=0.6.23; extra == "dev"
Provides-Extra: accel
Requires-Dist: numpy>=1.24; extra == "accel"
Provides-Extra: color
Requires-Dist: numpy>=1.24; extra == "color"
Requires-Dist: colorspacious>=1.1.0; extra == "color"
Requires-Dist: Pillow>=10.0; extra == "color"
Provides-Extra: render
Requires-Dist: skia-python>=87.5; extra == "render"
Requires-Dist: Pillow>=10.0; extra == "render"
Requires-Dist: numpy>=1.24; extra == "render"
Provides-Extra: slides
Requires-Dist: cryptography>=41.0; extra == "slides"
Provides-Extra: api
Requires-Dist: fastapi>=0.109.0; extra == "api"
Requires-Dist: uvicorn[standard]>=0.27.0; extra == "api"
Requires-Dist: pydantic>=2.5.3; extra == "api"
Requires-Dist: python-multipart>=0.0.6; extra == "api"
Requires-Dist: PyJWT>=2.8.0; extra == "api"
Provides-Extra: cloud
Requires-Dist: google-cloud-firestore>=2.14.0; extra == "cloud"
Requires-Dist: google-cloud-storage>=2.14.0; extra == "cloud"
Requires-Dist: google-cloud-iam>=2.14.0; extra == "cloud"
Requires-Dist: google-cloud-tasks>=2.16.0; extra == "cloud"
Requires-Dist: google-api-python-client>=2.130; extra == "cloud"
Requires-Dist: google-auth>=2.26; extra == "cloud"
Requires-Dist: google-auth-oauthlib>=1.2.0; extra == "cloud"
Provides-Extra: payments
Requires-Dist: stripe>=8.0.0; extra == "payments"
Provides-Extra: visual-testing
Requires-Dist: scikit-image>=0.21.0; extra == "visual-testing"
Requires-Dist: Pillow>=10.0.0; extra == "visual-testing"
Dynamic: license-file

<p align="center">
  <img src="https://raw.githubusercontent.com/BramAlkema/svg2ooxml/main/assets/logo.png" alt="svg2ooxml" width="96">
</p>

<h1 align="center">svg2ooxml</h1>

<p align="center">
  <strong>Convert SVG to PowerPoint with native DrawingML fidelity.</strong>
</p>

<p align="center">
  <a href="https://pypi.org/project/svg2ooxml/"><img src="https://img.shields.io/pypi/v/svg2ooxml" alt="PyPI"></a>
  <a href="https://pypi.org/project/svg2ooxml/"><img src="https://img.shields.io/pypi/dm/svg2ooxml" alt="Downloads"></a>
  <a href="https://pypi.org/project/svg2ooxml/"><img src="https://img.shields.io/pypi/pyversions/svg2ooxml" alt="Python"></a>
  <a href="https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="License: AGPL-3.0"></a>
</p>

---

svg2ooxml parses SVG markup, builds a typed intermediate representation, renders native DrawingML XML fragments, and packages them into valid `.pptx` files. Shapes, text, gradients, filters, masks, clipping paths, and SMIL animations are converted to editable PowerPoint objects — not rasterized images.

## Features

- **Native DrawingML output** — shapes, text, and paths render as editable PowerPoint objects
- **SMIL animation support** — entrance, emphasis, exit, and motion path animations
- **SVG filter effects** — blur, drop shadow, color matrix, and compositing
- **Gradients & patterns** — linear, radial, and pattern fills with correct coordinate transforms
- **Masks & clipping** — SVG clip paths and masks mapped to OOXML equivalents
- **Multi-slide export** — split multi-page SVGs into separate slides
- **Figma plugin** — browser-based export from Figma to Google Slides
- **Extensible pipeline** — service registry with dependency injection for custom providers

## Installation

```bash
pip install svg2ooxml
```

Optional extras:

```bash
pip install svg2ooxml[render]    # Skia rendering + visual comparison
pip install svg2ooxml[color]     # Advanced color space support
pip install svg2ooxml[slides]    # Google Slides integration
pip install svg2ooxml[api]       # FastAPI service
pip install svg2ooxml[cloud]     # Google Drive/Slides API client
```

## Quick Start

```python
from svg2ooxml import SvgToPptxExporter

exporter = SvgToPptxExporter()
exporter.export("input.svg", "output.pptx")
```

### CLI

```bash
svg2ooxml convert input.svg -o output.pptx
```

## How It Works

```
SVG text
  → SVGParser.parse()            → ParseResult (lxml tree + metadata)
  → convert_parser_output()      → IRScene (typed intermediate representation)
  → DrawingMLWriter.render()     → DrawingMLRenderResult (XML fragments + assets)
  → PPTXPackageBuilder.write()   → .pptx file
```

## Links

- [GitHub](https://github.com/BramAlkema/svg2ooxml)
- [Documentation](https://github.com/BramAlkema/svg2ooxml/tree/main/docs)
- [Changelog](https://github.com/BramAlkema/svg2ooxml/releases)

## License

Dual-licensed: [AGPL-3.0](https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE) for open source, [Commercial License](https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE-COMMERCIAL.md) for proprietary use. Contact license@svg2ooxml.com.
