borussemd
Goto Top

PPT zu PNG PS Script

Hallo allerseits,

ich versuche mich gerade step by step einer Automatisierung zu nähern und würde gerne das geballte Schwarmwissen dieses Boards anzapfen.
Die Situation sieht wie folgt aus:

Diverse Mitarbeiter erstellen PowerPoint Folien in einem bestimmten Ordner. Für jeden Tag (Mo. - Sa.) je eine eigene Datei mit nur einer Folie.
Die Folien zb für KW 30 sind spätestens Donnerstag in KW 29 fertig.
Nun möchte ich Freitags eine Automatisierung die:
- Jede ppt Datei der Folgewoche öffnet (ppt´s sind schreibgeschützt. Das Script müsste also das Passwort absetzen können)
- ppt in png exportieren
- Irfanview Batch-Konvertierung starten (hier soll jedes png zugeschnitten und skaliert werden)
- Alle 6 png´s in einem Netzwerkshare ablegen

Da ich selbst kein Programmierer bin, kann ich mir den Ablauf nur theoretisch vorstellen. Wenn mir gesagt wird, dass das so nicht gehen kann, ok, dann akzeptiere ich das und suche eine andere Lösung.
Wenn aber jemand diesen Ablauf für programmierbar hält, wäre ich sehr dankbar, wenn derjenige Lust hat mich bei dem Script zu unterstützen.

Danke und Gruß
bmd

Content-Key: 979525182

Url: https://administrator.de/contentid/979525182

Printed on: April 24, 2024 at 17:04 o'clock

Member: colinardo
colinardo Jul 12, 2021 updated at 12:25:21 (UTC)
Goto Top
Servus bmd,
ja das ist möglich, hier mal ein erster Ansatz für dich zum Anpassen per Powershell dazu (Kommentare siehe Code)
Btw. den Schritt über das externe Tool Irfanview könnte man sich mit der Powershell auch sparen, die kann nämlich auch problemlos Bilder bearbeiten und verkleinern,/vergrößern face-wink.
# source path for presentations
$ppt_source = 'D:\Presentationen'  
# target share path
$networkshare ='\\Server\Share'  
# open and edit passwords for presentations
$openpassword = '123456'  
$editpassword = '123456'  
# path to irfanview executable
$irfanviewpath = 'D:\iview\i_view64.exe'  
# --------------------
Add-Type -A System.Drawing
# create powerpoint com object
$pp = New-Object -Com Powerpoint.Application
# disable dialogs
$pp.DisplayAlerts = 1
# for each pptx file in source folder
ls $ppt_source -Filter *.pptx -File | %{
    # open presentation in protected view window (workaround to open file with password protection)
    $docview = $pp.ProtectedViewWindows.Open($_.FullName,$openpassword)
    # enter edit password (needed to export slides from presentation)
    $doc = $docview.Edit($editpassword)
    # if presentation has slides
    if ($doc.slides.Count -gt 0 ){
	$pngpath = "$ppt_source\$($_.Basename).png"  
        # export first slide to same path as presentation with *.png file extension
        $doc.slides[1].Export($pngpath,'png')  
        # get size from png
        $png = [System.Drawing.Image]::FromFile($pngpath)
        # crop 50px from bottom
        $w = $png.Width;$h = $png.Height - 50
        # free png ressources
        $png.Dispose()
        # process png with irfanview (crop 50px from bottom, rotate right 90° resample and resize longest side to 1080px)
        &$irfanviewpath "$pngpath" "/crop=(0,0,$w,$h)" /rotate_r /resample /resize_long=1080 /aspectratio /convert="$pngpath"  
    }
    # close presentation
    $doc.Close()
}
# enable dialogs
$pp.DisplayAlerts = 2
# cleanup
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($pp)
Stop-Process -Name POWERPNT -EA SilentlyContinue

# finally move png's to network share 
move-item "$ppt_source\*.png" -Destination $networkshare -Verbose  
Persönliche Anpassungen und Support dazu dazu gibt es von meiner Seite nur per PN

Grüße Uwe
Member: borussemd
borussemd Jul 12, 2021 at 09:46:37 (UTC)
Goto Top
Mega!
Erstmal 1000 Dank für´s teilen. Ich klamüser das mal auseinander, passe die Variablen an und würde dich kontaktieren, wenn es irgendwo zwickt oder kneift.

Danke und Gruß
bmd