Convertire Word in RTF






Public Sub New()
If Not CreateWordApp() Then
Throw New ApplicationException("Assembly di interoperabilita' con Office non trovato!")
End If
End Sub
Private _wordApp As Word.ApplicationClass
Protected Function CreateWordApp() As Boolean
Dim retval = True
Try
_wordApp = New Word.ApplicationClass()
_wordApp.Visible = False
Catch ex As System.Exception
_wordApp = Nothing
retval = False
End Try
Return retval
End Function


La conversione del file doc sara' effettuata aprendo il file stesso ed eseguendo un’operazione di SaveAs:



Private Function OpenDocument(ByVal oFileName As Object) As Word.Document
Dim missing As Object = System.Reflection.Missing.Value
Dim aDoc As Word.Document = Nothing
Try
aDoc = _wordApp.Documents.Open(oFileName, missing, False, _
missing, missing, missing, _
missing, missing, missing, _
missing, missing, False)
Catch ex As System.Exception
aDoc = Nothing
End Try
Return aDoc
End Function
Private Function SaveDocumentAs(ByVal document As Word.Document, _
ByRef filename As String, _
ByVal wdSaveFormat As Integer) As DocConverterResult
Dim retval As DocConverterResult = DocConverterResult.OK
Try
document.SaveAs(CType(filename, Object), CType(wdSaveFormat, Object))
Catch ex As System.Exception
retval = DocConverterResult.DestinationFileNotCreate
Finally
document.Close()
End Try
If Not File.Exists(filename.ToString()) Then
retval = DocConverterResult.DestinationFileNotCreate
filename = ""
End If
Return retval
End Function


A questo punto, implementata la funzionalita' di SaveAs, ci basta implementare i due metodi richiamabili dall’esterno per la conversione:



Public Function ConvertToRTF(ByVal fileName As String, _
ByRef rtfFileName As String, _
Optional ByVal destinationPath As String = "") As DocConverterResult
Dim retval As DocConverterResult = DocConverterResult.OK
If _wordApp IsNot Nothing Then
Dim oFileName As Object = fileName
Dim aDoc As Word.Document = OpenDocument(oFileName)
If aDoc IsNot Nothing Then
If Not String.IsNullOrEmpty(destinationPath) Then
Dim finfo = New FileInfo(fileName)
rtfFileName = Path.Combine(destinationPath, finfo.Name.ToLower().Replace(".doc", ".rtf"))
Else
rtfFileName = fileName.ToLower().Replace(".doc", ".rtf")
End If
retval = SaveDocumentAs(aDoc, rtfFileName, Word.WdSaveFormat.wdFormatRTF)
End If
Else
retval = DocConverterResult.OfficeComponentNotFound
End If
Return retval
End Function
Public Function ConvertToPDF(ByVal fileName As String, _
ByRef pdfFileName As String, _
Optional ByVal destinationPath As String = "") As DocConverterResult
Dim retval As DocConverterResult = DocConverterResult.OK
If _wordApp IsNot Nothing Then
Dim oFileName As Object = fileName
Dim aDoc As Word.Document = OpenDocument(oFileName)
If aDoc IsNot Nothing Then
If Not String.IsNullOrEmpty(destinationPath) Then
Dim finfo = New FileInfo(fileName)
pdfFileName = Path.Combine(destinationPath, finfo.Name.ToLower().Replace(".doc", ".pdf"))
Else
pdfFileName = fileName.ToLower().Replace(".doc", ".pdf")
End If
retval = SaveDocumentAs(aDoc, pdfFileName, wdFormatPDF)
End If
Else
retval = DocConverterResult.OfficeComponentNotFound
End If
Return retval
End Function


La classe DocConverter, infine, implementa l’interfaccia IDisposable in modo da poter, nell’evento Dispose(), rilasciare in maniera corretta l’applicazione Word (che compare all’interno del task manager durante lo scope di esecuzione dell’istanza della classe).


Per poter utilizzare l’oggetto Word.ApplicationClass e' necessario referenziare la dll Microsoft.Office.Interop.Word.dll (un’istalllazione di Word contiene tale dll) mentre per abilitare il salvataggio in PDF e' necessario scaricare il plug-in per office scaricabile dall’indirizzo:


<http://www.microsoft.com/downloads/details.aspx?FamilyID=f1fc413c-6d89-4f15-991b-e'b07ba5f2e5&DisplayLang=en>










( convertirewordinrtf.html )- by Paolo Puglisi - Modifica del 17/12/2023