Páginas

quarta-feira, 18 de maio de 2011

Criar arquivos PDF usando Progress (OpenEdge)

Pessoal, recentemente tive que gerar um arquivo PDF e como sabemos a PDFinclude.i é cheia de limitações. Então pesquisando, descobri que é possível utilizar o PDFCreator para fazer esta tarefa sem dor de cabeça.
Para usar este programa é necessário ter instalado o PDFCreator na maquina que irá imprimir em pdf. disponível em: http://www.pdfforge.org/.

Segue o Exemplo:
/*matar qualquer processo referente ao PDFCreator*/
DOS Silent VALUE("taskkill /F /IM PDFCreator.exe /T").

/*Variáveis de instancia*/
DEFINE VARIABLE pdf AS COM-HANDLE      NO-UNDO.
DEFINE VARIABLE pdfop AS COM-HANDLE      NO-UNDO.
CREATE "PDFCreator.clsPDFCreator" pdf NO-ERROR.
CREATE "PDFCreator.PDFCreatorOptions" pdfop NO-ERROR.

/*configuração do PDFCreator*/
PDF:cStart(,).
ASSIGN
    pdfop = PDF:cOptions
    PDFop:AutosaveDirectory = "c:\"
    PDFop:AutosaveFilename = "nome.pdf"
    PDFop:UseAutosave = 1
    PDFop:UseAutosaveDirectory = 1
    PDFop:AutosaveFormat = 0
    PDF:cOptions = PDFop
    PDF:cDefaultPrinter = "PDFCreator"
    PDF:cPrinterStop = FALSE.

/*comando para imprimir*/
PDF:cPrintFile("c:\teste.doc").

/*é possível imprimir do Excel, Word, etc.
basta substituir a linha acima pelo comando
de impressão desejado */

/*encerrar processo*/
PDF:cClose.
RELEASE OBJECT pdf.
RELEASE OBJECT pdfop.
DOS Silent VALUE("taskkill /F /IM PDFCreator.exe /T").

Também descobri que é possível mesclar com outros componentes .ocx para gerar a impressão. Segue um exemplo usando o Excel: 
/*matar qualquer processo referente ao PDFCreator*/
DOS Silent VALUE("taskkill /F /IM PDFCreator.exe /T").

/*Variáveis de instancia PDFCreator*/
DEFINE VARIABLE pdf AS COM-HANDLE      NO-UNDO.
DEFINE VARIABLE pdfop AS COM-HANDLE      NO-UNDO.
CREATE "PDFCreator.clsPDFCreator" pdf NO-ERROR.
CREATE "PDFCreator.PDFCreatorOptions" pdfop NO-ERROR.

/*Variáveis de instância excel*/
DEFINE VARIABLE chExcelApplication  as COM-HANDLE.
DEFINE VARIABLE arquivo             AS COM-HANDLE.
DEFINE VARIABLE aba                 AS COM-HANDLE.
CREATE 'Excel.Application' chExcelApplication.

/*configurações excel*/
ASSIGN
    chExcelApplication:VISIBLE = FALSE
    chExcelApplication:DisplayAlerts  = FALSE
    chExcelApplication:ScreenUpdating = FALSE
    arquivo = chExcelApplication:Workbooks:add("")
    aba = arquivo:sheets:ITEM(1)
    aba:cells(1,1):VALUE = "teste".

/*configuração do PDFCreator*/
PDF:cStart(,).
ASSIGN
    pdfop = PDF:cOptions
    PDFop:AutosaveDirectory = "c:\"
    PDFop:AutosaveFilename = "nome.pdf"
    PDFop:UseAutosave = 1
    PDFop:UseAutosaveDirectory = 1
    PDFop:AutosaveFormat = 0
    PDF:cOptions = PDFop
    PDF:cDefaultPrinter = "PDFCreator"
    PDF:cPrinterStop = FALSE.

/*comando excel para imprimir*/
aba:PrintOut(,,,,,,,,).

/*while para aguardar a impressão do arquivo*/
DO WHILE SEARCH("c:\nome.pdf") = ?:
END.

/*encerrar processo*/
PDF:cClose.
RELEASE OBJECT pdf.
RELEASE OBJECT pdfop.
DOS Silent VALUE("taskkill /F /IM PDFCreator.exe /T").

chExcelApplication:QUIT.
RELEASE OBJECT arquivo.
RELEASE OBJECT aba.
RELEASE OBJECT chExcelApplication.[/code]


Qualquer duvida, porte nos comentários.

2 comentários:

Anônimo disse...

Muito bom a rotina para gerar o pdf de um word em progress.
Parabéns.
Valeu.

Boso disse...

Muito BOm Obrigado por compartilhar

jef