mp 4200 th não fiscal

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

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

mp 4200 th não fiscal

Mensagem por Itamar M. Lins Jr. »

Ola!

Estive quebrando a cabeça com essa impressora.
Porém após algum tempo de estudo consegui algum avanço.
Ela é uma impressa "FOR WINDOWS", não imprime diretamente os caracteres. Ela emula, cria uma porta virtual, então podemos usar uma "generic text" na tal porta. Porém as letras são fora do padrão das demais mp20, e outra thermica mp2000, ela perde 6 caracteres +- quebrando a impressão no lugar indesejado.
Por exemplo: replicate("-",48), na MP20 ou MP2000, funciona sem quebrar a linha, já nessa 4200 ele imprime 42 "-", depois quebra a linha para a imprimir os outros 6. Isso usando o modelo tradiconal. Podemos comprimir com chr(27)+chr(15), porém a letra fica pequena demais.
Já usando a clase win_prn, consegui um melhor resultado.
Outro problema e o tamanho do papel, qual modelo adotar ?
Consegui fazer a seguinte função:

Código: Selecionar todos

*********************************
Function PrintTH(cArq,cPrint)
*********************************
*
*
Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0
if empty(aPrn)
   MsgInfo('Não há impressoras instaladas')
   return .f.
endif
If cPrint == Nil
 cPrint := win_PrinterGetDefault()
EndIf

cText := memoread(cArq)
nLinh := mlcount(cText)
nTL   := (nLinh/5) //Aqui para achar o final da linha na bobina e acionar a guilhotina. 
oPrn := win_prn():New(cPrint)
oPrn :LandScape := .f.
oPrn :FormType  := WIN_DMPAPER_USER
oPrn :PaperLength := 8.5*25.4*nTL
oPrn :PaperWidth := 3*25.4*10
oPrn :Copies    := 1
if !oPrn:Create()
    MsgInfo("Não foi criado documento")
    return nil
EndIf
if !oPrn:StartDoc("Imprimindo Documento")
   MsgInfo("Erro na Impressora")
   return nil
EndIf

oPrn:SetColor( HB_WIN_RGB_BLACK )
oPrn:Bold( WIN_FW_EXTRABOLD )

  oPrn:NewLine()
  oPrn:NewLine()
  For n := 1 to nLinh
     If n == 1 //titulo do relatório.
        oPrn:SetFont( "Lucida Console", 16,0 )  
        oPrn:TextOut(ansitooem(memoline(cText,,n)),.t.)
     Else
        oPrn:SetFont( "Lucida Console", 8, { 4, -70 } )  
        oPrn:TextOut(ansitooem(memoline(cText,,n)),.t.)
     EndIf
  Next
  oPrn:EndDoc()
  oPrn:Destroy()

Return .t.
A vangem dela é usar as fontes, do windows.

Quem tiver mais dicas, ou um melhor resultado, principalmente usando o modelo tradicional, favor informar.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

mp 4200 th não fiscal

Mensagem por Pablo César »

Oi Itamar conseguiu definir o FormType para o caso de papel bobina ? Qual foi a sua configuração ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder