Olá pessoal…
Hoje vou mostrar como converter (transformar) imagens para arquivos com extensão pdf em AdvPL, ideal para geração de relatórios TMSPrinter, que geram imagens em jpg.
Primeiramente instale e configure o ImageMagick (leia Como converter imagens para .pdf utilizando o Prompt de Comando) no servidor que está instalado o Protheus.
Agora quando for imprimir um relatório em TMSPrinter, utilize o método SaveAllAsJpeg, e chame a rotina para gerar os pdfs:
//Salvando todas as páginas em JPEG oPrintPvt:SaveAllAsJpeg("\x_tst\relatorio_tst", 1250, 2000, 200) //Agora chama a função de transformação de JPEG em PDF u_zTransPDF("\x_tst\", "relatorio_tst*.jpg")
A rotina zTransPDF, recebe até 3 parâmetros, o primeiro o diretório é o diretório que contém os arquivos a serem convertidos (o diretório tem que ser dentro da Protheus Data), o segundo parâmetro é o filtro do nome dos arquivos (por exemplo, *.jpg), e o terceiro é opcional que define se será excluído as imagens após converter.
Abaixo um print do relatório original pelo Protheus.
Abaixo um print do relatório já convertido dentro de uma pasta dentro da Protheus Data.
Abaixo o código fonte completo (ressalto que, se você instalou o ImageMagick em outro diretório, altere a variável cDirMagic):
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zTransPDF Função que converte imagens para pdf (como as geradas pelo TMSPrinter) @type function @author Atilio @since 11/09/2016 @version 1.0 @param cDirect, character, Diretório das imagens (dentro da Protheus_Data) @param cArqs, character, Arquivos com a extensão desejada (por exemplo, jpg) @param lExcImg, lógico, Define se irá excluir as imagens após transformar em pdf @example u_zTransPDF("\_diretorio\", "arquivos*.jpg") //ou //Salvando todas as páginas em JPEG oPrintPvt:SaveAllAsJpeg("\x_tst\relatorio_tst", 1250, 2000, 200) //Agora chama a função de transformação de JPEG em PDF u_zTransPDF("\x_tst\", "relatorio_tst*.jpg") /*/ User Function zTransPDF(cDirect, cArqs, lExcImg) Local aArea := GetArea() Local cDirMagic := "C:\Program Files\ImageMagick-7.0.2-Q16\" Local cComando := "" Local cDirSrv := Alltrim(GetSrvProfString("RootPath","")) Local aDados := {} Local nAtual := 0 Default cDirect := "" Default cArqs := "" Default lExcImg := .T. //Se tiver diretório e arquivos If !Empty(cDirect) .And. !Empty(cArqs) cDirect := Lower(cDirect) cArqs := Lower(cArqs) //Definindo o comando para converter a imagem cComando := "mogrify -format pdf "+cDirSrv+cDirect+cArqs //Executando o comando no servidor WaitRunSrv(cDirMagic+cComando, .T., cDirMagic) //Se tiver que excluir as imagens If lExcImg aDados := Directory(cDirect+cArqs) //Percorre todos os arquivos de imagem For nAtual := 1 To Len(aDados) FErase(cDirect+aDados[nAtual][1]) Next EndIf EndIf RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Obrigado!
Com o imagemagick eu tinha desenvolvido um script em bash para alterar algumas imagens e transformar em pdf, é incrível o que é possível fazer com ele.
Agora que vi seu guia, coloquei o que fazia em bash no advpl.
Grande Jorge.
Obrigado pelo comentário jovem.
Um grande abraço.