No artigo de hoje vamos demonstrar em como imprimir / criar um arquivo PDF através de um arquivo do Word via AdvPL.
A lógica para fazer esse procedimento é a seguinte:
- Deixe o arquivo do Word em alguma pasta local que o usuário tenha acesso (no nosso exemplo vai ser C:\TOTVS\modelo.docx)
- Defina o nome e o caminho do arquivo pdf (no nosso caso vai ser C:\spool\teste.pdf)
- Acione a integração com o Word através das funções OLE_*
- Abra o arquivo e acione a impressão através do SaveAsFile
Abaixo o código funcionando conforme lógica explicada acima:
//Bibliotecas #Include "TOTVS.ch" #Include "MSOle.ch" /*/{Protheus.doc} User Function zDocPdf Exemplo de geração de PDF a partir de um documento do Word @type Function @author Atilio @since 07/10/2022 /*/ User Function zDocPdf() Local aArea := FWGetArea() Local nHandWord := 0 Local cPastaOrig := "C:\TOTVS\" Local cArquiOrig := "modelo.docx" Local cPastaDest := "C:\spool\" Local cArquiDest := "teste.pdf" //Inicializa a integração com Microsoft Office, para permitir execução de macros internas BeginMsOle() //Cria o ponteiro na memória com o Word (somente se houver instalado o word na máquina) nHandWord := OLE_CreateLink() If nHandWord != "-1" //Abre o arquivo de Origem OLE_SetPropertie(nHandWord, .F.) OLE_SetProperty(nHandWord, oleWdVisible, .F.) OLE_OpenFile(nHandWord, cPastaOrig + cArquiOrig) //Gera o PDF do documento OLE_SetProperty(nHandWord,'208',.F.) OLE_SaveAsFile( nHandWord, cPastaDest + cArquiDest, , , .F., 17 ) //Fecha o arquivo, aguarda 1 segundo para a geração do pdf e encerra o ponteiro em memória OLE_CloseFile(nHandWord) Sleep(1000) OLE_CloseLink(nHandWord) EndIf //Encerra a integração com Microsoft Office EndMsOle() FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.