sexta-feira, janeiro 27, 2006

PowerBuilder – Salvando uma DataWindow como PDF

Obs: Solução existente para PowerBuilder 9 ou superior

Recentemente tive a necessidade de implementar um processo batch para gerar arquivos PDF e enviá-los por e-mail.

A funcionalidade de envio de arquivos por e-mail já tinha sido implementada através do blat ( http://thiagocpereira.blogspot.com/2005/01/powerbuilder-enviar-e-mail-via-smtp.html )

O grande problema era como gerar arquivo PDF. Procurei na Internet e vi vários artigos de como gerar o PDF, mas nenhum deles satisfez por completo as necessidades da minha aplicação.

Depois de muito trabalho de pesquisa e juntando informações de N sites, consegui definir uma forma de trabalho que funciona 100%.

Abaixo vai as informações sobre a solução e como consegui chegar até ela.

1) Problema
a) Processo Batch de geração de arquivos PDF em lote e envio por e-mail, sem nenhuma interação do usuário.
b) Permitir salvar os relatórios existentes em todos os sistemas em PDF, envolvendo uma média de 7000 estações de trabalho, incluindo sistemas operacionais Windows 98, 2000 e XP.

2) Pesquisa
Pesquisei vários SITES, NewsGroup e lista de discursão. Após um filtro nas opções existentes, resolvi estudar as seguintes ferramentas:
* PDF995
* PDF Reditector
* SaveAs PDF da DataWindow

PDF995
A primeira opção e a que me pareceu mais simples foi a utilização do PDF995 (www.pdf995.com). Como ele é FreeWare, não teria problema com licenças.
Os problemas surgiram na automação do processo e Deploy do Software. Teria que instalar o software em todas as máquinas o que não agrada muito a nossa equipe, devido a quantidade de estações e a localização das mesmas.
A geração automática do arquivo não teria problema, pois descobri que apenas teria que alterar uma chave no arquivo INI do PDF995.
Mas, o problema que a principio tornou inviável a solução foi a propaganda que é exibida no momento que você salva os arquivo como PDF. Para retirar essas propagandas você tem que comprar uma licença de uso. Baixei uma licença utilizando o e-mule é funcionou perfeitamente. O problema é que a empresa não permite nenhum tipo de pirataria. A solução de comprar a licença se tornou inviável. A licença para cada máquina custa 10$. Fazendo as contas, teríamos que gastar R$161.000,00 para licenciarmos todas as nossas estações o que tornou a relação custo / beneficio um empecilho para a implementação da funcionalidade.

PDF Redirector
A segunda opção seria a utilização do PDF Redirector. Como ele não exibe nenhuma propaganda e é FreeWare, não teríamos os problemas o PDF995.
Mas, continuamos tendo o empecilho de ter que instalar o Software em todas máquinas.
Além desse problema, a automatização do processo de geração de PDF é um pouco complexa, aumentando o tempo necessário para a implementação e gerando novos pontos de risco.

SaveAs PDF da DataWindow
Como é um recurso nativo do PowerBuilder, seria a solução melhor a ser adotado.
O problema inicial encontrado foi a falta de informações sobre o processo.
Também tivemos problema na versão do GNU GhostScript (FreeWare), adotando a versão 7.05 como a melhor que se adequar as nossas necessidades.
Após levantar informações de vários sites, conseguimos fazer a solução funcionar em uma máquina com todos os softwares instalados (PowerBuilder e GNU GhostScript).
Então esbarramos em outro problema, como fazer o Deploy dos softwares na rede. Após algumas pesquisas, descobri que seria necessário apenas adicionar duas novas chaves no registry, o que pode ser automatizado utilizando o Script de Login dos usuários.

Assim, resolvemos o problema utilizando a solução existente no próprio PowerBuilder 9 ou superior.

3) Solução
Todos os nossos sistemas e DLLs do PowerBuilder encontra-se na rede, por isso, a solução abaixo foi feita baseado nesse ambiente
Abaixo estão os passos necessários para a implementação da solução
a. Coloque os sistemas e DLLs do PowerBuilder na rede. No nosso exemplo vamos adotar que estes arquivos se encontram no Drive X:
b. Copie a pasta C:\......\Sybase\Shared\PowerBuilder\Drivers para o drive X: . Na verdade o diretório Drivers tem que estar na mesma pasta da dll PBDWEXX.DLL.
c. Baixe a versão 7.05 do GNU GhostScript (http://prdownloads.sourceforge.net/ghostscript/gs705w32.exe?download) e instale em um máquina usando o diretório padrão.
d. No Drive X:, crie uma pasta chamada GS e copie as pastas BIN, LIB e FONTS da pasta c:\GS\ para a pasta na rede.
e. Cria as seguintes chaves no Registry das máquinas (Essa etapa pode ser automatizada utilizando o Login Script)
[HKEY_LOCAL_MACHINE\Software\GNU GhostScript]

[HKEY_LOCAL_MACHINE\Software\GNU GhostScript\7.05]

"GS_DLL"="X:\gs\bin\gsdll32.dll"
"GS_LIB"="X:\gs\lib;X:\gs\fonts"

f. Para Salvar a DataWindow, você tem que observar se as seguintes propriedades estão configuradas
//Se o GhostScript tiver instalado, configura a DataWidnow para utiliza-lo
dw_dados.Object.DataWindow.Export.PDF.Distill.CustomPostScript='No'
dw_dados.Object.DataWindow.Export.PDF.Method = Distill!
dw_dados.Object.DataWindow.Export.PDF.XSLFOP.Print='No'

O próximo passo é salvar a DataWindow como PDF

//Salva a DataWindow como PDF
dw_dados.saveas(p_path,PDF!,True)


4) Conclusão
O objetivo deste artigo é esclarecer o procedimento de Salvar como PDF e compartilhá-lo com outros desenvolvedores.

Quem tiver dúvida ou sugestões, pode incluir um comentário para que possamos enriquecer o conteúdo deste artigo.



Boa sorte!

6 comentários:

Anônimo disse...

Você passou o endereço do post de forma errada na lista de PB.

No mais, parabéns pelo post. Aqui, uso aquele arquivo que lhe enviei, pois, usamos PB 7 que não gera nativamente os PDFs como no 9 ouvi dizer.

Anônimo disse...

Thiago, mais uma vez, parabéns pelo detalhamento técnico. Me ajudou muito.

Anônimo disse...

Thiago, fiz a instalação conforme sugerido. Mas não gera um PDF, acusa erro.
Preciso configurar mais alguma coisa?

Jefferson

Unknown disse...

really its nice post about PowerBuilder. Thanks for sharing this Information.

Anônimo disse...

Thiago, excelente post! Me ajudou e muito.

Fiz todo o procedimento usando o PDF Redirector. Porém, enfrento o problema descrito.
Não consegui encontrar a DLL PBDWEXX.DLL para usar somente o powerbuild. Por favor se puder me fornecer o arquivo ou indicar onde posso encontrá-lo. Obrigado

recsa2004 disse...

Tente
http://rafaelti.wordpress.com/2011/11/21/salvar-relatorio-em-pdf-com-powerbuilder/