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.
Quem tiver mais dicas, ou um melhor resultado, principalmente usando o modelo tradicional, favor informar.
Saudações,
Itamar M. Lins Jr.

