Página 1 de 1

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

Enviado: 13 Set 2018 19:59
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...

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

Enviado: 13 Set 2018 22:16
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.

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

Enviado: 13 Set 2018 23:41
por lugab
Valeu, Itamar, vou testar

Muito obrigado

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

Enviado: 26 Out 2018 16:44
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!

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

Enviado: 27 Out 2018 17:39
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

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

Enviado: 27 Out 2018 22:28
por asimoes
Quintas,

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


Hb_RegExSplit( Chr(12), MemoRead( "teste.txt" ) )

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

Enviado: 27 Out 2018 22:34
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

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

Enviado: 27 Out 2018 22:41
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

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

Enviado: 27 Out 2018 23:26
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