Exemplo usando a Brother QL-800
FUNCTION MAIN()
cArqPrint := "teste.prn"
SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO &cArqPrint.
SET PRINT ON
SetPrc(0,0)
@Prow()+1,001 SAY "EMPRESA NUCLEAR DE COBALTO S/A"
@Prow()+1,001 SAY "RUA NUCLEAR, 100"
@Prow()+1,001 SAY "CENTRO"
@Prow()+1,001 SAY "RIO DE JANEIRO - RJ"
@Prow()+1,001 SAY "CEP 20.000-000"
EJECT
@Prow()+1,001 SAY "EMPRESA URANIO S/A"
@Prow()+1,001 SAY "RUA NUCLEAR, 100"
@Prow()+1,001 SAY "CENTRO"
@Prow()+1,001 SAY "RIO DE JANEIRO - RJ"
@Prow()+1,001 SAY "CEP 20.000-000"
SET PRINT OFF
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
PrintWin( cArqPrint, "Brother QL-800", .T., 15, .T. )
RETURN Nil
FUNCTION PrintWin( cArq, cPrint, lLand, nTam, lBold )
LOCAL oPrn, aPrn := Win_PrinterList(), __nColFixed
cArq := Hb_DefaultValue(cArq, "")
cPrint := Hb_DefaultValue(cPrint, Win_PrinterGetDefault())
lLand := Hb_DefaultValue(lLand, .F.)
nTam := Hb_DefaultValue(nTam, 10)
lBold := Hb_DefaultValue(lBold, .F.)
IF Empty( cArq )
hwg_MsgStop('Arquivo de impressão deve ser informado', 'Erro')
RETURN .F.
ENDIF
IF Empty( aPrn )
hwg_MsgStop('Não há impressoras instaladas', 'Erro')
RETURN .F.
ENDIF
WITH OBJECT oPrn := Win_Prn():New( cPrint )
:LandScape := lLand
:FormType := WIN_DMPAPER_USER
:Copies := 1
IF ! :Create()
hwg_MsgStop("Não foi criado documento.", "Erro")
RETURN Nil
ENDIF
IF ! :StartDoc("AsaPrev")
hwg_MsgStop("Erro na Impressora.", "Erro")
RETURN Nil
ENDIF
:SetColor( HB_WIN_RGB_BLACK )
DO CASE
CASE nTam = 10
:SetFont("Courier New", 0, {1,10}, IF(lBold, 700, 400), .F., .F.) // 79 Colunas
CASE nTam = 12
:SetFont("Courier New", 0, {1,12}, IF(lBold, 700, 400), .F., .F.) //90 colunas
CASE nTam = 15
:SetFont("Courier New", 0, {1,15}, IF(lBold, 700, 400), .F., .F.) //117 colunas
CASE nTam = 17
:SetFont("Courier New", 0, {3,50}, IF(lBold, 700, 400), .F., .F.)
CASE nTam = 18
:SetFont("Courier New", 0, {1,18}, IF(lBold, 700, 400), .F., .F.) //140 colunas
CASE nTam = 20
:SetFont("Courier New", 0, {1,20}, IF(lBold, 700, 400), .F., .F.) //140 colunas
ENDCASE
:SetPrc(1, 0)
lEject := .F.
FT_FUSE( cArq )
DO WHILE ! FT_FEOF()
cLinha := FT_FREADLN()
lEject := ( Chr(12) $ cLinha )
cLinha := StrTran( cLinha, Chr(12) ) // Elimina caracter EJECT
cLinha := StrTran( cLinha, Chr(13) )
:Textout( cLinha, .T. )
FT_FSKIP()
hwg_DoEvents()
IF lEject .AND. ! FT_FEOF()
:NewPage()
:SetPrc(1, 0)
ENDIF
ENDDO
FT_FUSE()
:EndDoc()
END
RETURN Nil