Criar arquivos PDF usando Progress (OpenEdge)

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.

Atualmente estamos usamos outra forma de gerar relatórios em PDF de forma simples porém este recurso do PDFCreator pode acabar sendo útil para alguém em algum momento, por isso vale salvar essa informação.

Vou trazer mais detalhes futuramente.

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.