🗃️ Convertire un file PowerPoint in PDF con Python: uno script snello e utile

  


Quando si lavora con presentazioni PowerPoint, può essere utile esportare solo alcune slide in formato PDF. Lo script Python che presentiamo oggi permette di fare esattamente questo, con due modalità: inserendo manualmente il range di slide oppure lasciando che il programma identifichi automaticamente dove termina la parte principale della presentazione (prima degli "Annex").

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

📦 Requisiti

Per eseguire lo script è necessario avere installato:

  • Python
  • Il modulo python-pptx:
    pip install python-pptx
  • Il pacchetto pywin32 per interfacciarsi con PowerPoint:
    pip install pywin32
  • Microsoft PowerPoint installato sul PC (solo Windows).

🐍 Script di conversione da pptx a pdf

import os
import win32com.client
from pptx import Presentation

def getLastSlide(file_path):
    prs = Presentation(file_path)

    # To get shapes in your slides
    slides = [slide for slide in prs.slides]
    slide_counter = 0
    found = False
    for slide in slides:
        slide_counter += 1
        for shape in slide.shapes:
            if shape.has_text_frame:
                if shape.text.find("Annex") != -1 or shape.text.find("ANNEX") != -1:
                    found = True
                    break

        if found:
            break

    return slide_counter - 1


if __name__ == "__main__":
    home_dir = os.path.expanduser("~")
    dir_file_pptx = home_dir + "\\Downloads\\"
    print("Il file pptx inserito deve risiedere nella cartella " + dir_file_pptx)

    print("\n")
    nome_file = input("Nome del file pptx (o premi Enter per usare il default test.pptx): ")
    if nome_file == "":
        nome_file = "test.pptx"

    file_pptx = dir_file_pptx + nome_file
    print("\nFile da convertire: " + file_pptx)

    range_slides = input("\nDigita il range di slides da esportare in PDF (es. 1-10) oppure digita a per identificare "
                         "automaticamente l'ultima slide: ")

    start = end = 0

    if range_slides == "a": # recupero automaticamente l'ultima slide cercando la slide con testo "Annex"
        end = getLastSlide(file_pptx)
        if end <= 0:
            range_slides = input("\nNon sono riuscito ad identificare l'ultima slide. Digita il range di slides da "
                                 "esportare in PDF (es. 1-10): ")
        else:
            range_slides=f"1-{end}"

    start = int(range_slides.split("-")[0])
    end = int(range_slides.split("-")[1])

    print(f"\nConversione in PDF da slide {start} a slide {end}...")

    powerpoint = win32com.client.Dispatch("Powerpoint.Application")
    powerpoint.Visible = 1

    doc = powerpoint.Presentations.Open(file_pptx)
    doc.Slides.Range(range(start, end + 1)).copy()

    #new pptx with only the slides range copied from doc pptx
    outputPresentation = powerpoint.Presentations.Add()
    outputPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting")
    #save new pptx as PDF
    pdfname = os.path.splitext(file_pptx)[0] + ".pdf"
    outputPresentation.SaveAs(pdfname, 32)  

    print("Conversione eseguita. File " + pdfname + " salvato correttamente.")

    doc.Close()
    outputPresentation.Close()
    powerpoint.Quit()
    os.system('taskkill /F /IM POWERPNT.EXE')

    input("\nPremi Enter per uscire...")

🔍 Come funziona lo script

1. Selezione del file

Lo script cerca il file .pptx nella cartella Downloads dell’utente. All’avvio, chiede all’utente di inserire il nome del file PowerPoint da convertire. Se non viene fornito nulla, userà il file test.pptx.

home_dir = os.path.expanduser("~")
dir_file_pptx = home_dir + "\\Downloads\\"
nome_file = input("Nome del file pptx...")

2. Scelta delle slide da esportare

L’utente può:

  • Inserire un range (es. 1-10)
  • Digitare a per lasciare che lo script identifichi l’ultima slide prima degli "Annex" (utile se il file contiene appendici).

Per fare questo, viene usata la funzione getLastSlide(file_path) che analizza ogni slide cercando la parola “Annex” o “ANNEX” e ritorna l’indice della slide precedente.

if range_slides == "a":
    end = getLastSlide(file_pptx)

3. Conversione in PDF

Lo script utilizza COM automation (win32com.client) per interfacciarsi con PowerPoint e creare un nuovo file con solo le slide desiderate.

doc = powerpoint.Presentations.Open(file_pptx)
doc.Slides.Range(range(start, end + 1)).copy()

Successivamente incolla le slide in una nuova presentazione, mantenendo la formattazione originale:

outputPresentation = powerpoint.Presentations.Add()
outputPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting")

Infine salva il nuovo file come PDF:

pdfname = os.path.splitext(file_pptx)[0] + ".pdf"
outputPresentation.SaveAs(pdfname, 32)

💡 Perché è utile?

  • ✅ Separa la presentazione principale da eventuali allegati ("Annex")
  • ✅ Mantiene il layout e la formattazione originali
  • ✅ Salva direttamente in PDF pronto da condividere

⚠️ Limitazioni

  • Funziona solo su Windows, perché usa l’automazione COM di PowerPoint.
  • Non supporta LibreOffice o PowerPoint Online.
  • L’identificazione automatica della slide finale cerca solo il testo “Annex”: potrebbe non funzionare in tutte le situazioni.

▶️ Come usare lo script

  1. Salva lo script in un file, ad esempio pptx_to_pdf.py
  2. Posiziona il file .pptx da convertire nella cartella Downloads
  3. Esegui lo script con:
    python pptx_to_pdf.py
  4. Segui le istruzioni nel terminale.

📌 Conclusione

Questo script è un ottimo esempio di automazione Python con applicazioni reali, in grado di semplificare il processo di esportazione di slide da PowerPoint a PDF. È particolarmente utile in contesti lavorativi dove le presentazioni contengono materiali sensibili o lunghi allegati che non devono essere inclusi nella versione finale in PDF.



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment