Created
April 28, 2016 10:56
-
Star
(103)
You must be signed in to star a gist -
Fork
(12)
You must be signed in to fork a gist
-
-
Save mp4096/1a2279ec7b3dfec659f58e378ddd9aee to your computer and use it in GitHub Desktop.
Batch convert PowerPoint files to PDF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Batch convert all .ppt/.pptx files encountered in folder and all its subfolders | |
# The produced PDF files are stored in the invocation folder | |
# | |
# Adapted from http://stackoverflow.com/questions/16534292/basic-powershell-batch-convert-word-docx-to-pdf | |
# Thanks to MFT, takabanana, ComFreek | |
# | |
# If PowerShell exits with an error, check if unsigned scripts are allowed in your system. | |
# You can allow them by calling PowerShell as an Administrator and typing | |
# ``` | |
# Set-ExecutionPolicy Unrestricted | |
# ``` | |
# Get invocation path | |
$curr_path = Split-Path -parent $MyInvocation.MyCommand.Path | |
# Create a PowerPoint object | |
$ppt_app = New-Object -ComObject PowerPoint.Application | |
# Get all objects of type .ppt? in $curr_path and its subfolders | |
Get-ChildItem -Path $curr_path -Recurse -Filter *.ppt? | ForEach-Object { | |
Write-Host "Processing" $_.FullName "..." | |
# Open it in PowerPoint | |
$document = $ppt_app.Presentations.Open($_.FullName) | |
# Create a name for the PDF document; they are stored in the invocation folder! | |
# If you want them to be created locally in the folders containing the source PowerPoint file, replace $curr_path with $_.DirectoryName | |
$pdf_filename = "$($curr_path)\$($_.BaseName).pdf" | |
# Save as PDF -- 17 is the literal value of `wdFormatPDF` | |
$opt= [Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType]::ppSaveAsPDF | |
$document.SaveAs($pdf_filename, $opt) | |
# Close PowerPoint file | |
$document.Close() | |
} | |
# Exit and release the PowerPoint object | |
$ppt_app.Quit() | |
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ppt_app) |
Thanks. This was very helpful
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
From the answer you linked, I've found that running the garbage collector and finalizer thread twice fully closes powerpoint after the script runs, e.g.
And with this, I did not need the following last line from the script: