Come Creare un Programma per Convertire Documenti in PDF

Come Creare un Programma per Convertire Documenti in PDF

Come Creare un Programma per Convertire Documenti in PDF

Introduzione

Il formato PDF (Portable Document Format) è uno dei formati più utilizzati per la condivisione di documenti in modo affidabile, indipendentemente dal software, hardware o sistema operativo utilizzato. In questo tutorial, impareremo come creare un programma che converte vari tipi di documenti in PDF. Utilizzeremo il linguaggio di programmazione Python e alcune librerie esterne per gestire la conversione.

Prerequisiti

Prima di iniziare, assicurati di avere:

  • Python installato sul tuo computer (versione 3.x).
  • Conoscenza di base del linguaggio Python.
  • Un ambiente di sviluppo o un editor di testo per scrivere il codice.

Installazione delle Librerie

Per convertire i documenti in PDF, utilizzeremo due librerie Python: reportlab per creare PDF da zero e python-docx per leggere i documenti Word. Installiamole usando pip:

pip install reportlab python-docx

Creazione di un PDF Semplice con ReportLab

Prima di convertire documenti esistenti, vediamo come creare un semplice PDF con ReportLab.

from reportlab.pdfgen import canvas

def create_pdf(output_filename):
    c = canvas.Canvas(output_filename)
    c.drawString(100, 750, "Benvenuto nel PDF creato con ReportLab!")
    c.save()

create_pdf("hello.pdf")

Questo script crea un PDF chiamato hello.pdf con una semplice stringa di testo.

Convertire un Documento Word in PDF

Ora, passiamo alla conversione di un documento Word in PDF. Per fare ciò, dobbiamo prima leggere il documento Word, poi creare un PDF e infine scrivere il contenuto del documento Word nel PDF.

from docx import Document
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def docx_to_pdf(docx_filename, pdf_filename):
    ## Carica il documento Word
    doc = Document(docx_filename)
    
    ## Crea un oggetto PDF con ReportLab
    c = canvas.Canvas(pdf_filename, pagesize=letter)
    width, height = letter
    
    for i, paragraph in enumerate(doc.paragraphs):
        text = paragraph.text
        c.drawString(72, height - 72 * (i + 2), text)
    
    c.save()

docx_to_pdf("example.docx", "example.pdf")

Questo script converte un documento Word chiamato example.docx in un PDF chiamato example.pdf. Ogni paragrafo del documento Word viene scritto in una nuova riga nel PDF.

Gestione di Formattazione e Immagini

Il codice sopra non gestisce la formattazione del testo o le immagini. Per un’applicazione più robusta, dovremmo migliorare il nostro script per gestire questi casi.

Formattazione del Testo

ReportLab consente di modificare lo stile del testo, come il font, la dimensione e il colore. Per applicare la formattazione, dobbiamo analizzare le proprietà di ogni paragrafo e run (un segmento di testo con la stessa formattazione) nel documento Word.

from reportlab.lib.styles import getSampleStyleSheet

styles = getSampleStyleSheet()

def apply_style(run):
    style = styles["Normal"]
    if run.bold:
        style = styles["Heading3"]
    if run.italic:
        style.fontName = 'Times-Italic'
    if run.underline:
        style = styles["Underline"]
    
    ## Imposta la dimensione del font
    style.fontSize = run.font.size.pt if run.font.size else 12
    
    ## Imposta il colore del font
    if run.font.color.rgb:
        style.textColor = reportlab.lib.colors.HexColor(run.font.color.rgb)
    
    return style

## Modifica la funzione docx_to_pdf per includere la formattazione
def docx_to_pdf(docx_filename, pdf_filename):
    ## ... (codice precedente)
    
    for i, paragraph in enumerate(doc.paragraphs):
        for run in paragraph.runs:
            style = apply_style(run)
            c.setFont(style.fontName, style.fontSize)
            c.setFillColor(style.textColor)
            c.drawString(72, height - 72 * (i + 2), run.text)
    
    ## ... (codice precedente)

Inserimento di Immagini

Per inserire immagini dal documento Word nel PDF, dobbiamo gestire gli oggetti di tipo InlineShape nel documento Word.

def insert_images(paragraph, c, y_position):
    for shape in paragraph.inline_shapes:
        image_stream = shape.image.blob
        image_filename = f"image_{shape._inline.graphic.graphicData.pic.nvPicPr.cNvPr.id}.jpg"
        with open(image_filename, "wb") as image_file:
            image_file.write(image_stream)
        
        c.drawImage(image_filename, 72, y_position)

## Modifica la funzione docx_to_pdf per includere le immagini
def docx_to_pdf(docx_filename, pdf_filename):
    ## ... (codice precedente)
    
    for i, paragraph in enumerate(doc.paragraphs):
        ## ... (codice precedente per il testo)
        insert_images(paragraph, c, height - 72 * (i + 2))
    
    ## ... (codice precedente)

Creazione di un’Interfaccia Utente

Per rendere il nostro programma più accessibile, possiamo creare un’interfaccia utente semplice utilizzando il modulo tkinter.

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

def select_file():
    filetypes = (
        ('Word files', '*.docx'),
        ('All files', '*.*')
    )

    filename = filedialog.askopenfilename(
        title='Open a file',
        initialdir='/',
        filetypes=filetypes)

    return filename

def convert_to_pdf():
    docx_file = select_file()
    if docx_file:
        pdf_file = docx_file.replace('.docx', '.pdf')
        try:
            docx_to_pdf(docx_file, pdf_file)
            messagebox.showinfo("Successo", f"Il file PDF è stato creato: {pdf_file}")
        except Exception as e:
            messagebox.showerror("Errore", str(e))

root = tk.Tk()
root.title("Convertitore DOCX in PDF")
root.geometry("300x150")

convert_button = tk.Button(root, text="Converti in PDF", command=convert_to_pdf)
convert_button.pack(expand=True)

root.mainloop()

Questo script crea una finestra con un pulsante che, quando premuto, apre un dialogo per selezionare un file Word e lo converte in PDF.

Conclusione

Abbiamo creato un programma Python per convertire documenti Word in PDF, gestendo la formattazione del testo e l’inserimento di immagini. Abbiamo anche aggiunto un’interfaccia utente semplice per facilitare l’uso del programma. Con ulteriori miglioramenti, questo programma può essere esteso per supportare altri tipi di documenti e funzionalità più avanzate.

Ricorda che questo è solo un esempio di base e che per applicazioni professionali potrebbero essere necessarie librerie e approcci più sofisticati. Inoltre, assicurati di rispettare i diritti d’autore e le licenze dei documenti che converti.

Buona programmazione e buona conversione dei tuoi documenti in PDF!


Scrivici se hai notato qualcosa che può essere migliorato

Accetto la privacy policy