func getprinters() em harbour

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

Moderador: Moderadores

ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Maravilha

Obrigado pela velocidade e precisão que você teve ao responder minhas dúvidas.
O sucesso não vem por acaso.
Agora vejo porque esse fórum é tão bem conceituado entre nós "clippeiros" e agora "harbeiros".
Sucessos e obrigado

Att
Ronny Wdson
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Toledo

Deu certo seguindo as suas orientações.
Só não está funcionando quando eu tento imprimir condensado usando: ? CHR(27)+"@"+CHR(27)+"C"+CHR(33)
Quando eu imprimia direto para a a LPT1 funcionava.
Agora que eu uso imprimir para um arquivo TXT e depois envia-la para a impressora padrão USB através da classe ou biblioteca HBWIN (não sei o nome certo), não funciona o condensado.
Tem alguma propriedade que eu tenho que mudar ou enviar outro caractere de compressão para o arquivo TXT?

Att
Ronny Wdson
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

func getprinters() em harbour

Mensagem por Imatech »

Olá !

Imagino que esteja utilizando Win_Prn()

Código: Selecionar todos


              oPrinter:SetFont( 'Courrier New', 6.0, 0 )  // Alternative Compressed print
              oPrinter:NewLine()
              oPrinter:TextOut( REPL( 'x', 40 ) )

              oPrinter:SetFont( 'Courrier New', 6.5, 0 )  // Alternative Compressed print
              oPrinter:NewLine()
              oPrinter:TextOut( REPL( 'x', 40 ) )

              oPrinter:SetFont( 'Courrier New', 7.0, 0 )  // Alternative Compressed print
              oPrinter:NewLine()
              oPrinter:TextOut( REPL( 'x', 40 ) )

              oPrinter:SetFont( 'Courrier New', 7.5, 0 )  // Alternative Compressed print
              oPrinter:NewLine()
              oPrinter:TextOut( REPL( 'x', 40 ) )

              oPrinter:SetFont( 'Courrier New', 8.0, 0 )  // Alternative Compressed print
              oPrinter:NewLine()
              oPrinter:TextOut( REPL( 'x', 40 ) )

              oPrinter:SetFont( 'Courrier New', 9.0, 0 )  // Alternative Compressed print
              oPrinter:NewLine()
              oPrinter:TextOut( REPL( 'x', 40 ) )

Veja + exemplos em:

\Harbour\contrib\hbwin\tests
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

func getprinters() em harbour

Mensagem por Toledo »

Ronny, só complementanto a informação que o Ronaldo passou na mensagem anterior:

Se você for imprimir o relatório todo condensado, então basta mudar o tamanho da fonte que é selecionada na função SetFont().

Código: Selecionar todos

oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
Como você vai usar a classe Win_prn(), então os comandos usados para condensar (CHR(27)+"@") e para determinar o tamanho do papel (CHR(27)+"C"+CHR(33)) não serão mais necessários e você pode retirá-los do arquivo TXT.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Boa tarde Ronaldo e Toledo

Utilizo a seguinte função para imprimir:

Código: Selecionar todos

Function PrintWinPrn(cArq,cPrint)
	Local oPrn, aPrn:=GetPrinters(), n := 0
	if empty(aPrn)
		MsgInfo('Não há impressoras instaladas')
		return .f.
	endif
	If cPrint == Nil
		cPrint := GetDefaultPrinter()
	EndIf
	 
	oPrn := win_prn():New(cPrint)
	oPrn :LandScape := .f.
	oPrn :FormType  := WIN_DMPAPER_USER 
	oPrn :PaperLength := 5.5*25.4*10 
	oPrn :PaperWidth := 8.5*25.4*10 
	oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
	oPrn :Copies  := 1
	oPrn:CharSet(255)

	if !oPrn:Create()
		MsgInfo("Não foi criado documento")
		return nil
	EndIf
	if !oPrn:startDoc("Imprimindo Documento")
		MsgInfo("Erro na Impressora")
		return nil
	EndIf

	HB_CDPSelect("PT850")
		setprc(5,0)
		cText := memoread(cArq) 
		nLinh := mlcount(cText)
		For n := 1 to nLinh
			oPrn:TextOut(HB_ANSITOOEM(memoline(cText,,n)),.t.)
		Next
		oPrn:EndDoc()
	HB_CDPSelect( "PTISO") 
 
Return .t.
Primeiro retirei todos os caracteres que determinam o tamanho tamanho do texto do meu TXT.
Depois segui a recomendação do Ronaldo e substitui SetFont() que eu estava usando pelo que ele falou, mas não deu certo. Continuou saindo do mesmo tamanho.
Depois mudei para a sugestão do Toledo e também não funcionou.
Será que há algo de errado com essa função?

Att
Ronny Wdson
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

func getprinters() em harbour

Mensagem por Toledo »

Ronny, tenta então este:

Código: Selecionar todos

oPrn:SetFont("Courier New",13,{3,-50},0,.F.,.F.)
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Toledo

Também não deu certo
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

func getprinters() em harbour

Mensagem por Toledo »

Ronny, mude as linhas 20, 21, 22 e 23 do seu código de lugar, coloque logo depois da linha 11.

Obs.: evite também este espaço que fica entre o objeto oPrn e o : (dois pontos).

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

func getprinters() em harbour

Mensagem por Imatech »

Exemplo baseado em \Harbour\HbWin\Samples...

Código: Selecionar todos


Function F_RM_PrintWinPrn( cArq, cPrint)
  LOCAL oPrn := ''
  LOCAL i, nCol, nRow
  Local n := 0
  Local cText := ''
  Local nLinh := 0

  If cPrint == Nil
   cPrint := GetDefaultPrinter()
  EndIf

  oPrn := Win_Prn():New( cPrint )

  IF !oPrn:Create()
    F_Sound()
    F_Win_Alert( "NAO FOI POSSIVEL GERAR A IMPRESSAO..." )
  ELSE
    IF !oPrn:startDoc( cPrint + '_' + cArq )
      F_Sound()
      F_Win_Alert( "FALHA AO GERAR A IMPRESSAO..." )
    ELSE
      oPrn:Landscape := .F.
      oPrn:FormType  := WIN_DMPAPER_USER
      oPrn:PaperLength := 5.5*25.4*10
      oPrn:PaperWidth := 8.5*25.4*10
      oPrn:SetFont( "Courier New", 6, {3,-62}, 0, .F., .F. )  // Alternative Compressed print
      oPrn:Copies := 1
      oPrn:CharSet(255)
      oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_BLACK )
      oPrn:Bold(0)     // Normal
      oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 8 )  // Default 6 lines per inch == # of pixels per line
      nCol := 11 * oPrn:CharWidth
      nRow := oPrn:LineHeight
      oPrn:Bold(0)
      oPrn:SetPos( nCol, nRow * 2 )

      FOR i := 1 TO 5
        oPrn:NewLine()
        oPrn:SetPos( nCol * 1.5  )
        oPrn:TextOut(oPrn:PrinterName+": MaxRow() = "+STR(oPrn:MaxRow(),4)+"   MaxCol() = "+STR(oPrn:MaxCol() - ( nCol * 4 ),4))
      NEXT

      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(Padr('Linha Horizontal', 132, '.') + '123456' )
      oPrn:NewLine()
      oPrn:Line(  nCol, oPrn:PosY+5, oPrn:PageWidth-INT( nCol/2 ), oPrn:PosY+5)
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(Padr('Retangulo', 132, '.') + '123456' )
      oPrn:NewLine()
      oPrn:Box(   nCol, oPrn:PosY+5, oPrn:PageWidth-INT( nCol/2 ), oPrn:PosY+200)
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(Padr('Linha Horizontal', 132, '.') + '123456' )
      oPrn:NewLine()
      oPrn:Line(  nCol, oPrn:PosY+5, oPrn:PageWidth-INT( nCol/2 ), oPrn:PosY+5)
      oPrn:NewLine()
      oPrn:Bold(800)

      FOR i := 1 TO 5
      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(oPrn:PrinterName+": MaxRow() = "+STR(oPrn:MaxRow(),4)+"   MaxCol() = "+STR(oPrn:MaxCol() - ( nCol * 4 ),4))
      NEXT

      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(Padr('Linha Horizontal', 132, '.') + '123456' )
      oPrn:NewLine()
      oPrn:Line(  nCol, oPrn:PosY+5, oPrn:PageWidth-INT( nCol/2 ), oPrn:PosY+5)
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(Padr('Retangulo', 132, '.') + '123456' )
      oPrn:NewLine()
      oPrn:Box(   nCol, oPrn:PosY+5, oPrn:PageWidth-INT( nCol/2 ), oPrn:PosY+200)
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:SetPos( nCol * 1.5 )
      oPrn:TextOut(Padr('Linha Horizontal', 132, '.') + '123456' )
      oPrn:NewLine()
      oPrn:Line(  nCol, oPrn:PosY+5, oPrn:PageWidth-INT( nCol/2 ), oPrn:PosY+5)
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:NewLine()
      oPrn:Bold(800)

*     HB_CDPSelect("PT850")

      cText := memoread(cArq)
      nLinh := mlcount(cText)
      For n := 1 to nLinh
        oPrn:SetPos( nCol * 1.5 )
        oPrn:NewLine()
        oPrn:TextOut(HB_ANSITOOEM(memoline(cText,,n)),.t.)
      Next

*     HB_CDPSelect("PTISO")

      oPrn:EndDoc()
    ENDIF
    oPrn:Destroy()
  ENDIF

Return( .T. )

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Toledo

Fiz as alterações e coloquei o código oPrn:SetFont("Courier New",13,{3,-50},0,.F.,.F.) que você postou, mas a impressora fica imprimindo no mesmo lugar várias vezes. Ela repete a mesma letra várias vezes e o tamanho continua grande.
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

func getprinters() em harbour

Mensagem por Toledo »

Ronny, se for possível, anexar aqui neste tópico o arquivo TXT do seu relatório.

Veja como anexar arquivos neste tópico:
https://pctoledo.org/forum/viewto ... =40&t=8000

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Ronaldo

Usei a função que você enviou e deu certo a compressão.
Só que ficou pequeno demais, não ficou igual ao tamanho usado quando se imprime pelo DOS na LPT1.
E o espaçamento entre as linhas também ficou maior.
Será que é possível ficar do mesmo tamanho?


Toledo
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

func getprinters() em harbour

Mensagem por Imatech »

Impressão Gráfica nunca ficará igual ao que você deseja... entretanto poderá buscar uma aproximação...

Experimente informar a fonte: "Draft" que é padrão nas impressoras matriciais...


Altura das linhas: Testar valores oPrn:LineHeight

Código: Selecionar todos


   oPrn:LineHeight := Int( oPrn:PixelsPerInchY /  8 ) 
   oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 10 )
   oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 12 )


Tamanhos alternados de fonte: oPrn:SetFont

Código: Selecionar todos


oPrn:SetFont( "Courier New", 6.5, 0 )
oPrn:SetFont( "Courier New", 7.0, 0 )
oPrn:SetFont( "Courier New", 7.5, 0 )
oPrn:SetFont( "Courier New", 8.0, 0 )
oPrn:SetFont( "Courier New", 8.5, 0 )
oPrn:SetFont( "Courier New", 9.0, 0 )

Exemplo para teste:

Código: Selecionar todos


Function F_RM_PrintWinPrn( cArq, cPrint)
 LOCAL oPrn := ''
 LOCAL i, nCol, nRow
 Local n := 0
 Local cText := ''
 Local nLinh := 0

 If cPrint == Nil
 cPrint := GetDefaultPrinter()
 EndIf

 oPrn := Win_Prn():New( cPrint )

 IF !oPrn:Create()
  F_Sound()
  F_Win_Alert( "NAO FOI POSSIVEL GERAR A IMPRESSAO..." )
 ELSE
  IF !oPrn:startDoc( cPrint + '_' + cArq )
   F_Sound()
   F_Win_Alert( "FALHA AO GERAR A IMPRESSAO..." )
  ELSE
   oPrn:Landscape := .F.
   oPrn:FormType := WIN_DMPAPER_USER
   oPrn:PaperLength := 5.5*25.4*10
   oPrn:PaperWidth := 8.5*25.4*10
   oPrn:SetFont( "Courier New", 6.5, 0 ) // Alternative Compressed print
   oPrn:Copies := 1
   oPrn:CharSet(255)
   oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_BLACK )
   oPrn:Bold(0)  // Normal
   oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 10 ) // Default 6 lines per inch == # of pixels per line
   nCol := 11 * oPrn:CharWidth
   nRow := oPrn:LineHeight
   oPrn:Bold(0)
   oPrn:SetPos( nCol, nRow * 2 )

   oPrn:SetPos( nCol * 1.5 )
   oPrn:TextOut(oPrn:PrinterName+": Courier New 6.5" )
   oPrn:NewLine()

   FOR i := 1 TO 5
    oPrn:NewLine()
    oPrn:SetPos( nCol * 1.5 )
    oPrn:TextOut(oPrn:PrinterName+": MaxRow() = "+STR(oPrn:MaxRow(),4)+" MaxCol() = "+STR( INT( oPrn:MaxCol() ),4) )
   NEXT
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()


   oPrn:SetFont( "Courier New", 7.0, 0 ) // Alternative Compressed print
   oPrn:SetPos( nCol * 1.5 )
   oPrn:TextOut(oPrn:PrinterName+": Courier New 7.0" )
   oPrn:NewLine()

   FOR i := 1 TO 5
   oPrn:NewLine()
   oPrn:SetPos( nCol * 1.5 )
   oPrn:TextOut(oPrn:PrinterName+": MaxRow() = "+STR(oPrn:MaxRow(),4)+" MaxCol() = "+STR( INT( oPrn:MaxCol()  ),4) )
   NEXT
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()

   oPrn:SetFont( "Courier New", 8.0, 0 ) // Alternative Compressed print
   oPrn:SetPos( nCol * 1.5 )
   oPrn:TextOut(oPrn:PrinterName+": Courier New 8.0" )
   oPrn:NewLine()

   FOR i := 1 TO 5
   oPrn:NewLine()
   oPrn:SetPos( nCol * 1.5 )
   oPrn:TextOut(oPrn:PrinterName+": MaxRow() = "+STR(oPrn:MaxRow(),4)+" MaxCol() = "+STR( INT( oPrn:MaxCol()  ),4) )
   NEXT

   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()
   oPrn:NewLine()

   oPrn:SetFont( "Arial", 7.0, 0 ) // Alternative Compressed print
   oPrn:SetPos( nCol * 1.5 )
   oPrn:TextOut(oPrn:PrinterName+": Arial 7.0" )
   oPrn:NewLine()

*  HB_CDPSelect("PT850")

   cText := memoread(cArq)
   nLinh := mlcount(cText)
   For n := 1 to nLinh
    oPrn:SetPos( nCol * 1.5 )
    oPrn:NewLine()
    oPrn:TextOut(HB_ANSITOOEM(memoline(cText,,n)))
   Next

*  HB_CDPSelect("PTISO")

   oPrn:EndDoc()
  ENDIF
  oPrn:Destroy()
 ENDIF

Return( .T. )

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
ronnywdson
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 30 Jun 2012 12:37
Localização: Rondonópolis/MT
Contato:

func getprinters() em harbour

Mensagem por ronnywdson »

Ronaldo

Usei o código abaixo para imprimir em modo condensado:

Código: Selecionar todos

oPrn:SetFont( "Draft", 8.0, 0 ) 
E use esse outro para espaçar as linhas:

Código: Selecionar todos

oPrn:LineHeight := Int( oPrn:PixelsPerInchY /  10 )


Funcionou corretamente.
Valeu pela força

Att
Ronny Wdson
___________
Ronny Wdson
Java, PHP e Clipper desde 1993
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

func getprinters() em harbour

Mensagem por Imatech »

Olá Ronny !


As formas e classes disponiveis para impessão em Harbour são muito flexiveis e podem proporcionar resultados impressos muito elegantes...


Sobre o uso da fonte: Draft
Em impressoras não matriciais (as quais não possuem fonte Draft residente) o resultado impresso é bem diferente, pois ira utilizar outra fonte que não a definida...



Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Responder