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.