Função para converter imagens em PDF via AdvPL

Função para converter imagens em PDF via AdvPL

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.

Relatório no Protheus pelo TMSPrinter
Relatório no Protheus pelo TMSPrinter

Abaixo um print do relatório já convertido dentro de uma pasta dentro da Protheus Data.

Relatório convertido para PDF
Relatório convertido para PDF

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

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.

Bom pessoal, por hoje é só.
Abraços e até a próxima.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

Deixe uma resposta

%d blogueiros gostam disto: