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:
Muito bom a rotina para gerar o pdf de um word em progress.
Parabéns.
Valeu.
Muito BOm Obrigado por compartilhar
jef
Postar um comentário