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