conversão arquivo texto para rtf... e visualizar no fivewin

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
FARLEY RIBEIRO
Usuário Nível 2
Usuário Nível 2
Mensagens: 89
Registrado em: 24 Jul 2007 10:26
Localização: MONTES CLAROS-MG

conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por FARLEY RIBEIRO »

Olá pessoal,

Obtive sucesso em converter meus relatorios para rtf com esse fonte abaixo.

set printer to listas.txt
Txt2rtf( "listas.txt", 80 )

Só que gostaria melhorar isso, a fonte é única para todo o texto e o tamanho varia somente entre 80 colunas e 132 colunas...

Utilizar cores em qualquer parte do texto...
Utilizar qualquer fonte, tamanho, estilo...
Inserir imagens...

E visualizar no fivewin... pois demora processar/visualizar uma tabela de preços com 1000 paginas no WORD ou WORDVIEW.


Conto com a ajuda de vcs...

Acredito que servira para outros colegas tb.

Grato

Farley

Código: Selecionar todos

function Txt2rtf( cArquivo, nColunas )
local cArqRtf, arq, arq_txt, cHandle
local cCaractere := space( 01 )
local cLinha := space( 01 )
local lf := chr( 13 ) + chr( 10 )
// fs define o tamanho da fonte, para o Courier New é a metade
// fs14 - fonte 7,0 - 136 colunas
// fs23 - fonte 11,5 - 80 colunas
// margl - margem esquerda
// margr - margem direita
// margt - margem superior
// margb - margem inferior
// criar um arquivo rtf com o mesmo nome
cArqRtf := lower( left( cArquivo, len( cArquivo ) - 4 ) + ".rtf" )
cArqRtf := substr(time(),1,2)+substr(time(),4,2)+substr(time(),7,2)+".rtf"
// End
// acrescentar antes do texto os parâmetros rtf
arq := fcreate( cArqRtf, 1 )
cHandle := "{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fcharset0 Arial;}}" + lf
cHandle += "\margl284\margr505\margt505\margb505" + lf
if nColunas == 136
cHandle += "{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\fs14 "
else
cHandle += "{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\fs23 "
endif
// End
fwrite( arq, cHandle )
// Pega Linha por Linha do TXT e Transforma para RTF
arq_txt := fopen( cArquivo, 0 )
while .t.
cCaractere := space( 01 )
if fread( arq_txt, @cCaractere, 1 ) <> 1
exit
endif
if ( cCaractere ) = chr( 13 )
cLinha += "\par" + lf
fwrite( arq, cLinha )
cLinha := space( 01 )
fseek( arq_txt, 1, 1 )
loop
endif
if cLinha = space( 01 )
cLinha := cCaractere
else
cLinha += cCaractere
endif
enddo
// End
cHandle := "}"
fwrite( arq, cHandle )
fclose( arq )
fclose( arq_txt )
return( .T. )

Borland BCC(5.51)/PellesC(5.01)/Fivewin(2.6)/xHarbour.org(0.99.50)/Med(3.02)/DBFNTX/DBFCDX /WvWToools(0.83)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por sygecom »

Olá Farley,
Esse exemplo que vc postou é da pasta tests do xharbour da CVS, e como lá já diz, ele é para uso simples, de uma procurada aqui pelo forum que já vi o pessoal vendo alguns recurso a mais para RTF. Se não me engano o colega Rochinha que tem algumas perolas para RTF.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
FARLEY RIBEIRO
Usuário Nível 2
Usuário Nível 2
Mensagens: 89
Registrado em: 24 Jul 2007 10:26
Localização: MONTES CLAROS-MG

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por FARLEY RIBEIRO »

Olá colegas...

Obrigado ao Leonardo pela sugestão. Obrigado ao Kleyber por indicar a classe Tword.

Já consegui algumas coisas.. Inserir imagens.. quebra de páginas.

Agora eu quero é converter um arquivo texto (set printer to relat.txt) para padrão word (doc, rtf), mas com alguns definições que irei passar neste arquivo texto, tais como: cor, fonte, tamanho, etc.

Ex: LISTAGEM DE CLIENTES
Gostaria com Fonte Arial, 20, Cor Azul, Negrito, Italico, Sublinhado.

Tentei dessa forma e não consegui.
DEFINE FONT oFont1 NAME 'Arial' SIZE 0, -12 OF oWord
oWord:Say( 2, 45, 'Classe TWORD método Say. Mostra o texto numa caixa.', oFont1)

Alguém poderia me ajudar ou sugerir alguma dica.

Grato

Farley
Avatar do usuário
FARLEY RIBEIRO
Usuário Nível 2
Usuário Nível 2
Mensagens: 89
Registrado em: 24 Jul 2007 10:26
Localização: MONTES CLAROS-MG

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por FARLEY RIBEIRO »

O arquivo .rtf já gerei.. só falta visualizar..

Gostaria sem depender de programas externos com recursos próprios do fivewin..

Grato

Farley
Borland BCC(5.51)/PellesC(5.01)/Fivewin(2.6)/xHarbour.org(0.99.50)/Med(3.02)/DBFNTX/DBFCDX /WvWToools(0.83)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por rochinha »

Amiguinho

Se sua versão for 32bits talvez voce tenha exito se fizer uso de Riched32.dll em conjunto com Fivewin. Veja o trecho de codigo que eu uso para imprimir meus .RTFs:

Onde:
cFile - Nome do arquivo .RTF
lPrint - Critica se imprime diretamente
lVisible - Mostra na tela o resultado

Código: Selecionar todos

#include "richedit.ch"
function rtfWPrint( cFile, lPrint, lVisible )
  LOCAL oRWnd, oRich, hRichDLL := LoadLibrary( "riched20.dll" ), cVar := ""
  LOCAL ScreenWidth := GetSysMetrics(0), ScreenHeight := GetSysMetrics(1), ScreenMargim := 25
  if lVisible
     DEFINE DIALOG oRWnd FROM 0, 0 TO ScreenHeight,ScreenWidth PIXEL STYLE WS_POPUP COLOR nRGB(0,0,0),nRGB(0,0,0) //NOSYSMENU NOICONIZE
            @ 5,5 SAY "Imprimindo "+cFile+" em "+PRNGETNAME()+"..." COLOR nRGB(255,255,255),nRGB(0,0,0) OF oRWnd PIXEL 
            @ ScreenMargim,(ScreenWidth-310)/8 RICHEDIT oRich VAR cVar SIZE 310,350 PIXEL OF oRWnd
            oRich:LoadFromRTFFile( cFile )
            if lPrint
               oRich:Print( cFile )
            endif
     ACTIVATE DIALOG oRWnd
  else
     DEFINE WINDOW oRWnd FROM 0,0 TO 1,1 TITLE "Imprimindo "+cFile+"..."
            oRich := TRichEdit():New(0,0,,oRWnd,,,,.T.,, .f. )
            oRich:LoadFromRTFFile( cFile )
            if lPrint
               oRich:Print( cFile )
            endif
            //oRWnd:setControl(oRich)
     ACTIVATE WINDOW oRWnd
     SysWait(5)
     oRWnd:End()
  endif
  FreeLibrary( hRichDLL )
  return nil
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por edegar_metodo »

Pergunta ao rochicha:

tem como no fivewin, fazer um servidor de impressao onde o sistema abre um dbf que contem o nome do arquivo (lembrando que o mesmo eh .rtf) e envia para uma impressora que o dbf informou?

Edegar
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por rochinha »

Amiguinho,

Tem sim,

Tempos atrás eu criei um servidor que funciona como ponte entre um aplicativo e o sistema de fax do Windows 2003 ou XP rodando na bandeja do Windows e sendo acionada via chave RUN do registro.

o funcionamento dele era baseado num .DBf que recebia um registro com os dados para o fax.

O programa, de tempos em tempos fazia uma leitura da base de dados, verificava se existia arquivos pendentes de envio e fazia a ponte com o sistema de fax. Funcionava inclusive com o WinFAX. Mas fax e coisa do passado em termos das tecnologias que temos hoje.

Caso queira dar uma olhada veja: http://www.5volution.com.br/app02.asp

Posteriormente a isto produzi um outro aplicativo com a mesma base que tem por intuito driblar o mapeamento de impressoras, o qual não era possivel com uma Itautec de 40 colunas, ela simplesmente não era mapeável, portanto as maquinas da rede não imprimiam nela.

O que fiz:

Este aplicativo é jogado na memória quando a maquina é ligada através de uma chamado a chave RUN do registro.
Esta maquina que o executa é a mesma que possui a impressora ligada fisicamente.
Ele fica no ar lendo de X em X segundos a pasta do meu pequeno PDV.
Este PDV é executado em várias maquinas de uma rede e todos estão configurados para salvar o impresso nesta pasta.
Este aplicativo encontra os arquivos de impressão, abre, interpreta-os e envia a saida para a impressora.
O tempo de espera é definido por meu PDV e pode variar de 1 segundo para mais.

Ja este caso o programa não é suportado por um .DBF e sim por arquivos que são encontrados, manuseados e deletados.

No seu caso voce pode usar qualquer uma destas técnicas e se voce usar Harbour poderá capturar todas as impressoras existentes na maquina e configura-las no seu servidor de impressão.

Para direcionar a impressão e impressos voce apenas precisaria enviar como parametros o nome do arquivo e a impressora alvo. Se usar um .DBf voce poderá guardar informações como data, hora e usuario que fez a solicitação e nome do arquivo e impressora que o mesmo escolheu para o feito.

a sofisticação ficaria por conta do seu aplicativo porder bloquear a impressão dependendo de alguma critica existente no mesmo, tipo, se o nivel do usuario for abaixo de X não pode continuar ou o arquivo não seria impresso.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por edegar_metodo »

amigo rochinha...

vi que vc disponibilizou o prnrich.exe que funcionou legal, agora nao querendo (ja sendo um pouco abusado..rs)

nao teria como ele imprimir direto, digo informar o nome do arquivo e a impressora e ele imprimir sem passar pelo menu?, nao que o menu nao seja interessante, mas seria mais uma funcionalidade, que da mesma forma que resolve meu problema acredito que resolveria de outras pessoas tbm.

digo isto, pois estou (como na maioria das pessoas..rs...procurando o caminho mais..digo muito mais..facil)

Edegar

segue rotina para impressao

Código: Selecionar todos

****************************************************************************************
function main()

clear

use ..\arquivos\temp_imp new shared


@ 00 , 00 say 'Aguardando Arquivos para Impressao'
@ 02 , 00 say 'Pressione ESC para finalizar'

sele temp_imp
go top

do while lastkey() # 27
   do while !eof() .and. lastkey()#27
      if temp_imp -> situ # "OK"
         xArq   := alltrim(temp_imp -> arquivo)
         xPorta := upper(alltrim(temp_imp -> Porta))
         if left(xPorta,3)=´LPT´
            copy file &xArq to &xPorta
           else            
            ! wordpad /p &xArq  (((((( aki posso usar o prnrich   ))))))))
*
* como vc pode ver imprimo apenas na impressora padrao, como o relatorio eh pequeno 1 pagina e sempre é impresso
* na mesma impressora, gostaria de seguir a ideia acima, apenas enviando para outra impressora, mas se tiver que
* fazer uma rotina para isso......maos a obra...
*
* ops... lembrando que o unico sistema que compilei no xharbour foi este...rs..
* no fivewin  .....nada....rs
*            
         endif
         sele temp_imp
         do while !lock()
         enddo
         repl situ with "OK"
         unlock
      endif
      skip
   enddo
   Inkey(1)    
   go top 
enddo

close all
**********************************************************************
-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por edegar_metodo »

Ao amigo rochinha

VC disse que tem como fazer a rotina em fivewin e no xharbour e possivel?

outra pergunta:
no post acima vc colocou um exemplo onde usa o richedit.ch onde consigo o mesmo?

Fico no aguardo

Edegar
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por rochinha »

Amiguinho,

Pode sim,

O uso do fivewin é só para apresentação, pois o codigo usa OLE para automatizar o uso da API com Word.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por edegar_metodo »

rochinha....

sendo assim esta ficando menos dificel,, mas onde consiguo o richedit.ch?

obs.. lembrando que no exemplo que enviei acima, estou compilando com o xharbour, outro detalhe que considero importante:
no cliente acima (até que poderia compilar com o xharbou e aprender a win32prn), mas tenho um amigo tem um sistema bem mais complexo que as alterações serão grandes.. sendo assim ele imprime seguindo a mesma ideia (gera o rtf e wordpad /p), e como estou procurando uma solução para os dois.....mas ja estou quase desistindo..
e o interessante é que eu ja afirmei anteriormente (se o wordpad aceitasse mais um paramento-nome da impressora) eu nao teria problema, sendo assim o que parece ser apenas um detalhe, se tornou um grande problema.


Edegar
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por Euclides »

Edegar,
Eu utilizo +/- o método do Rochinha assim:
Crio um documento no Word .doc mesmo.
por exemplo em: "C:\sistema\forms\modelo1.doc"

Prezado Sr. [CAMPO1]
Segue anexo a nota no valor de [CAMPON]
...

No programa faço assim:

local oWord, cDoc:="C:\sistema\forms\modelo1.doc"
local cCampo1:="XXXXXX", cCampon:=transform(999.99, "@E 99,999.99")

oWord:=TWord():New()
oWord:OpenDoc(cText)
oWord:Replace('[CAMPO1]', cCampo1)
oWord:Replace('[CAMPON]', cCampon)
oWord:oActiveDoc:Invoke("PrintOut",.F.,.F., 0, "", "", "", 0, 1, "")
oWord:End()

Isso imprime diretamente na impressora sem intervenção do operador.
Utilizo no Fivewin com o TWord e OLE2.LIB
Até+
Euclides
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por edegar_metodo »

Euclides, gostei de sua ideia, mas onde consigo e ole2.lib
tentei baixar, mas nao achei

Agradeço

Edegar
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por Euclides »

Edeger,
procure no Google: "ole2.lib" +fivewin
Digite com aspas e tudo mais e vai achar algo já na primeira página.
Só mais uma coisa: Isso eu utilizo em um sistema FiveWin 16 bits.
É importante saber em que ambiente vai ser utilizado.
O xHarbour e o Harbour já vem com o OLE2 em uma dos seus libs.
Aparentemente, o FIVEH.LIB já vem com OLE2.
É isso aí, T+
Euclides
edegar_metodo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Ago 2008 18:29
Localização: Colorado - Pr

Re: conversão arquivo texto para rtf... e visualizar no fivewin

Mensagem por edegar_metodo »

Euclides,

Obrigado
Responder