Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
nicolett_yuri

Exportando para PDF (Macro)

Fala galera!

Tempos atrás me perguntaram como posso automatizar a exportação de relatórios para PDF através de Macros. Confesso que há muito tempo venho fugindo desse assunto, porém estou trabalhando em um projeto e uma das atividades é essa! Acabou a fuga rsrs.

Vamos lá.

Em primeiro lugar, a fonte de informação deverá ser um Report (Relatório) do QlikView, tendo este relatório pronto podemos prosseguir com a macro.

A biblioteca que estou utilizando para exportação é PDFCreator 1.7.3, pois esta é uma ferramenta gratuita e na exportação não houver perda na qualidade de imagem (pelo menos no meu caso). http://www.pdfforge.org/pdfcreator/download.

Bom, vamos ao código em VBScript. Cada linha de execução possui um comentário/explicação em verde e negrito.

sub PDF

'Criando instância do PDFCreator
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

'Variáveis de configuração da biblioteca PDFCreator
With pdfjob

'Verificações da fila da impressora
If .cStart("/NoProcessingAtStartup") = False Then
If .cStart("/NoProcessingAtStartup", True) = False Then
'Caso não tenha nenhum objeto na fila de impressão, termina a macro.
Exit Sub
End if

'Caso tenha objeto na fila de impressão, torne a impressão visível
.cVisible = True
End If

.cOption("UseAutosave") = 1 'Permitir o Autosave
.cOption("UseAutosaveDirectory") = 1 'Permitir que grave no diretório
.cOption("AutosaveDirectory") = Path 'Caminho que será gravado o relatório
.cOption("AutosaveFilename") = ReportName 'Nome que será gravado o relatório
.cOption("AutosaveFormat") = 0 'Formato PDF
.cClearCache

'Finalizando as configurações da biblioteca PDFCreator
End With

'Imprime o relatório
ActiveDocument.PrintReport ReportID, "PDFCreator"

'Aguarde até que o processo entre na fila de impressão
Do Until pdfjob.cCountOfPrintjobs = 1
ActiveDocument.GetApplication.Sleep 20
Loop
pdfjob.cPrinterStop = False

'Aguarda até que a fila de impressão esteja vazia
Do Until pdfjob.cCountOfPrintjobs = 0
ActiveDocument.GetApplication.Sleep 20
Loop

'Termina o processo
pdfjob.cClose

'Zerando a variável
Set pdfjob = Nothing

end sub

Praticamente essa é a forma de chamar a biblioteca do PDFCreator. Agora basta criar uma sub para chamar essa macro e então utiliza-la.

Para facilitar o entendimento, estou anexando uma aplicação de exemplo.

Observação: Fiz o teste de execução através do QlikView Client e também acesso web (IE.Plugin) e ambos funcionaram conforme o determinado.

Qualquer dúvida por favor comentem!

Abraços

Labels (1)
  • Macro

57 Replies
nicolett_yuri
Author

Rodrigo, primeiro você precisa ter o PDFCreator instalado em seu computador.

Não esqueça também de alterar a parte de segurança da macro

Módulo de Segurança Requerido: Altere o valor para "Acesso ao sistema"

Segurança Local Atual: Altere o valor para "Permitir Acesso ao sistema"

Not applicable

Yuri, fiz os procedimentos certinho, tenho PDFCreator instalado, abri a segurança da macro e agora gerou outro erro destacado na imagem abaixo...

imagem07_duvida.JPG.jpg

nicolett_yuri
Author

Rodrigo, esses erros estão me ajudando a melhorar o post, muito obrigado !

Você deve trocar o ReportID pelo ID do relatório que deseja imprimir. Coloque o valor entre aspas

Por exemplo: Você criou o relatório RP01, desta forma essa linha deve ficar.

ActiveDocument.PrintReport "RP01", "PDFCreator"

Not applicable

Yuri, meu relatório no momento está vazio. Funcionou o código, mas depois que peço para testar ele abre a caixa de diálogo normalmente, dizendo que o relatório está vazio e depois trava o programa...

dai tenho que fechar para continuar mexendo no mesmo

Not applicable

começou a funcionar, mas preciso aprender mais de relatórios em outros posts!!

para eu colocar a macro feita, preciso criar um objeto na dash?

nicolett_yuri
Author

Não entendi sua dúvida Rodrigo

Not applicable

eu criei um modulo certo? Este módulo é uma macro certo? como eu coloco ela para funcionar dentro do meu dash...ou seja, seria um botão do tipo (clique aqui para gerar um PDF)?

nicolett_yuri
Author

Ok, você pode, por exemplo, criar um botão com uma ação para chamar a sua macro.

Ao criar o botão, vá na aba Ações, selecione a ação Executar Macro (Externo -> Executar Macro) e coloque o nome do módulo que você criou na ação.

Not applicable

yuri, posso te enviar o arquivo para vc analisar pq não gera?

nicolett_yuri
Author