Dúvida Sumatra ignora tamanho de campo

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por porter »

olá pessoal,
Estou utilizando o SUMATRA para gerar relatório, no comando abaixo, se o campo ENDFOR por exemplo estiver vazio,
o campo seguinte BAIFOR imprime na coluna ENDFOR, portanto é ignorado o espaço do campo DBF no caso Caracter de 30,
só gera o relatório corretamente nas colunas desejadas, se os campos forem preenchido, alguém encontrou esse problema ?

@ PROW()+1,00 SAY CODFOR + " " + NOMFOR + " " + ENDFOR + " " + LEFT(BAIFOR,30)

Habour 3.2.0dev console
DBF
Windows 7

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

Dúvida Sumatra ignora tamanho de campo

Mensagem por Itamar M. Lins Jr. »

Ola!
Cadê o link do SUMATRA ? ou os fontes ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por porter »

Estou gerando um arquivo texto e acionando dessa forma:

Código: Selecionar todos

SET DEVICE TO SCREEN
SET PRINTER TO
SET PRINTER OFF
cArqPrn := "C:\ESTOQUE\FORNECEDORES.TXT"
cArqPdf := "RELAT.PDF"
TXTtoPDF( cArqPrn, cArqPdf, .t., .t.)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por JoséQuintas »

Depende do fonte usado no PDF.
Se for, por exemplo, Arial, o tamanho dos caracteres é flexível e não fixo.

Verifique essa função TxtToPdf()
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/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por porter »

Estou usando fonte Courier, gostaria que considerasse o espaço total de um campo quando estiver vazio,
se em um determinado campo gravar apenas um (.) ponto, ai sim considera o espaçamento total.

Código: Selecionar todos

	HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
	page             := HPDF_AddPage(pdf)
	height	    := HPDF_Page_GetHeight(page)
	width 	    := HPDF_Page_GetWidth(page)
  	font 		    := HPDF_GetFont( pdf, "Courier", NIL )
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Dúvida Sumatra ignora tamanho de campo

Mensagem por rubens »

Porter,

Não é problema do Sumatra....
Para mim é problema da HaruPdf ou na TXTtoPDF. Pelo que percebi se você manda imprimir um texto que começa vazio e mandar posicionar em uma determinada coluna ele vai começar na coluna 0.
Se você mandar imprimir um campo em branco só com espaço vai ser ignorado o tamanho dele e o restante vai começar na coluna 0.
Para contornar o problema eu mando imprimir um CHR(255) mais o restante da linha, inclusive quando tiver formatação na linha não mande em colunas fixas, concatene o texto e mande imprimir a linha completa.
Ao invés de:
@ PROW()+1,00 SAY CODFOR + " " + NOMFOR + " " + ENDFOR + " " + LEFT(BAIFOR,30)
Mande:
@ PROW()+1,00 SAY CHR(255)+CODFOR + " " + NOMFOR + " " + ENDFOR + " " + LEFT(BAIFOR,30)

Teste assim para ver se funciona.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por porter »

olá Rubens,
Funcionou perfeitamente, muito obrigado por sua ajuda e atenção.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por JoséQuintas »

Vai ver, no TxtToPdf tem um AllTrim().... 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/
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

Dúvida Sumatra ignora tamanho de campo

Mensagem por Itamar M. Lins Jr. »

Ola!
Onde encontramos a SUMATRA ?
E está errado a meu ver ai a lógica.
Pra mim deveria usar strtran(endfor," ",chr(255)) assim em todas as variáveis, mas mesmo assim seria gambiarra por causa das paginas de códigos,
PTISO,PT850,UTF...
Como já funcionou beleza, bola pra frente!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por Jairo Maia »

Este post sim faz jus ao ditado:

O fácil se resolve na hora, o difícil se resolve rápido, o impossível se resolve em algumas horas, e o MILAGRE demora um pouco...

Esse Rubens e esse Porter são loucos de pedra... risos...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida Sumatra ignora tamanho de campo

Mensagem por JoséQuintas »

Pois é.

A pergunta é sobre Sumatra.
A função é TxtToPdf.
a dica é sobre Harupdf .
E a solução Chr(255) NO TXT.

Isso lembra aquela frase:
Tem dia que de noite é phod.
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
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Dúvida Sumatra ignora tamanho de campo

Mensagem por rubens »

Bom dia...

Quando mexi na TXTtoPDF criada pelo Toledo... Ela imprimia linha a linha e eu precisava que lesse caracater a caracter para encontrar os códigos de negrito, sublinhado, condesado etc...

Daí quando o início da linha é " " o harupdf ignorava a coluna e começava na coluna zero... o que eu consegui foi isso, simular um caracter no inicio. A partir do momento em que existe um caracter no inicio da linha pode posicionar em qualquer coluna que dá certo..
A função é esta abaixo... se houver uma solução mais "lógica" seja bem vinda...

Código: Selecionar todos

********************************************************************************
Function TXTtoPDF( cFileToRead, cFileToSave, lAbre )
local x_ret
Local pdf := HPDF_New()
local tw
local l,a
LOCAL cTELA := SaveScreen()
Local cBuffer

Local chr_pcom:="CHR(15)"        			// ativa comprimido
Local chr_tcom:="CHR(18)"        			// desativa comprimido
 
Local chr_penf:="CHR(27)+'E'"      		// ativa enfatizado
Local chr_tenf:="CHR(27)+'F'"      		// desativa enfatizado
 
Local chr_pexp:="CHR(14)"  					// ativa expansao
Local chr_texp:="CHR(18)"  					// desativa expansao

if pdf == NIL
   return .F.
endif

HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
page 		:= HPDF_AddPage(pdf)
height	:= HPDF_Page_GetHeight(page)
width 	:= HPDF_Page_GetWidth(page)
font 		:= HPDF_GetFont( pdf, "Courier", NIL )
fontsize := 12
txtfile	:= memoread(cFileToRead)
vpag:=.F.

Zebrado()

HPDF_Page_BeginText(page)                              
HPDF_Page_MoveTextPos(page,15,height-20)
nFIM_TEXTO := mlcount(txtfile,255)

for l=1 to nFIM_TEXTO

   Imprime2( L, nFIM_TEXTO, 'Gerando PDF!!! Aguarde...')

   cLIN:=AllTrim(memoline(txtfile,255,l,1,.f.))

   FOR X = 1 TO LEN( cLIN )   // faz a contagem dos bytes da linha
   
      cBUFFER := SubStr( cLIN, X, 1)
		
      // FIM DE PAGINA
      IF CHR(12) $ cBUFFER
         IF L = nFIM_TEXTO
            EXIT
         ELSE
            page := HPDF_AddPage(pdf)
            Zebrado()
            HPDF_Page_BeginText(page)
            HPDF_Page_MoveTextPos(page,15,height-20)
         ENDIF
         X++
         LOOP
         *cBUFFER := cBUFFER+SubStr( cLIN, X, 1)
      ENDIF
		
		// TECLA ESC, TEM QUE PEGAR A PROXIMA TECLA E DEIXA FAZER O TESTE
      IF cBUFFER==CHR(27) // LE CHR(27)+'E' OU CHR(27)+'F'
         X++
         cBUFFER := cBUFFER+SubStr( cLIN, X, 1)
      ENDIF
		
      // Ativa Condensado
      IF &chr_pcom. == cBUFFER
         fontsize=7
         font:= HPDF_GetFont( pdf, "Courier-Bold", NIL )
         LOOP
      ENDIF
	   
      IF &chr_tcom. == cBUFFER
         fontsize=12
         font:= HPDF_GetFont( pdf, "Courier", NIL )
         LOOP
      ENDIF
	   
      // ATIVA EXPANDIDO
      IF &chr_pexp. == cBUFFER
         fontsize=16
         font:= HPDF_GetFont( pdf, "Courier-Bold", NIL )
         LOOP
      ENDIF

      IF &chr_texp. == cBUFFER
         font := HPDF_GetFont( pdf, "Courier" , NIL )
         fontsize=12
         LOOP
      ENDIF
	   
	   
      // ATIVA NEGRITO
      IF &chr_penf. == cBUFFER
         font:= HPDF_GetFont( pdf, "Courier-Bold", NIL )
         LOOP
      ENDIF

      IF &chr_tenf. == cBUFFER
         font := HPDF_GetFont( pdf, "Courier" , NIL )
         LOOP
      ENDIF
	  
      HPDF_Page_SetFontAndSize(page, font, fontsize)
      hPDF_Page_ShowText(page, IF(cBUFFER=CHR(255),' ', cBUFFER) )  // IF(cBUFFER=' ',CHR(255),cBUFFER) )
		   
   NEXT X
	
   IF l != nFIM_TEXTO
      HPDF_Page_MoveTextPos(page,0,-12.5)
   ENDIF
    
next l

HPDF_Page_EndText(page)

x_ret= HPDF_SaveToFile( pdf, cFileToSave )

HPDF_Free( pdf )

If lAbre                       
	HB_RUN( 'START /MAX '+cPATH+'sumatra\sumatrapdf.exe -lang pt '+cFILETOSAVE)   //-restrict -fullscreen
EndIf

If !lAbre .and. cTipo_Prn="I" .and. !lMatricial
	HB_RUN( 'Start '+cPATH+'sumatra\sumatrapdf.exe -print-to "'+cUsbPrinter+'" '+cFILETOSAVE)   //-restrict -fullscreen
EndIf

RestScreen(,,,,cTELA)

Return file( cFileToSave )
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Dúvida Sumatra ignora tamanho de campo

Mensagem por Claudio Soto »

rubens escreveu:Bom dia...

Quando mexi na TXTtoPDF criada pelo Toledo... Ela imprimia linha a linha e eu precisava que lesse caracater a caracter para encontrar os códigos de negrito, sublinhado, condesado etc...

Daí quando o início da linha é " " o harupdf ignorava a coluna e começava na coluna zero... o que eu consegui foi isso, simular um caracter no inicio. A partir do momento em que existe um caracter no inicio da linha pode posicionar em qualquer coluna que dá certo..
A função é esta abaixo... se houver uma solução mais "lógica" seja bem vinda...

Código: Selecionar todos

********************************************************************************
Function TXTtoPDF( cFileToRead, cFileToSave, lAbre )
local x_ret
Local pdf := HPDF_New()
local tw
local l,a
LOCAL cTELA := SaveScreen()
Local cBuffer

Local chr_pcom:="CHR(15)"        			// ativa comprimido
Local chr_tcom:="CHR(18)"        			// desativa comprimido
 
Local chr_penf:="CHR(27)+'E'"      		// ativa enfatizado
Local chr_tenf:="CHR(27)+'F'"      		// desativa enfatizado
 
Local chr_pexp:="CHR(14)"  					// ativa expansao
Local chr_texp:="CHR(18)"  					// desativa expansao

if pdf == NIL
   return .F.
endif

HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
page 		:= HPDF_AddPage(pdf)
height	:= HPDF_Page_GetHeight(page)
width 	:= HPDF_Page_GetWidth(page)
font 		:= HPDF_GetFont( pdf, "Courier", NIL )
fontsize := 12
txtfile	:= memoread(cFileToRead)
vpag:=.F.

Zebrado()

HPDF_Page_BeginText(page)                              
HPDF_Page_MoveTextPos(page,15,height-20)
nFIM_TEXTO := mlcount(txtfile,255)

for l=1 to nFIM_TEXTO

   Imprime2( L, nFIM_TEXTO, 'Gerando PDF!!! Aguarde...')

   cLIN:=AllTrim(memoline(txtfile,255,l,1,.f.))

   FOR X = 1 TO LEN( cLIN )   // faz a contagem dos bytes da linha
   
      cBUFFER := SubStr( cLIN, X, 1)
		
      // FIM DE PAGINA
      IF CHR(12) $ cBUFFER
         IF L = nFIM_TEXTO
            EXIT
         ELSE
            page := HPDF_AddPage(pdf)
            Zebrado()
            HPDF_Page_BeginText(page)
            HPDF_Page_MoveTextPos(page,15,height-20)
         ENDIF
         X++
         LOOP
         *cBUFFER := cBUFFER+SubStr( cLIN, X, 1)
      ENDIF
		
		// TECLA ESC, TEM QUE PEGAR A PROXIMA TECLA E DEIXA FAZER O TESTE
      IF cBUFFER==CHR(27) // LE CHR(27)+'E' OU CHR(27)+'F'
         X++
         cBUFFER := cBUFFER+SubStr( cLIN, X, 1)
      ENDIF
		
      // Ativa Condensado
      IF &chr_pcom. == cBUFFER
         fontsize=7
         font:= HPDF_GetFont( pdf, "Courier-Bold", NIL )
         LOOP
      ENDIF
	   
      IF &chr_tcom. == cBUFFER
         fontsize=12
         font:= HPDF_GetFont( pdf, "Courier", NIL )
         LOOP
      ENDIF
	   
      // ATIVA EXPANDIDO
      IF &chr_pexp. == cBUFFER
         fontsize=16
         font:= HPDF_GetFont( pdf, "Courier-Bold", NIL )
         LOOP
      ENDIF

      IF &chr_texp. == cBUFFER
         font := HPDF_GetFont( pdf, "Courier" , NIL )
         fontsize=12
         LOOP
      ENDIF
	   
	   
      // ATIVA NEGRITO
      IF &chr_penf. == cBUFFER
         font:= HPDF_GetFont( pdf, "Courier-Bold", NIL )
         LOOP
      ENDIF

      IF &chr_tenf. == cBUFFER
         font := HPDF_GetFont( pdf, "Courier" , NIL )
         LOOP
      ENDIF
	  
      HPDF_Page_SetFontAndSize(page, font, fontsize)
      hPDF_Page_ShowText(page, IF(cBUFFER=CHR(255),' ', cBUFFER) )  // IF(cBUFFER=' ',CHR(255),cBUFFER) )
		   
   NEXT X
	
   IF l != nFIM_TEXTO
      HPDF_Page_MoveTextPos(page,0,-12.5)
   ENDIF
    
next l

HPDF_Page_EndText(page)

x_ret= HPDF_SaveToFile( pdf, cFileToSave )

HPDF_Free( pdf )

If lAbre                       
	HB_RUN( 'START /MAX '+cPATH+'sumatra\sumatrapdf.exe -lang pt '+cFILETOSAVE)   //-restrict -fullscreen
EndIf

If !lAbre .and. cTipo_Prn="I" .and. !lMatricial
	HB_RUN( 'Start '+cPATH+'sumatra\sumatrapdf.exe -print-to "'+cUsbPrinter+'" '+cFILETOSAVE)   //-restrict -fullscreen
EndIf

RestScreen(,,,,cTELA)

Return file( cFileToSave )
Rubens
Talvez me perdí en el código y estoy diciendo bobada, pero el problema no está en el alltrim de esta línea

cLIN:=AllTrim(memoline(txtfile,255,l,1,.f.))

Talvez eliminarlo o cambiarlo por un RTrim sea la solución.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Dúvida Sumatra ignora tamanho de campo

Mensagem por asimoes »

Pessoal,

Só para tirar a duvida, onde estão as funções ?

Imprime2
Zebrado

Que estão na função TXTtoPDF
►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
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Dúvida Sumatra ignora tamanho de campo

Mensagem por rubens »

A Função Zebrado é só para definir se vai imprimir zebrado ou não.

Código: Selecionar todos

********************************************************************************
FUNCTION Zebrado()
LOCAL X 
LOCAL nINICIO 

If lZebrado 
	HPDF_Page_SetLineWidth( Page, 0.2 )
	HPDF_Page_SetRGBFill( Page, 0.9, 0.9, 0.9 )
	HPDF_Page_SetRGBStroke( Page, 0.9, 0.9, 0.9 )
	nINICIO := 744
	FOR X = 0 TO 28 
		HPDF_Page_Rectangle( Page, 10, nINICIO, 583, 12 )
		nINICIO-=25
	NEXT
	* HPDF_Page_Fill( oPage )    //Pinta dentro 
	* HPDF_Page_Stroke( oPage )  //Somente borda
	HPDF_Page_FillStroke( Page ) // Borda e Dentro
	HPDF_Page_SetRGBFill( Page, 0, 0, 0 )
	HPDF_Page_SetRGBStroke( Page, 0, 0, 0 )
EndIf

RETURN NIL
A Função Imprime2 é para mostrar um barra de progressão de linhas lidas, porque se o arquivo for grande demora para gerar o pdf...

Código: Selecionar todos

********************************************************************************
Function Imprime2(x1,y1,cMOD,nLINHA)
Local nPER:=(x1/y1)*100
LOCAL cTEXTO
Local Cor_:=SetColor()
HB_DEFAULT( @nLINHA,14 )
setcursor(0)

cTEXTO := cMOD+' '+Str(Nper,3,0)+"%" +' '+STR(X1,5,0)+'/'+STR(Y1,5,0) 

IF X1 <= 1
	JANELA( nLinha-1,09,nLinha+7,70, cMod )     
	setcolor("gr+/R")	
	@ nLINHA+3,15 SAY PADC(cTEXTO,50,' ' )
	setcolor("gr+/B")
	@ nLINHA+4, 15 SAY Repli("°",50) 
ENDIF
setcolor("gr+/R")
@ nLINHA+3, 15 SAY PADC( cTEXTO, 50, ' ' )
setcolor("gr+/B")                                        
@ nLINHA+4, 15 SAY Repli("Û",nPER/2) 
SetColor(Cor_)
Return( .T. )
Nessa postagem tem a função completa isolada para compilar e testar..
viewtopic.php?f=4&t=18184
"Eu e minha casa servimos ao Senhor e você ???"
Responder