Converting a PowerPoint deck (.pptx or .ppt) to PDF produces a fixed-layout file that opens the same on every device, cannot be edited by mistake, and does not need PowerPoint to view. This guide covers five methods: PowerPoint's built-in export, LibreOffice headless CLI, Python automation, Node.js automation, and Google Slides. It also fixes the two problems that trip up most slide exports: substituted fonts and missing speaker notes.
How to convert PowerPoint to PDF in Microsoft PowerPoint
Microsoft PowerPoint has a built-in PDF export under File, Export. It produces one PDF page per slide at the deck's exact slide size, with vector text and shapes.
Windows:
- Open the .pptx file in PowerPoint.
- Click File, then Export, then Create PDF/XPS Document, and click Create PDF/XPS.
- In the dialog, click Options to choose what to publish: slides, handouts, notes pages, or an outline, plus the slide range.
- Pick a location and click Publish.
macOS:
- Open the .pptx file in PowerPoint.
- Click File, then Export, and choose PDF from the File Format dropdown.
- Set the range if needed, then click Export.
PowerPoint's own export produces the most faithful PDF because it uses the same layout engine that displays the slides on screen. It preserves gradients, shadows, SmartArt, and charts. This is the best option for one-off conversions when you have a PowerPoint license.
How to convert PowerPoint to PDF with LibreOffice (free, no license)
LibreOffice is a free, open-source office suite that reads .pptx and .ppt files and exports PDF from the command line without a GUI. It runs on Linux, macOS, and Windows and is the standard choice for servers and CI pipelines.
Install LibreOffice
# macOS
brew install --cask libreoffice
# Ubuntu / Debian
sudo apt install libreoffice
# Windows (winget)
winget install LibreOfficeConvert a single file
libreoffice --headless --convert-to pdf deck.pptxThe --headless flag runs LibreOffice without opening a window. The output deck.pdf appears in the current directory, one slide per page. Shapes and text render as vector graphics, and images keep their embedded resolution.
Convert every .pptx in a directory
libreoffice --headless --convert-to pdf --outdir ./pdfs *.pptxLibreOffice processes files one at a time. On a 2024 MacBook Pro (M3), a 20-slide deck with images and charts converts in about 2 to 4 seconds. A 60-slide deck with dense graphics takes 6 to 12 seconds. The same LibreOffice headless workflow applies to Word and Excel files.
LibreOffice reads the slide size stored in the .pptx and produces a PDF page of matching dimensions. It renders slides only, not the notes layout. To include speaker notes, use PowerPoint or Google Slides, covered below.
How to fix fonts so slides look right
The most common PowerPoint to PDF problem is font substitution: text that looks correct in PowerPoint shifts, wraps differently, or spills off the slide in the PDF. This happens when the font used in the deck is not installed on the machine doing the conversion.
Two fixes cover almost every case:
| Fix | How | When to use |
|---|---|---|
| Embed fonts in the deck | File, Options, Save, tick Embed fonts in the file | You control the .pptx and export with PowerPoint |
| Install fonts on the server | Add the .ttf/.otf files to the OS font directory | You convert with LibreOffice on Linux or CI |
For LibreOffice on Linux, install the Microsoft core fonts package so Calibri, Cambria, and Arial resolve correctly. Calibri is the default PowerPoint body font, so a server without it substitutes a wider or narrower face and every text box reflows. After installing fonts, clear the LibreOffice font cache by removing the user profile directory, then re-run the conversion.
Embedding fonts in the .pptx is the most portable fix because the file carries its own typefaces. It adds roughly 1 to 4 MB per deck depending on how many font families are used, and it only works for fonts whose license permits embedding.
How to convert PowerPoint to PDF with speaker notes
To keep speaker notes in the PDF, export from PowerPoint or Google Slides with a notes layout, because LibreOffice's CLI exports slides only.
In PowerPoint: File, Export, Create PDF/XPS, click Options, and under Publish what choose Notes Pages. Each PDF page then shows the slide at the top and the notes below it. Choose Handouts instead to fit two, three, or six slides per page for printing.
In Google Slides: File, Download is limited to slides, but File, Print, then Notes view in the print dialog, produces a notes-per-page PDF through the browser's print-to-PDF. For automation with notes, PowerPoint COM on Windows is the only method that exposes the notes layout programmatically.
How to convert PowerPoint to PDF in Python
Python has two practical approaches: call LibreOffice through subprocess for cross-platform servers, or drive PowerPoint through COM automation on Windows for exact fidelity.
Using subprocess with LibreOffice
This works on any operating system with LibreOffice installed and needs no PowerPoint license.
import subprocess
from pathlib import Path
def pptx_to_pdf(input_path: str, output_dir: str = ".") -> str:
"""Convert a .pptx file to PDF using LibreOffice headless."""
subprocess.run(
["libreoffice", "--headless", "--convert-to", "pdf",
"--outdir", output_dir, input_path],
check=True,
timeout=120,
)
stem = Path(input_path).stem
return str(Path(output_dir) / f"{stem}.pdf")
pdf_path = pptx_to_pdf("q3-review.pptx", "./output")
print(f"Saved: {pdf_path}")Batch convert a directory
from pathlib import Path
import subprocess
input_dir = Path("./decks")
output_dir = Path("./pdfs")
output_dir.mkdir(exist_ok=True)
pptx_files = list(input_dir.glob("*.pptx"))
for pptx in pptx_files:
subprocess.run(
["libreoffice", "--headless", "--convert-to", "pdf",
"--outdir", str(output_dir), str(pptx)],
check=True,
timeout=180,
)
print(f"Converted {len(pptx_files)} files")Using PowerPoint COM on Windows
When exact PowerPoint fidelity matters and the script runs on Windows with PowerPoint installed, drive PowerPoint directly through pywin32. This is the only Python path that can export notes pages.
import win32com.client
powerpoint = win32com.client.Dispatch("PowerPoint.Application")
deck = powerpoint.Presentations.Open(
r"C:\decks\q3-review.pptx", WithWindow=False
)
# 32 = ppFixedFormatTypePDF
deck.ExportAsFixedFormat(r"C:\decks\q3-review.pdf", 32)
deck.Close()
powerpoint.Quit()LibreOffice does not support concurrent conversions from one install directory. For parallel processing, give each worker its own
--user-installprofile, or run conversions sequentially in a queue.
How to convert PowerPoint to PDF in Node.js
The libreoffice-convert npm package wraps the LibreOffice CLI and returns a Buffer, which fits backends that already handle uploaded decks.
npm install libreoffice-convertimport { readFileSync, writeFileSync } from "fs";
import { convert } from "libreoffice-convert";
import { promisify } from "util";
const convertAsync = promisify(convert);
async function pptxToPdf(inputPath: string, outputPath: string) {
const input = readFileSync(inputPath);
const pdf = await convertAsync(input, ".pdf", undefined);
writeFileSync(outputPath, pdf);
console.log(`Saved: ${outputPath}`);
}
pptxToPdf("pitch.pptx", "pitch.pdf");This spawns a LibreOffice process per conversion, so it fits low-volume or batch workloads rather than a high-throughput API endpoint. For a request-per-second API, keep a warm LibreOffice pool or move to direct HTML rendering (covered below).
How to convert PowerPoint to PDF with Google Slides
Google Slides converts .pptx to PDF in the browser with no local software. Upload the file to Google Drive, open it in Slides, then use File, Download, PDF document. Each slide becomes one PDF page at the deck's slide size.
For automation, the Google Slides export URL returns a PDF for a presentation you own:
https://docs.google.com/presentation/d/PRESENTATION_ID/export/pdf
This is a practical path when your decks already live in Google Drive. It exports slides only, not notes, so use the print-to-PDF route for notes pages.
Comparison: which PowerPoint to PDF method to use?
| Method | Requires PowerPoint license | Runs headless | Layout fidelity | Notes pages | Best for |
|---|---|---|---|---|---|
| Microsoft PowerPoint | Yes | No | Exact | Yes | One-off, highest fidelity |
| LibreOffice CLI | No | Yes | High | No | Servers, CI/CD, batch |
| Python (subprocess) | No | Yes | High | No | Linux and cross-platform scripts |
| Python (win32com) | Yes (Windows) | Yes | Exact | Yes | Windows servers with PowerPoint |
| Node.js (libreoffice-convert) | No | Yes | High | No | Node.js backends |
| Google Slides | No | Yes (cloud) | Good | Via print | No local install, cloud-first |
For production servers that need no license, LibreOffice with the deck's fonts installed is the standard choice. PowerPoint's own export is the most accurate and the only option that includes notes pages without extra work. Both produce vector text and shapes, so slides stay sharp at any zoom.
Common PowerPoint to PDF issues and fixes
Fonts look wrong or text overflows the slide. The font used in the deck is not installed on the conversion machine, so LibreOffice substitutes a different one. Fix: install the exact fonts (Microsoft core fonts for Calibri and Cambria on Linux), or embed fonts in the .pptx via File, Options, Save.
Animations and transitions are gone. A PDF is static, so every animation collapses to its final frame and each slide becomes one page. This is expected. To keep motion, export to video with File, Export, Create a Video instead.
The PDF page is the wrong shape. The PDF matches the deck's slide size. A 16:9 deck gives a landscape page, a 4:3 deck gives a squarer one. Fix: set the size in Design, Slide Size before exporting.
Embedded video or audio is missing. PDF does not support playable media, so PowerPoint drops it and keeps only the poster image. Link to the media externally if viewers need it.
The PDF is very large. Decks with high-resolution photos produce large PDFs. After conversion, run the file through the PDF4.dev compress tool. A 30 MB slide deck with photos typically drops to 4 to 8 MB. To combine several exported decks into one document, use the merge PDF tool, and to pull out a single section use the split PDF tool.
When to generate a PDF from data instead of PowerPoint
PowerPoint to PDF works well for decks a person built and wants to share as a fixed document. But for reports, one-pagers, and pitch summaries you generate from data on a schedule, starting from a .pptx is fragile. Font substitution, slide-size drift, and manual layout compound when you produce hundreds of documents a day.
PDF4.dev takes a different path: you write an HTML template with CSS for exact layout, inject the values through Handlebars variables, and render the PDF with a headless browser. The rendering engine (Chromium) is the same one that displays the template in a browser, so the output is identical every time, with no font-cache or slide-size guesswork.
const response = await fetch("https://api.pdf4.dev/v1/render", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PDF4_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
template_id: "sales-one-pager",
data: {
client: "Acme Corp",
quarter: "Q3 2026",
highlights: [
{ metric: "Revenue", value: "$1.24M" },
{ metric: "New logos", value: "18" },
],
},
}),
});
const pdf = await response.arrayBuffer();This produces a landscape page with exact fonts, exact positioning, and no font-substitution surprises, because you control the layout in CSS instead of a slide editor. For data-driven documents at scale, HTML to PDF with PDF4.dev is more predictable than converting .pptx files. It is the same reasoning that applies to converting Excel to PDF for generated reports.
Try the free HTML to PDF toolTry it freeSummary
- Embed fonts or install them on the server first, so text does not reflow when the deck moves to another machine.
- For one-off conversions with a license, use PowerPoint's File, Export, Create PDF/XPS. It is the only method that includes notes pages without extra work.
- For free conversions without PowerPoint, install LibreOffice and run
libreoffice --headless --convert-to pdf deck.pptx. - For Python automation, call LibreOffice through
subprocess, or usewin32comon Windows with PowerPoint installed. - For Node.js backends, use the
libreoffice-convertnpm package. - For cloud-first workflows, export from Google Slides via File, Download, PDF document.
- For documents you generate from data, skip the slide file and render directly from an HTML template with PDF4.dev for exact control over layout, fonts, and page size. See the complete guide to PDF conversion for the full picture, and convert Word to PDF for the document side of Office.
Start generating PDFs
Build PDF templates with a visual editor. Render them via API from any language in ~300ms.



