terça-feira, 25 de agosto de 2009

Salvar Word para PDF.

Para salvar um documento de Word para PDF, a microsoft disponibilizou em seu site um Add-in para o Word 2007 que permite que esta operação seja realizada.

Após a instalação, ao entrar no menu "Salvar como" do menu do word, existirá uma nova opção:


Com a instalação deste Add-in, também fica possível salvar um documento Word em PDF via código.
Obviamente, é necessário tem o Microsoft Word 2007 e o Add-in instalado na máquina que irá salvar o arquivo a ser convertido.
Partindo do princípio, adicione a referência da dll "Microsoft.Officce.Interop.Excel" ao seu projeto dentro do Visual Studio.



Abaixo está o código de uma função que recebe dois parâmetros, o primeiro é o caminho do arquivo de origem (word) e o segundo é o caminho do arquivo PDF que será criado.


''' <summary>
''' Converte um arquivo Word para PDF.
''' </summary>
''' <param name="sourceDocPath">O caminho do arquivo Word.
''' <param name="exportFilePath">O caminho de saída do arquivo PDF. Esse arquivo será criado.
''' <remarks></remarks>
Public Sub TransformarEmPDF(ByVal sourceDocPath As String, ByVal exportFilePath As String)

Dim missing As Object = Type.Missing

Dim paramExportFormat As WdExportFormat = WdExportFormat.wdExportFormatPDF
Dim paramExportOptimizeFor As WdExportOptimizeFor = WdExportOptimizeFor.wdExportOptimizeForPrint
Dim paramExportRange As WdExportRange = WdExportRange.wdExportAllDocument
Dim paramExportItem As WdExportItem = WdExportItem.wdExportDocumentContent
Dim paramCreateBookmarks As WdExportCreateBookmarks = WdExportCreateBookmarks.wdExportCreateWordBookmarks

Dim paramOpenAfterExport As Boolean = False
Dim paramStartPage As Integer = 0
Dim paramEndPage As Integer = 0
Dim paramIncludeDocProps As Boolean = True
Dim paramKeepIRM As Boolean = True
Dim paramDocStructureTags As Boolean = True
Dim paramUseISO19005_1 As Boolean = False
Dim paramBitmapMissingFonts As Boolean = True

Dim wordApplication As ApplicationClass = New ApplicationClass()
Dim document As Word.Document = Nothing

Try
Dim paramFileName As Object = DirectCast(sourceDocPath, Object)

' abre o documento.
document = wordApplication.Documents.Open(paramFileName, missing, missing, missing, _
missing, missing, missing, missing, missing, missing, _
missing, missing, missing, missing, missing, missing)

' salva como um arquivo PDF.
document.ExportAsFixedFormat(exportFilePath, paramExportFormat, paramOpenAfterExport, _
paramExportOptimizeFor, paramExportRange, paramStartPage, _
paramEndPage, paramExportItem, paramIncludeDocProps, paramKeepIRM, _
paramCreateBookmarks, paramDocStructureTags, paramBitmapMissingFonts, _
paramUseISO19005_1, missing)

Catch ex As Exception
Throw ex

Finally

' fecha o documento word e os discarta da memória
If Not document Is Nothing Then
document.Close(missing, missing, missing)
document = Nothing
End If

If Not wordApplication Is Nothing Then
wordApplication.Quit(missing, missing, missing)
wordApplication = Nothing
End If

GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()

End Try

End Sub

Para que o código desta função funcione é necessário adicionar os "imports":

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Word

Assim, ao chamar a função TransformarEmPDF("c:/word.doc", "c:/arquivogerado.pfd") o arquivo word.doc será lido e um novo arquivo idêntico à ele será criado em c:/arquivogerado.pfd já no formato PDF.

Abs.

Nenhum comentário:

Postar um comentário