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.
Prezado Daniel
Esse fonte não funciona na versão 2410 que acusa não haver integração com o pacote office no acesso pelo smartclient html. Alguma dica de como o fonte poder funcionar na nova versão?
No mais, saudações e agradecimentos por suas diversas publicações que sempre nos ajudam no dia a dia.
Att
Fábio
Bom dia Fábio, tudo joia?
Obrigado pela gentileza, é muita bondade sua.
Quanto à integração com o Word, faz o seguinte teste:
1. Abra o Protheus, na tela inicial, onde digita “SIGAMDI”, “SIGAADV”, etc… Clique no botão engrenagem
2. Vá até o fim da página, e veja se está marcado a opção “Habilita agente local”, se não tiver, marque
3. Encerre o WebAgent e abra o Protheus novamente
Tenha uma ótima e abençoada semana.
Um forte abraço.
Prezado Daniel
Ajustado. Sem o acesso as pasta locais a integração não funciona.
Grato pelo apoio!
Fábio
Bom dia Fábio, tudo joia?
Opa, nós que agradecemos o feedback.
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.