Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por lugab »

Pessoal... Help me, please !!!!

Este é um arquivo TXT que eu pretendo converter pra PDF, usando o TXTtoPDF.PRG daqui do fórum
SALTO-LINHA.jpg
Como faço pra eliminar esse controle "FF" (destacado com <-RETIRAR ISSO) de mudança de página no TXT, antes de enviar essa linha para o PDF ?
Se deixar passar esse "FF" para o PDF, termina juntando a última linha impressa com a que vem após o "FF", loucura !!!
Abaixo o TXTtoPDF em uso

Código: Selecionar todos

*******************************
Function Txt_Pdf(vARQ, vABRE )
*******************************
cText := memoread( vARQ )
nLines := mlcount( cText, 150 )
cFileToSave := cARQPDF        //  nome do PDF
Private page, height, width, def_font, font
Private pdf := HPDF_New()
if pdf == NIL
   Aviso("Erro HBPDF tentar gerar o Arquivo Pdf, Favor Tente novamente")
   Return("")
endif
Clargura=0
for i= 1 to nLines
    xLinha:= memoline( cText, 150, i, 1, .F. )
    if .not. empty(xlinha)
        xlinha=alltrim(xlinha)
        clargura=Max(clargura,len(xlinha))
    endif
next i

/* set compression mode */
If CompressaoPDF
   HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
else
  HPDF_SetCompressionMode( pdf, HPDF_COMP_NONE ) 
endif

page := HPDF_AddPage(pdf)
height := HPDF_Page_GetHeight(page)
width := HPDF_Page_GetWidth(page)

def_font := HPDF_GetFont( pdf, "Helvetica", NIL )
HPDF_Page_BeginText( page )
HPDF_Page_MoveTextPos( page, 10, height - 10 )
if clargura<85
   Tletra=11
elseif clargura<105
   Tletra=10
elseif clargura<125
   Tletra=9
elseif clargura<145
   Tletra=8
else
   Tletra=7
endif
vCONT=0
for nA := 1 to nLines
   cLinha := memoline( cText, 150, nA, 1, .F. )

   font := HPDF_GetFont( pdf, "Courier" , NIL )
   HPDF_Page_SetFontAndSize( page, def_font, tletra )
   HPDF_Page_SetFontAndSize( page, font, tletra )

   HPDF_Page_ShowText( page, cLinha )
   HPDF_Page_MoveTextPos( page, 0, -10 )

   vCONT=vCONT+1
   IF vCONT=80
    page := HPDF_AddPage(pdf)
    HPDF_Page_SetLineWidth(page, 1)

    HPDF_Page_BeginText( page )
    HPDF_Page_MoveTextPos( page, 10, height - 10 )
    vCONT = 0
   ENDIF
next

HPDF_Page_EndText( page )
HPDF_SaveToFile( pdf, cFileToSave )
IF upper(vABRE)="S"
   Abre_arquivo( cFileToSave ) // aqui dependendo já mando abrir o arquivo
ENDIF
HPDF_Free( pdf )
Return 
Eu uso Harbour 3.2, modo console
Grato...
lugab
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por Itamar M. Lins Jr. »

Ola!
Acredito que está na outra rotina. Essa não usa "EJECT"
Está na rotina que cria o TXT.
Em todo caso:

Código: Selecionar todos

cText := memoread( vARQ )
cText := strtran(cText,chr(12),"") //eject == chr(12)
cText := ... mais coisas que não queira por exemplo chr(14) expandido...
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por lugab »

Valeu, Itamar, vou testar

Muito obrigado
lugab
Avatar do usuário
coiote64
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 13 Jun 2015 16:54
Localização: CAMPINAS

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por coiote64 »

A todos! Boa tarde!

Eu também tive o mesmo problema da dificuldade do comando "EJECT" em impressora USB/Rede.
Depois de tanto ralar que durou até 1 mês para descobrir cheguei a seguinte solução para impressão de arquivo TXT.
Eis o seguinte...

O comando correto é: __eject()

==============================================================================================

No programa principal Main.prg coloque logo no inicio:

#ifndef HB_STD_CH_
#define HB_STD_CH_
#include "set.ch"
.
.
.
depois coloque nos seus módulos de impressão :
.
.
? "teste"
? "teste"
? "teste"
? "teste"
? "teste"
? "teste"
? "teste"
? "teste"
__eject()

Pronto! é isso...muito simples!

Abraços a todos!
Hans Frank
Campinas/SP
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por JoséQuintas »

Dá uma olhada na ze_pdfclass.prg, mas em todo caso, algo mais ou menos assim

Código: Selecionar todos

FOR EACH cTxtPagina IN hb_RegExSplit( MemoRead( "arquivo.txt" ), Chr(12) )
   // e imprime cada cTxtPagina
NEXT
hb_RegExSplit transforma o arquivo num array, usando o FF como indicação de separador, com isso, cada página fica em um elemento do array.
O FOR/EACH processa cada elemento do array colocando em cTxtPagina
O resultado é que vai trabalhar com uma página de cada vez, sem o FF
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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por asimoes »

Quintas,

O teu exemplo com Hb_RegExSplit está invertido, pra remover Chr(12) é assim:


Hb_RegExSplit( Chr(12), MemoRead( "teste.txt" ) )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por asimoes »

Testando...

Código: Selecionar todos

   set device to printer
   Set printer to teste.txt
   set print on
   Setprc(0,0)
   @Prow(),0   say "teste"
   @Prow()+1,0 say "teste"
   __Eject()
   Setprc(0,0)
   @Prow(),0   say "teste"
   @Prow()+1,0 say "teste"
   Set print off
   set printer to
   set device to screen
   
   aTxt := Hb_RegExSplit(  Chr(12), MemoRead( "teste.txt" ) )
   
   FOR EACH cTxtPagina IN aTxt
      ? cTxtPagina // e imprime cada cTxtPagina
   NEXT
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por asimoes »

Se quiser acessar diretamente o número da página.

Código: Selecionar todos

aPg := {}
FOR EACH cTxtPagina IN aTxt
   aAdd( aPg, {cTxtPagina})  guarda cada cTxtPagina
NEXT
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Salto de Linha ou sei lá o que no TXTtoPDF.PRG

Mensagem por JoséQuintas »

Valeu pela correção.
De vez em quando inverto esse, AScan e outros, que não fazem parte do dia a dia.
MemoEdit então.... sem chance lembrar tudo... rs
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/
Responder