Clipper On Line • Ver Tópico - conversão arquivo texto para rtf... e visualizar no fivewin
Página 1 de 2

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

MensagemEnviado: 03 Set 2008 10:12
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

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. )


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

MensagemEnviado: 03 Set 2008 22:29
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.

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

MensagemEnviado: 05 Set 2008 11:21
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

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

MensagemEnviado: 29 Set 2008 15:35
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

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

MensagemEnviado: 14 Out 2008 15:18
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

#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

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

MensagemEnviado: 05 Nov 2008 16:53
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

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

MensagemEnviado: 06 Nov 2008 09:50
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.

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

MensagemEnviado: 06 Nov 2008 15:30
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

****************************************************************************************
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

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

MensagemEnviado: 14 Dez 2008 09:28
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

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

MensagemEnviado: 15 Dez 2008 10:41
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.

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

MensagemEnviado: 15 Dez 2008 12:13
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

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

MensagemEnviado: 16 Dez 2008 08:03
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

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

MensagemEnviado: 16 Dez 2008 11:32
por edegar_metodo
Euclides, gostei de sua ideia, mas onde consigo e ole2.lib
tentei baixar, mas nao achei

Agradeço

Edegar

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

MensagemEnviado: 17 Dez 2008 10:14
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

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

MensagemEnviado: 17 Dez 2008 10:34
por edegar_metodo
Euclides,

Obrigado

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

MensagemEnviado: 19 Dez 2008 01:26
por sygecom
Edgar, OLE ja vem implantado com o proprio xharbour, qual versão você esta usando ?

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

MensagemEnviado: 19 Dez 2008 15:18
por rochinha
Amiguinhos

Olhando minhas pastas encontrei ole32.lib, oleaut32.lib, hbole.lib portanto voces devem procura-los nas pastas LIB do Harbour e BCC pois são nativas deles e não do Fivewin.

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

MensagemEnviado: 30 Ago 2015 15:03
por asimoes
Achei interessante a função do Farlei e fiz alguma alterações:

L=Default alinhado a esquerda
R-Alinhado a direita
C-Centralizado
J-Justificado

Os parâmetros

1-Arquivo de entrada
2-Arquivo de saída, se não informado, terá o mesmo nome da entrada
3-Tamanho do arquivo de entrada
4-Alinhamento

Txt2Rtf( "CONTRATO.TXT", "CONTRATO-LEFT.TXT", 69, "L" )
Txt2Rtf( "CONTRATO.TXT", "CONTRATO-RIGHT.TXT", 69, "R" )
Txt2Rtf( "CONTRATO.TXT", "CONTRATO-CENTER.TXT", 69, "C" )
Txt2Rtf( "CONTRATO.TXT", "CONTRATO-JUSTIFY.TXT", 69, "J" )

FUNCTION Txt2Rtf( cArquivoIn, cArquivoOu, nColunas, cAlinha )
LOCAL cArqRtf, arq, arq_txt, cHandle
LOCAL cCaractere := space( 01 ), cLinha := space( 01 )
LOCAL lf := chr( 13 ) + chr( 10 )
   hb_DeFault(@cAlinha,'L')
   hb_DeFault(@cArquivoOu,cArquivoIn)
   // 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( cArquivoOu, len( cArquivoOu ) - 4 ) + ".rtf" )
   //cArqRtf := substr(time(),1,2)+substr(time(),4,2)+substr(time(),7,2)+".rtf"
   // acrescentar antes do texto os parâmetros rtf
   nHandle := fCreate( cArqRtf ) //fcreate( cArqRtf, 1 ) somente leitura
   cHandle := "{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fcharset0 Arial;}}" + hb_eol()
   cHandle += "\margl284\margr505\margt505\margb505" + hb_eol()
   
   //{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Courier New;}}
   //{\*\generator Riched20 10.0.10240}\viewkind4\uc1
   
   // \viewkind4\uc1\pard\qj\f0\ justificado
   // \viewkind4\uc1\pard\qc\f0\ centralizado
   // \viewkind4\uc1\pard\f0\    esquerda
   // \viewkind4\uc1\pard\qr\f0\ direita
   
   IF cAlinha = "L"
      cHandle+="{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\f0\"
   ELSEIF cAlinha = "R"
      cHandle+="{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\qr\f0\"
   ELSEIF cAlinha = "C"
      cHandle+="{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\qc\f0\"
   ELSE
      cHandle+="{\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\qj\f0\"
   ENDIF
   
   IF nColunas == 136
      cHandle += "fs14 "
   ELSE
      cHandle += "fs23 "
   ENDIF
   fWrite( nHandle, cHandle )
   // Pega Linha por Linha do TXT e Transforma para RTF
   arq_txt := fOpen( cArquivoIn, 0 )
   WHILE .T.
      cCaractere := space( 01 )
      IF fRead( arq_txt, @cCaractere, 1 ) <> 1
         EXIT
      ENDIF
      IF ( cCaractere ) = chr( 13 )
         cLinha += "\par" + hb_eol()
         fWrite( nHandle, cLinha )
         cLinha := space( 01 )
         fSeek( arq_txt, 1, 1 )
         LOOP
      ENDIF
      IF cLinha = space( 01 )
         cLinha := cCaractere
      ELSE
         cLinha += cCaractere
      ENDIF
   ENDDO
   cHandle := "}"
   fWrite( nHandle, cHandle )
   fClose( nHandle )
   fClose( arq_txt )
RETURN Nil

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

MensagemEnviado: 02 Jun 2016 11:21
por Kapiaba
Rochinha, links quebrados. abs.