Página 1 de 1

mp 4200 th não fiscal

Enviado: 27 Dez 2011 12:21
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.

mp 4200 th não fiscal

Enviado: 20 Mar 2012 16:55
por Pablo César
Oi Itamar conseguiu definir o FormType para o caso de papel bobina ? Qual foi a sua configuração ?