Perguntas FWMsPrinter + Google Charts API

Mais
8 anos 11 meses atrás - 8 anos 11 meses atrás #28153 por armando.lima
Olá amigos!

Alguém já se aventurou na integração entre a classe FWMsPrinter e a API do Google Charts?
Hoje eu gero relatórios em PDF através da FWMsPrinter e agora gostaria de incluir os gráficos da API do Google no final da página desse relatório.

O meu problema é quando eu uso o HTTPGet pra executar o HTML que constrói o gráfico. Está retornando NULL.
Mas quando eu executo o HTML no browse, ele gera o gráfico de boa.

Preciso fazer isso porque todas as classes do próprio ADVPL geram gráficos feios. Por isso gostaria de trazer gráficos de fora.

Se alguém tiver uma luz pra essa aventura louca, já agradeço a ajuda.

Att,

Armando Lima.
Analista de Sistemas
Ultima edição: 8 anos 11 meses atrás por armando.lima. Razão: Formatação textual

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 11 meses atrás - 8 anos 11 meses atrás #28178 por armando.lima
Respondido por armando.lima no tópico FWMsPrinter + Google Charts API
Bom, seguindo um pequeno roteiro:

Passo 1 - Enviar dados ao Google Charts para que ele gere a imagem do gráfico. (Por URL ou Construção de HTML ).
Passo 2 - Receber essa imagem via HTTP (Utilizando a função HTTPGet )
Passo 3 - Salvar a imagem na pasta TEMP (Utilizando a função MemoWrite )
Passo 4 - No meu relatório que é feito em FWMsPrinter , usar a função SayBitmap() para pegar a imagem salva em TEMP e inserir na página do relatório.

Existem 2 opções para usar o Google Charts.

Opção 1 - Diretamente no URL. Saiba mais aqui . Seguindo o roteiro acima, essa API funciona direitinho. Consegui conectar ao Google, Receber a imagem, Salvar a imagem e Inserí-la no relatório. Maaaasssss... Infelizmente esta API foi descontinuada pelo Google e pode ser desativada a qualquer momento. Não quero correr o risco.

Opção 2 - Pela construção do HTML. Saiba mais aqui . Seguindo o mesmo roteiro, já empaquei no Passo 1. Por alguma razão, não consigo receber essa imagem para poder salvá-la. Em tese, o HTML tem que retornar uma imagem estática ao invés do HTML dinâmico, e fiz isso usando getImageURI que faz com que o HTML retorne um simples PNG. Dessa forma, o retorno do HTML gerado por essa Opção 2 seria o mesmo retornado pela Opção 1.

O que pode estar acontecendo?
Ultima edição: 8 anos 11 meses atrás por armando.lima.

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 11 meses atrás - 8 anos 11 meses atrás #28215 por armando.lima
Respondido por armando.lima no tópico FWMsPrinter + Google Charts API
Pessoal,

Ainda não consegui integrar o FWMsPrinter com a nova API do Google Charts.

Entretanto consegui integrar com a antiga API . Agora eu consigo gerar relatórios em PDF com os gráficos do Google. Quem tiver interesse, segue código:

Arquivo Anexo:

Nome do Arquivo: TesteGfGg.zip
Tamanho do Arquivo:1 KB


/*
+-----------------------------------------------------------------------------+
| PROGRAMA: TesteGfGg      | AUTOR: Armando Lima	  | DATA: 20/05/2015  |
+-----------------------------------------------------------------------------+
| DESCRIÇÃO: Conecta na antiga API do Google Charts para gerar gráficos.      |
+-----------------------------------------------------------------------------+
| USO: Rotinas gerais.     				                      |
+-----------------------------------------------------------------------------+   
*/

User Function TesteGfGg

	_cTitPDF	:= "Relatório com gráficos do Google Charts" // Título para o arquivo PDF
	nLin		:= 22	//Linha onde vai começar a impressão
	_nPagina	:= 1	//Relatório começa na página 1
	_nLimite	:= 837	//Limite para impressão dos dados
	Cabec1  	:= ""	//Cabeçalho auxiliar
	Cabec2		:= ""	//Cabeçalho auxiliar
	Cabec3		:= ""	//Cabeçalho auxiliar
			
	oPrint := FWMSPrinter():New(_cTitPDF,6,.F.,,.T.)	//Constrói objeto da classe FWMSPrinter
	oPrint:SetPortrait()					//Define relatório como paisagem
	oPrint:SetPaperSize(9)					//Define tamanho como A4
	oPrint:SetMargin(20,20,20,20)				//Define margens de impressão
	
	//Gráficos de barras 1
	_cURL		:= "https://chart.googleapis.com/chart?cht=bhs&chs=200x125&chd=t:10,50,60,80,40|50,60,100,40,20&chco=4d89f9,c6d9fd&chbh=20&chds=0,160" //URL do Google Charts API
	_oPNG 		:= HttpGet(_cURL) //Conecta com a web, envia a URL e recebe a imagem do gráfico
	_cNomeArq	:= GetTempPath()+ "graf_bar1.PNG"	//Define o nome do arquivo de imagem
	MemoWrite(_cNomeArq,_oPNG) //Salva na pasta TEMP
	oPrint:SayBitmap(30, 15, _cNomeArq, 200, 100)	//Pega essa imagem salva e coloca no relatório
	fErase(_cNomeArq) //Apaga o arquivo
	
	//Gráficos de barras 2
	_cURL	:= "https://chart.googleapis.com/chart?cht=bvs&chs=200x125&chd=t:10,50,60,80,40|50,60,100,40,20&chco=4d89f9,c6d9fd&chbh=20&chds=0,160" //URL do Google Charts API
	_oPNG 	:= HttpGet(_cURL) //Conecta com a web, envia a URL e recebe a imagem do gráfico
	_cNomeArq	:= GetTempPath()+ "graf_bar2.PNG"	//Define o nome do arquivo de imagem
	MemoWrite(_cNomeArq,_oPNG) //Salva na pasta TEMP
	oPrint:SayBitmap(30, 250, _cNomeArq, 200, 100)	//Pega essa imagem salva e coloca no relatório
	fErase(_cNomeArq) //Apaga o arquivo

	//Gráficos de barras 3
	_cURL	:= "https://chart.googleapis.com/chart?cht=bvs&chbh=5,2&chm=D,0033FF,2,0,5,1&chbh=20&chs=200x150&chd=s2:1XQbnf4,EWoQMUB,9halxp9&chco=4D89F9,C6D9FD" //URL do Google Charts API
	_oPNG 	:= HttpGet(_cURL) //Conecta com a web, envia a URL e recebe a imagem do gráfico
	_cNomeArq	:= GetTempPath()+ "graf_bar3.PNG"	//Define o nome do arquivo de imagem
	MemoWrite(_cNomeArq,_oPNG) //Salva na pasta TEMP
	oPrint:SayBitmap(30, 400, _cNomeArq, 200, 100)	//Pega essa imagem salva e coloca no relatório
	fErase(_cNomeArq) //Apaga o arquivo

	//Gráficos de pizza 1
	_cURL	:= "https://chart.googleapis.com/chart?cht=p&chd=s:Uf9a&chs=300x120&chl=January|February|March|April&chdl=30%C2%B0|40%C2%B0|50%C2%B0|60%C2%B0" //URL do Google Charts API
	_oPNG 	:= HttpGet(_cURL) //Conecta com a web, envia a URL e recebe a imagem do gráfico
	_cNomeArq	:= GetTempPath()+ "graf_piz1.PNG"	//Define o nome do arquivo de imagem
	MemoWrite(_cNomeArq,_oPNG) //Salva na pasta TEMP
	oPrint:SayBitmap(200, 15, _cNomeArq, 250, 100)	//Pega essa imagem salva e coloca no relatório
	fErase(_cNomeArq) //Apaga o arquivo

	//Gráficos de pizza 2
	_cURL	:= "https://chart.googleapis.com/chart?cht=p3&chs=280x100&chd=s:Hellob&chl=May%7CJune%7CJuly%7CAugust%7CSeptember%7COctober" //URL do Google Charts API
	_oPNG 	:= HttpGet(_cURL) //Conecta com a web, envia a URL e recebe a imagem do gráfico
	_cNomeArq	:= GetTempPath()+ "graf_piz2.PNG"	//Define o nome do arquivo de imagem
	MemoWrite(_cNomeArq,_oPNG) //Salva na pasta TEMP
	oPrint:SayBitmap(200, 300, _cNomeArq, 250, 100)	//Pega essa imagem salva e coloca no relatório
	fErase(_cNomeArq) //Apaga o arquivo
	
	oPrint:Preview() //Abre o relatório em PDF

Return


É válido lembrar que a antiga API está depreciada pelo Google e pode ser desativada a qualquer momento, por isso eu gostaria de conseguir integrar com a nova API, que além de ser mais atual, também tem muitos outros modelos de gráficos.

Quem conseguir me ajudar nessa luta, agradeço!

Att,

Armando Lima
Analista de Sistemas
Skype: armandolimma
Anexos:
Ultima edição: 8 anos 11 meses atrás por armando.lima.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.094 segundos
Joomla templates by a4joomla