Esportare un file DOCx in PDF tramite C# e VB.Net

Articolo che illustra una tecnica su come esportare in PDF un documento Word 2010 tramite .Net 4.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

In questo articolo, vedremo come convertire un file DOCX in formato PDF, utilizzando il linguaggio Visual Basic .Net versione 2010 e C# versione 4 (2010) del pacchetto Microsoft Office 2010.
Si fa presente che per esportare in formato PDF, dobbiamo aver scaricato dal sito Microsoft il componente aggiuntivo per i formati PDF scaricabile dal seguente sito http://www.microsoft.com/downloads/details.aspx?familyid=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

Creazione del progetto.


Si crea un nuovo progetto di tipo Windows application, nella form che viene creata aggiungiamo un pulsante, in modo che tramite l’evento click del pulsante possiamo richiamare la funzione per la conversione in formato PDF.
Impostiamo la proprietà Name del pulsante in BtnConverti, mentre la proprietà text impostiamo il valore “Converti”.
Tramite il menu Progetto selezioniamo la voce “aggiungi riferimento”, nella finestra che viene aperta (figura 1) , selezioniamo il nome del componente denominato “Microsoft Word 14 object Library” , come mostrato in figura 1.


Figura 1

In questo modo abbiamo aggiunto nel nostro progetto un riferimento alla libreria di Microsoft Word 2010.

 

Stesura di codice

Passiamo in visualizzazione codice, aggiungiamo lo spazio dei nomi (namespace) per gestire le classi, enumerazioni e le interfacce di Microsoft Word 2010. Si fa notare che si è creato un alias, in modo che alcune classi non vadano in conflitto con la classe Form.
Qui di seguito si riporta il codice per lo spazio dei nomi.

VB.Net
Imports Microsoft.Office.Interop.Word

C#

using Microsoft.Office.Interop.Word;
using System.Windows.Forms;
using AppWord = Microsoft.Office.Interop.Word; //alias


Per utilizzare Word da .Net, dobbiamo creare due oggetti, uno per la gestione dell’applicazione Word, e quindi l’istanza di una classe di tipo application, e l’altro di tipo document per gestire il documento.
Qui di seguito, si riporta il codice completo per esportare il file Docx in formato PDF.


VB.Net

Dim wordApplication As New AppWord.Application()
        Dim wordDocument As New Document()
        'Creo i percorsi e nomi dei file docx e pdf
        Dim NomeFileDocx As Object = "C:\FileDocx.docx"
        Dim NomeFilePDF As String = "C:\varie\FilePDF.pdf"
        'formato di esportazione
        Dim FormatoExport As WdExportFormat = WdExportFormat.wdExportFormatPDF
        Try
            ' valorizzo l'oggetto document con l'apertura del documento che voglio stampare
            wordDocument = wordApplication.Documents.Open(NomeFileDocx)
            'se non è null e quindi un oggetto valorizzato, effetto l'esportazione in formato PDF
            If Not wordDocument Is Nothing Then
                'Parametri
                '1=nome file di esportazione, 2=formato, 3=aprire dopo l'esportazione 4=ottimizzato per la stampa 5= quale pagina stampare se tutto documento o altre modalità 6=da 7=a, 8= contenuto
                wordDocument.ExportAsFixedFormat(NomeFilePDF, FormatoExport, False, WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 0, 0, WdExportItem.wdExportDocumentContent, True, True, WdExportCreateBookmarks.wdExportCreateWordBookmarks, True, True, False)
            End If
        Catch ex As Exception
            'errore nella fase di esportazione
            MessageBox.Show("Si è verificato un errore: " + ex.Message)
        Finally
            'chiudo il documento e rilascio le risorse
            If Not wordDocument Is Nothing Then
                wordDocument.Close()
                wordDocument = Nothing
            End If
            'chiudo l'applicazione word e rilascio le risorse
            If Not wordApplication Is Nothing Then
                wordApplication.Quit()
                wordApplication = Nothing
            End If

            'libero la memoria
            GC.Collect()
            GC.WaitForPendingFinalizers()
            GC.Collect()
            GC.WaitForPendingFinalizers()
        End Try

C#
AppWord.Application wordApplication = new AppWord.Application();
            Document wordDocument = null;
            //Creo i percorsi e nomi dei file docx e pdf
            object NomeFileDocx = @"C:\FileDocx.docx";
            string NomeFilePDF = @"C:\varie\FilePDF.pdf";
            //formato di esportazione
            WdExportFormat FormatoExport = WdExportFormat.wdExportFormatPDF;
            try
            {
                // valorizzo l'oggetto document con l'apertura del documento che voglio stampare
                wordDocument = wordApplication.Documents.Open(ref NomeFileDocx);

                //se non è null e quindi un oggetto valorizzato, effetto l'esportazione in formato PDF
                if (wordDocument != null)
                {
                    //Parametri
                    //1=nome file di esportazione, 2=formato, 3=aprire dopo l'esportazione 4=ottimizzato per la stampa 5= quale pagina stampare se tutto documento o altre modalità  6=da 7=a, 8= contenuto
                    wordDocument.ExportAsFixedFormat(NomeFilePDF, FormatoExport, false, WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 0, 0, WdExportItem.wdExportDocumentContent, true, true, WdExportCreateBookmarks.wdExportCreateWordBookmarks, true, true, false);
               
                }
                   
            }
            catch (Exception ex)
            {
                // errore nella fase di esportazione
                MessageBox.Show("Si è verificato un errore: " + ex.Message);
            }
            finally
            {
                //chiudo il documento e rilascio le risorse
                if (wordDocument != null)
                {
                    wordDocument.Close();
                    wordDocument = null;
                }
                //chiudo l'applicazione word e rilascio le risorse
                if (wordApplication != null)
                {
                    wordApplication.Quit();
                    wordApplication = null;
                }

                //libero la memoria
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

 

Esaminiamo in dettaglio il codice appena illustrato.
Nelle prime righe, vengono creati due oggetti, uno di tipo application e l’altro di tipo documento.
Le variabili riportano i percorsi dei file, ed un enumeratore per il tipo di formato.
Tramite il metodo Open dell’ogggetto di tipo application, si istanza l’oggetto di tipo documento con il documento aperto, questo nuovo oggetto ci permetterà di esportare il documento creato in formato pdf, tramite il metodo “ExportAsFixedFormat”.
Il metodo richiede diversi parametri, quali il percorso e nome del file pdf, il formato se aprire il documento dopo aver effettuato l’esportazione, ottimizzato per la stampa, quale parte del documento stampare, se tutto o una determinata parte, le eventuali pagine ( in questo caso sono due i parametri e nel nostro esempio sono stati indicati 0, in questo modo esporta tutto il documento), il contenuto, se inserire i segnalibri, font e gli eventuali tag del documento.
Terminata l’esportazione, nella parte finally, si verificano che gli oggetti document ed application siano valorizzati, in caso affermativo, si chiudono e si libera la memoria.

Conclusioni

L’articolo, ha voluto fornite un valido spunto su come utilizzare nelle applicazioni Windows di .Net 4 il pacchetto Microsoft Office 2010, sia per il linguaggio di programmazione Visual Basic e sia per C#.
In questo esempio si è visto come convertire un documento word in PDF, sempre se sul pc è installato il componete per l’esportazione.