Bom dia a todos. Migrei há algum tempo meus sistemas em Clipper para xHarbour/Minigui. Estou no momento necessitando gerar alguns relatórios (tipo extrato dos clientes) em PDF, gravando-os em disco, para posterior envio dos mesmos por email. Pesquisando no forum não encontrei uma solução para esta demanda. Alguém teria alguma solução?
Seria como se usasse uma impressora virtual tipo CUTEPDF mas sem que fosse aberta a janela para indicar o local de gravação, nome do arquivo, etc. Desde já, obrigado
gravação de relatório em PDF
Moderador: Moderadores
-
kakamachado
- Usuário Nível 1

- Mensagens: 30
- Registrado em: 07 Mar 2016 18:54
- Localização: Rio de Janeiro
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
gravação de relatório em PDF
Bom....
Fiz o que pude pra isolar do meu aplicativo tempos atrás...
PDFClass
Tá no GitHub.
Pesquisar: PDFClass ou josequintas
Gravar em disco?
Manda direto pelo Harbour.
E como pode gerar quando quiser.... pra que guardar PDF disso.
Fiz o que pude pra isolar do meu aplicativo tempos atrás...
PDFClass
Tá no GitHub.
Pesquisar: PDFClass ou josequintas
Gravar em disco?
Manda direto pelo Harbour.
E como pode gerar quando quiser.... pra que guardar PDF disso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
gravação de relatório em PDF
Código: Selecionar todos
oPDF := PDFClass()
IF oPDF == NIL
hwg_msginfo("Falha da criação do objeto PDF")
RETURN .F.
ENDIF
oPDF:cFileName := 'C:\TEMP\RELATORIO.PDF'
IF ! oPDF:PrintOptions( ); RETURN NIL; ENDIF
IF oPDF:nPrinterType == PDFCLASS_LANDSCAPE
oPDF:Begin()
oPDF:nPageHeight := 440
oPDF:AddPage()
nMaxCol := oPDF:MaxCol()
nMaxRow := oPDF:MaxRow()
oPDF:DrawBox( 0, 0, 9, 41, Nil, Nil, Nil ) // box esquerdo
oPDF:DrawImageSize( 0.5, 0.5, 8, 39, "logotipo.jpg" ) // logotipo
oPDF:DrawBox( 0, 41, 9, 117, Nil, Nil, Nil ) // box centro
oPDF:DrawText( 2.0, 42, RTRIM(FLAG->n_xNome), nil, 10, "Helvetica-Bold", Nil, Nil )
oPDF:DrawText( 3.5, 42, RTRIM(FLAG->n_xLgr) + ', ' + RTRIM(FLAG->n_nro), Nil, 8, "Helvetica", Nil, Nil )
oPDF:DrawText( 5.0, 42,'BAIRRO - ' + RTRIM(FLAG->n_xBairro), Nil, 8, "Helvetica", Nil, Nil )
oPDF:DrawText( 6.4, 42, "CEP " +FLAG->n_CEP + ' - ' + RTRIM(FLAG->n_xMun) + ' - ' + FLAG->n_xUF + " - FONE: " +FLAG->n_fone, Nil, 8, "Helvetica", Nil, Nil )
oPDF:DrawText( 8.0, 42, 'CNPJ-'+RTRIM(FLAG->n_CNPJ) + ' Insc.Est.-' + RTRIM(FLAG->n_IE) , Nil, 10, "Helvetica-Bold", Nil, Nil )
oPDF:DrawBox( 0, nMaxCol, 9, 41, Nil, Nil, Nil ) // box direito
oPDF:DrawText( 1.5, 120, "RECIBO Nr.:", Nil, 10, "Helvetica", Nil, Nil )
oPDF:DrawBox( 3, nMaxCol-3, 6, nMaxCol-31, Nil, Nil, Nil ) // box id pedido
oPDF:DrawText( 5.5,125, M->NUMDOC , Nil, 18, "Helvetica", Nil, Nil )
oPDF:DrawBox( 9, 0, 100, nMaxCol, Nil, Nil, Nil )
oPDF:DrawText( 14, 2,'RECIBO DE PAGAMENTO DE VALE' , nil, 16, "Helvetica-Bold", Nil, Nil )
oPDF:DrawBox( 10, (nMaxCol/3)*2, 15, nMaxCol-2, Nil, Nil, Nil )
oPDF:DrawText( 14, ((nMaxCol/3)*2)+2,'R$ ' + transform(m->valor,"**,***,***,**9.99"), nil, 16, "Helvetica-Bold", Nil, Nil )
oPDF:DrawText( 18, 2, 'Adiantamos ao Vendedor: ' , Nil, 12, "Helvetica-Bold", Nil, Nil )
oPDF:DrawText( 20, 2, STRZERO(VENDEDOR->CODVEN,4,0)+"-"+RTRIM(SUBSTR(VENDEDOR->NOMVEN,1,42)) , Nil, 12, "Helvetica", Nil, Nil )
oPDF:DrawText( 22, 2, 'A importância de: R$ ' + transform(m->valor,"**,***,***,**9.99") , Nil, 12, "Helvetica-Bold", Nil, Nil )
extenso:=ext(M->VALOR,80)
oPDF:DrawText( 24, 2, left(extenso,80) , Nil, 12, "Helvetica", Nil, Nil )
nLinha := 26
IF ! EMPTY(substr(extenso,81,80))
oPDF:DrawText( 26, 2, substr(extenso,81,80) , Nil, 12, "Helvetica", Nil, Nil )
nLinha := 28
IF ! EMPTY(right(extenso,80))
oPDF:DrawText( 28, 2, right(extenso,80) , Nil, 12, "Helvetica", Nil, Nil )
nLinha := 30
ENDIF
ENDIF
oPDF:DrawText( nLinha, 2, "Referente a(o):", Nil, 12, "Helvetica-Bold", Nil, Nil )
nLinha += 2
oPDF:DrawText( nLinha, 2, m->histor, Nil, 12, "Helvetica", Nil, Nil )
nLinha += 2
oPDF:DrawLine( nLinha, 2, 90, nMaxCol-2, 1 )
oPDF:DrawText( 97, 2, RTRIM(FLAG->n_xMun) +', ' + DTOC(DAT_HOJE)+" - "+TIME() , Nil, 12, "Helvetica", Nil, Nil )
// oPDF:DrawBox( 97, (nMaxCol/3)*2, 97, nMaxCol-2, Nil, Nil, Nil )
oPDF:DrawLine( 97, (nMaxCol/3)*2, 97, nMaxCol-2, 1 )
oPDF:DrawText( 98, (nMaxCol/3)*2, "Assinatura:", Nil, 8, "Helvetica", Nil, Nil )
oPDF:End( )agora gerar PDF ta mamão com açúcar
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
gravação de relatório em PDF
Código: Selecionar todos
********************************************************
STATIC FUNCTION OKENVIAEMAIL( me_eMAIL )
********************************************************
if me_eMAIL == ""
hwg_MsgInfo("O RECIBO NAO PODE SER ENVIADO POR FALTA DE UM E-MAIL "+ HB_EOL())
RETURN NIL
endif
me_eMAIL := LOWER(me_eMAIL)
lSucesso := .F.
cFrom := "seuemail@gmail.com"
cPassword := "suasenha"
cTo := me_eMAIL
cHost := "google"
cSubject := "SGC - RECIBO DE PAGAMENTO"
cBody := "Enviado por: " + HB_EOL() +;
FLAG->n_xFant+ HB_EOL() +;
FLAG->n_xNome + HB_EOL() + HB_EOL() +;
"para: " + HB_EOL() + ;
RTRIM(PAGAR->NRAZ_SOC) + HB_EOL() +;
"DOCUMENTO: " + RTRIM(PAGAR->NUMDOC) + HB_EOL() +;
"VALOR R$: " + LTRIM(STR(PAGAR->VALOR,14,2)) + HB_EOL()+ HB_EOL() +;
"Obs: E-mail enviado automaticamente por SGC-SISTEMA DE GESTAO DE COMERCIO, nao responda."
aFilesAttch := {cArquivoPDF := "PDFPAGAR\" + PAGAR->UFORNEC + ltrim(SUBSTR(PAGAR->NUMDOC,1,14) + "_" + SUBSTR(PAGAR->NUMDOC,16,2)) + ".PDF"}
lSucesso := Email_Envia( cFrom, cPassword, cTo, cHost, aFilesAttch, cBody, cSubject )
IF ! lSucesso
hwg_MsgInfo("E-MAIL NAO FOI ENVIADO"+ HB_EOL() )
ELSE
hwg_MsgInfo("E-MAIL FOI ENVIADO COM SUCESSO"+ HB_EOL() )
ENDIF
RETURN NILHARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
-
kakamachado
- Usuário Nível 1

- Mensagens: 30
- Registrado em: 07 Mar 2016 18:54
- Localização: Rio de Janeiro
gravação de relatório em PDF
Bom dia a todos. Ao Fernando, Quintas e Hazael, obrigado pelas respostas, vou pesquisar e testar as alternativas apresentadas. Mas pelo que entendi, ou usando a classe PDFClass ou a HaruPDF, terei que reescrever as rotinas de emissão, já que uso a Hbprint, que me permite usar os comandos de impressão como se fosse o clipper. Coloquei abaixo trecho de um programa de emissão de um relatório para vocês verem como faço.
Atualmente quando quero gerar o relatório em PDF, seleciono a impressora virtual CUTEPDF Writer e salvo o relatório em uma pasta qualquer, o que me permite consulta-lo a qualquer momento ou enviar por email. O problema é que ao clicar no botão de IMPRIMIR da aplicação, é aberta uma janela onde são exibidos o nome do relatório (que será o nome do arquivo PDF), a pasta de gravação e o formato do arquivo, campos estes que podem ser alterados neste momento e então tenho que clicar no botão SALVAR desta janela para que o arquivo PDF seja gravado.
Se eu conseguisse direcionar a impressão para uma impressora virtual como a CUTEPDF, sem que esta janela fosse aberta, já que o nome do arquivo e a pasta de gravação já estão definidos, seria a solução ideal, pois não teria que alterar nem uma linha do meu sistema.
Alguém sabe como fazer isto? Obrigado
Atualmente quando quero gerar o relatório em PDF, seleciono a impressora virtual CUTEPDF Writer e salvo o relatório em uma pasta qualquer, o que me permite consulta-lo a qualquer momento ou enviar por email. O problema é que ao clicar no botão de IMPRIMIR da aplicação, é aberta uma janela onde são exibidos o nome do relatório (que será o nome do arquivo PDF), a pasta de gravação e o formato do arquivo, campos estes que podem ser alterados neste momento e então tenho que clicar no botão SALVAR desta janela para que o arquivo PDF seja gravado.
Se eu conseguisse direcionar a impressão para uma impressora virtual como a CUTEPDF, sem que esta janela fosse aberta, já que o nome do arquivo e a pasta de gravação já estão definidos, seria a solução ideal, pois não teria que alterar nem uma linha do meu sistema.
Alguém sabe como fazer isto? Obrigado
Código: Selecionar todos
*-------------------------------------------------*
* OBTEM DADOS DA TELA CONFORME O RELATORIO PEDIDO *
*-------------------------------------------------*
PROCEDURE P242_EXEC (lpreview)
WORIENTA := "P" // PORTRAIT
WPAPEL := "A4" // A4
WPAGINA := 0
INIT PRINTSYS
SET THUMBNAILS ON
IF form_P242.combo_printer.ItemCount=0 .OR. ;
form_P242.combo_printer.Value<=0 .OR. ;
form_P242.combo_printer.Value>form_P242.combo_printer.ItemCount
MSGSTOP("Não existem impressoras instaladas","Erro")
release printsys
RETURN nil
ENDIF
IF lpreview
SELECT PRINTER form_P242.combo_printer.Item(form_P242.combo_printer.Value) PREVIEW
ELSE
SELECT PRINTER form_P242.combo_printer.Item(form_P242.combo_printer.Value)
ENDIF
RDEFFONT() // define as fontes disponiveis
select font "F10T" // Times 10
select pen "p0"
Set Page orientation DMORIENT_PORTRAIT papersize DMPAPER_LETTER
START DOC NAME "Emissão de Listagens de Empresas"
DO P242_IMP_FUNC_RUBRICAS
END DOC
set page orientation DMORIENT_PORTRAIT papersize DMPAPER_A4 font "F12T"
RELEASE PRINTSYS
RETURN
*-------------------------------------*
* IMPRESSAO DO FUNCIONARIO vs RUBRICA *
*-------------------------------------*
PROCEDURE P242_IMP_FUNC_RUBRICAS
IF WPAGINA = 0
DO P242_CABECALHOS_DIVERSOS
ELSE
IF WLINHA > 260
END PAGE
DO P242_CABECALHOS_DIVERSOS
ENDIF
ENDIF
select font "F07C"
WLINHA = WLINHA + 4
@ WLINHA,012 SAY TRANSFORM(WFU_MAT, "@R 9999-999-9") + " " + WFU_NOME TO PRINT
@ WLINHA,078 SAY WFU_ST_ATIV TO PRINT
SET TEXT ALIGN RIGHT
@ WLINHA,097 SAY TRANSFORM(WFU_DA_ADM , "@R 99/99/9999") TO PRINT
SET TEXT ALIGN LEFT
@ WLINHA,102 SAY SUBSTR(WDE_CAR,1,15) TO PRINT
SET TEXT ALIGN RIGHT
@ WLINHA,135 SAY TRANSFORM(WFU_CO_SIN,"@R 99-9") TO PRINT
SET TEXT ALIGN LEFT
IF WOP_RUBR = "1"
SELECT 09
DO WHILE (TR_MAT + TR_CODIGO) = (WFU_MAT + WCOD_RUBR) .AND. .NOT. EOF()
SET TEXT ALIGN RIGHT
@ WLINHA,141 SAY TRANSFORM(TR_TIPO, "@! X") TO PRINT
@ WLINHA,153 SAY TRANSFORM(TR_QTD , "999.99") TO PRINT
@ WLINHA,167 SAY TRANSFORM(TR_PER , "999.99") TO PRINT
@ WLINHA,182 SAY TRANSFORM(TR_REF , "@R 99/9999") TO PRINT
@ WLINHA,198 SAY TRANSFORM(TR_VAL , "999999999.99") TO PRINT
SET TEXT ALIGN LEFT
&& VERIFICA SE TEM OUTRAS TRANSACOES COM O MESMO CODIGO
SKIP
WLINHA = WLINHA + 4
LOOP
ENDDO
ENDIF
RETURN- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
gravação de relatório em PDF
Boa tarde..
Dá uma olhada aqui kakamachado
https://pctoledo.org/forum/viewto ... sb#p114739
Não é tão sofisticado quanto a PDFclass do Quintas...
Com essas rotinas quando você escolhe a impressora é ajustado automaticamente para a impressão direto na impressora (caso a impressora seja matricial) ou gerado um pdf e exibe o pdf na tela para imprimir em qualquer impressora, laser ou jato de tinta.
Não precisa mudar ou criar novos relatórios. É usado o mesmo arquivo txt tanto para matricial quanto para laser/jato de tinta.
Rubens
Dá uma olhada aqui kakamachado
https://pctoledo.org/forum/viewto ... sb#p114739
Não é tão sofisticado quanto a PDFclass do Quintas...
Com essas rotinas quando você escolhe a impressora é ajustado automaticamente para a impressão direto na impressora (caso a impressora seja matricial) ou gerado um pdf e exibe o pdf na tela para imprimir em qualquer impressora, laser ou jato de tinta.
Não precisa mudar ou criar novos relatórios. É usado o mesmo arquivo txt tanto para matricial quanto para laser/jato de tinta.
Rubens
"Eu e minha casa servimos ao Senhor e você
"