Convert PPTX to PDF Over One API Call
python-pptx can't export PDF — it's a file-format library, not a renderer. The usual workarounds are PowerPoint COM automation or babysitting LibreOffice yourself. Now it's one HTTP call.
Posted by
Related reading
Your AI Agent Can Now Edit, Merge, Translate and PDF Decks — 8 MCP Tools
The PowerPoint Engine MCP server grew from 3 tools to 8: replace text in an existing deck, do slide surgery, merge presentations, convert to PDF and translate — all chainable in one agent conversation.
Markdown Tables and Combo Charts, Natively in PowerPoint
A markdown table becomes a styled, editable PowerPoint table. A combo chart with a secondary axis takes five lines. No python-pptx XML archaeology required.
Slide Surgery: What python-pptx Can't Do, Over One API Call
Duplicate, delete and reorder slides in an existing .pptx — the three oldest open python-pptx feature requests — now one HTTP call. Formatting untouched.
"How do I convert a .pptx to PDF in Python?" is one of the most-asked python-pptx questions, and the answer has been the same for a decade: you can't. python-pptx reads and writes the file format; it does not render slides, and the maintainer has been clear that rendering is out of scope. Every StackOverflow thread ends in one of two workarounds — and both hurt.
The two painful workarounds
- PowerPoint COM automation (comtypes / win32com): perfect fidelity, but you need a Windows machine with a licensed PowerPoint installed — a non-starter on Linux servers, Docker, or any serverless platform.
- LibreOffice headless: works on Linux, but now you own a ~700MB install, font packages, a user-profile lock that corrupts under concurrent requests, and a process that occasionally hangs and eats a CPU core forever.
Either way, the "simple" conversion becomes a piece of infrastructure you maintain.
One call instead
Upload any .pptx — one you generated with our API or one you already had — and get a download link for the PDF back:
curl -X POST https://powerpointengine.io/api/powerpoint/pdf \
-F "file=@quarterly-review.pptx"The response is JSON with a signed URL:
{
"success": true,
"result": {
"filename": "quarterly-review_1784024726358.pdf",
"downloadUrl": "https://storage.googleapis.com/...",
"fileSize": 26122,
"expiresAt": "2026-07-15T12:25:28.000Z"
}
}A typical deck converts in a couple of seconds. Behind the API we run the LibreOffice fleet for you — isolated per-request profiles, serialized conversions, hung-process timeouts — so none of that operational mess reaches your code.
Generate, then ship the PDF
This closes the loop for automated reporting: generate a deck from Markdown (tables and charts included), then convert it to PDF for email attachments, customer portals, or archives — two calls, no Windows box, no LibreOffice babysitting. See the API docs or the agent skill for details.