Cual clase para imprimir tickets? (SOLUCIONADO)
Cual clase para imprimir tickets? (SOLUCIONADO)
Hola Amigos:
Necesito imprimir tickets en una impresora de carro angosto 6.3cms,
que clase me recomiendan?
TPrinter, TReport, TDosPrt?
He visto en el foro muchas recomendaciones muy antiguas, tal vez ahora
las clases se han mejorado y lo que antes era recomendable ahora ya no.
Ah, me olvidaba también debo imprimir imágenes.
Saludos
Necesito imprimir tickets en una impresora de carro angosto 6.3cms,
que clase me recomiendan?
TPrinter, TReport, TDosPrt?
He visto en el foro muchas recomendaciones muy antiguas, tal vez ahora
las clases se han mejorado y lo que antes era recomendable ahora ya no.
Ah, me olvidaba también debo imprimir imágenes.
Saludos
Last edited by Armando on Wed Aug 15, 2018 6:01 pm, edited 1 time in total.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Cual clase para imprimir tickets?
Buenas noches Armando,
Con la tdosprn funciona de maravillas y hasta puedes enviar comando de apertura cajon.
Con la tdosprn funciona de maravillas y hasta puedes enviar comando de apertura cajon.
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Re: Cual clase para imprimir tickets?
Ejemplo,
Saludos.
Code: Select all
/*
USB com TDOSPRN.PRG
Enla cabecera de mi rutina de impresión hice esto:
cPorta := PrnGetPort()
cPrinter := PrinterPortToName( cPorta )
if empty(cPrinter)
cPrinter := PrinterPortToName( "USB002" )
if empty(cPrinter)
cPrinter := PrinterPortToName( "USB001" )
endif
endif
Despues empiezo la impresión, preo creando un archivo:
oPrin := TDosPrn():New("minuta.txt")
oPrin:StartPage()
...
...
Y en el fin de la rutina hago esto:
...
...
oPrin:EndPage()
oPrin:End()
PrintFileRaw( cPrinter, TrueName("MINUTA.TXT"), "Impressão de Vendas" )
*/
// ----------------------------------------------------------------------------
//----- Definicao de comando SAY para TdosPrn ---------------------------------
//
#xcommand @ <nRow>, <nCol> SAY <cText> OF <oPrinter> => <oPrinter>:Say(<nRow>, <nCol>, <cText> )
//-------------------------------------------------------------------------//
// Imprime os Cupons Nao Fiscal da Pizzaria/Restaurante
//-------------------------------------------------------------------------//
FUNCTION IMPRIMIR_CUPOM( nKey, aGetVenda, oLbx, oDlgVendas, DbClientes,;
DbEstoque, DbPedidos )
FIELD QTD_VENDEU, DESCRICAO, VLUNITARIO, TOTITEM, TOTPEDIDO
FIELD MENSAG1, MENSAG2, MENSAG3, MENSAG4, MENSAG5
LOCAL nLinha, nPag, oPrn, Conta, Pula, DbMensag
MEMVAR XNUMPEDIDO, nNumeroTel, cCodClien, cNomeClien, cEndClien, ;
cNomeProduto, nQuantidade, nValorProd, nValorCompra, oSayCxLivre,;
XCGCCLI, nQtdeEstoque, nCodigoProd
MEMVAR nDinheiro, nCheque, nChequePre, nTickets, nCartaoCred,;
nCartaoDebi, nContraVale, nTaxaEntreg, nValorTroco, nSomaSubTot,;
XTROCOCLI, Valor_Pago, nValor_Pago, oSayEmpresa
//-> Nome Fantasia da Empresa - Est em EMPRESA.DBF
PUBLIC XDA, XCAIXA, XCODVEND, XNOMEEMP, XFANTASIA, XIMPQTDECOP, ;
XPULARLINHA
nLinha := 0
nPag := 1
IF XIMPQTDECOP <= 0
XIMPQTDECOP := 1
ENDIF
//-> Mensagens do Rodape
IF NETUSE( "MENSAGEM", .T. )
DATABASE DbMensag
DbMensag:Load()
DbMensag:SetBuffer( .T. )
ENDIF
SELECT ( DbPedidos:cAlias )
DbPedidos:SetOrder( 1 )
GO TOP
// Para Rede de Computadores
// oPrn:New("\\seuterminal\suaimpressora\LPT1")
oPrn:= TDosPrn():New( "CUPOM.TXT" ) // para ir para um arquivo .txt
// oPrn:= TDosPrn():New() // para ir para impressora em definitivo
// oPrn := TDosPrn():New("lpt1") // para ir para impressora em definitivo
// Este Comando, Liga a Impressora. NÆo Tirar Nunca
oPrn:StartPage() // da Start(inicializa) na p gina.
oPrn:lZeraBuffer := .T. // Inibe o Pulo da P gina
//-> Inicia a Impressao - Cabe‡alho do Cupom
//-> Modo Draft
@ nLinha, 00 SAY +CHR(18)+CHR(27)+"2"+CHR(27)+"H" OF oPrn
@ nLinha, 00 SAY SUBST( XNOMEEMP, 1, 23 ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
//-> Modo Condensado
@ nLinha, 00 SAY CHR(15)+"HORA: " + TIME() + " - " + ;
+ DTOC(XDA) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY OemToAnsi("PEDIDO N§: " ) + ;
ALLTRIM(STRZERO( XNUMPEDIDO ) ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY "FONE..: " + nNumeroTel OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY SUBSTR( cNomeClien, 1, 40 ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY SUBSTR( cEndClien, 1, 40 ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY "Cod Qtde Descricao Unit Valor" OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
//-> Imprime o Pedido
WHILE !EOF()
SYSREFRESH()
IF EOF()
EXIT
ENDIF
@ nLinha, 00 SAY ( DbPedidos:cAlias )->CODIGO OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY ( ALLTRIM( STR( QTD_VENDEU ) ) ) +[ - ]+ ;
( SUBSTR( DESCRICAO, 01, 17 ) ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY ( SUBSTR( DESCRICAO, 18, 35 ) ) + ;
TRANSFORM( VLUNITARIO, "@E 99,999.99" ) + ;
TRANSFORM( TOTITEM, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
DBSKIP()
ENDDO
//-> Total do Pedido
IF EOF() .OR. TOTPEDIDO <= 0
SKIP(-1)
ENDIF
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
IF nDinheiro > 0
@ nLinha, 00 SAY "EM DINHEIRO: " + ;
TRANSFORM( nDinheiro, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nCheque > 0
@ nLinha, 00 SAY "EM CHEQUE: " + ;
TRANSFORM( nCheque, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nChequePre > 0
@ nLinha, 00 SAY "EM CHEQUE PRE: " + ;
TRANSFORM( nChequePre, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nTickets > 0
@ nLinha, 00 SAY "EM TICKETS: " + ;
TRANSFORM( nTickets, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nCartaoCred > 0
@ nLinha, 00 SAY "EM C. CREDITO: " + ;
TRANSFORM( nCartaoCred, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nCartaoDebi > 0
@ nLinha, 00 SAY "EM C. DEBITO: " + ;
TRANSFORM( nCartaoDebi, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nContraVale > 0
@ nLinha, 00 SAY "EM C. VALE: " + ;
TRANSFORM( nContraVale, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
//-> Fechou o Cupom
@ nLinha, 00 SAY +CHR(18)+CHR(27)+"2"+CHR(27)+"H" + ;
"TOTAL: " + ;
TRANSFORM( TOTPEDIDO, "@E 9,999,999.99" ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+"TROCO: " + ;
TRANSFORM( XTROCOCLI, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY "CAIXA: " + STRZERO( XCAIXA, 3 ) + [ - ] + ;
"OPERADOR: " + XCODVEND OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
SELECT ( DbMensag:cAlias )
GO TOP
WHILE !EOF()
SYSREFRESH()
IF EOF()
EXIT
ENDIF
IF (MENSAG1 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG1 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG2 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG2 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG3 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG3 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG4 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG4 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG5 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG5 OF oPrn
nLinha := nLinha + 1
ENDIF
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
DBSKIP()
ENDDO
//-> Pulos do Cupom
FOR PULA = 1 TO XPULARLINHA
@ nLinha, 00 SAY "." OF oPrn
nLinha := nLinha + 1
NEXT PULA
//-> Modo Draft
@ nLinha, 00 SAY +CHR(18)+CHR(27)+"2"+CHR(27)+"H" OF oPrn
oPrn:EndPage()
oPrn:End()
//--- imprime no spool do windows, liberando o micro para trabalhar.
ImpSpool( "CUPOM.TXT",, .T. ) // esta em DBMANT.PRG impressora USB/matricial
//--- opcionamente pode-se apagar o arquivo passando .t. no 3o. parametro.
DbMensag:Close()
SELECT ( DbPedidos:cAlias )
DbPedidos:SetOrder( 1 )
DbPedidos:Gotop()
RETURN NIL
//----------------------------------------------------------------------------//
// Funcao : ImpSpool( cFileTxt, cPorta, lErase )
// Autor : Ednaldo Rolim (edrol@pop.com.br)
// Descricao : Envia um arquivo TXT criado pela TDosPrn para uma
// porta de Impressora.
//----------------------------------------------------------------------------//
FUNCTION ImpSpool( cFileTxt, cPorta, lErase )
LOCAL CPRINTER
//para capturar antes da impressão
//cPorta := PrnGetPorta()
//WinExec( cPorta )
//depois da impressão
//WinExex( "Net Use Lpt1: \Delete" )
//Ficou mais facil e simples do que criar as portas na Classe TDosPrn
//cPorta := If( cPorta == nil, Alltrim( PrnGetPort() ), cPorta ) ; lErase := If( lErase == nil, .T., lErase );
//cPorta := PrnGetPort()
Default cPorta := Alltrim( PrnGetPort() ), lErase:= .t.
cPrinter := PrinterPortToName( cPorta )
IF EMPTY( cPrinter )
cPrinter := PrinterPortToName( "USB002" )
IF EMPTY(cPrinter)
cPrinter := PrinterPortToName( "USB001" )
ENDIF
ENDIF
IF .NOT. FILE( cFileTxt )
MsgInfo( OemToAnsi( "NÇO ACHEI O ARQUIVO MODO TEXTO PARA IMPRIMIR NA MATRICIAL" ), ;
OemToAnsi( "NÇO ACHEI O ARQUIVO MODO TEXTO PARA IMPRIMIR NA MATRICIAL" ) )
RETURN( .F. )
ENDIF
IF .NOT. EMPTY( cPrinter ) // TEM USB
PrintFileRaw( cPrinter, TrueName( "CUPOM.TXT" ), "Impressão de Vendas" )
ELSEIF LEN( cPorta ) <= 5 .and. Left( Upper(cPorta), 4 ) = "LPT1"
//--- Spool Local - Matricial em LPT1
cPorta:= "PRN"
WAITRUN("COMMAND.COM /C COPY /B " + cFileTxt + " " + cPorta, 0 )
ELSE
//--- Spool Remoto - Matricial em LPT1
WAITRUN("COMMAND.COM /C COPY /B " + cFileTxt + " " + cPorta, 0 )
ENDIF
IF lErase // Vem .T. da tela de vendas
FERASE( cFileTxt )
ENDIF
RETURN( .T. )
João Santos - São Paulo - Brasil
Re: Cual clase para imprimir tickets?
Leandro, Karinha:
Karinha, Leandro:
Muchas gracias por sus respuestas.
Una pregunta más, con la TDosPrn puedo imprimir imágenes, diferentes fonts, colores?
Saludos
Karinha, Leandro:
Muchas gracias por sus respuestas.
Una pregunta más, con la TDosPrn puedo imprimir imágenes, diferentes fonts, colores?
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Cual clase para imprimir tickets?
Que yo sepa no.Armando wrote:Leandro, Karinha:
Karinha, Leandro:
Muchas gracias por sus respuestas.
Una pregunta más, con la TDosPrn puedo imprimir imágenes, diferentes fonts, colores?
Saludos
Que pretendes, usar QRCODE és esto?
Saludos.
João Santos - São Paulo - Brasil
Re: Cual clase para imprimir tickets?
Karihna:
Pretendo imprimir el logotipo de la empresa así como iamgenes
de los productos vendidos.
Saludos
Pretendo imprimir el logotipo de la empresa así como iamgenes
de los productos vendidos.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Cual clase para imprimir tickets?
Creo que usando HBZEBRA.
ó
http://fivewin.com.br/index.php?/topic/ ... ent-280100
ó
http://fivewin.com.br/index.php?/topic/ ... ent-279832
ó
http://fivewin.com.br/index.php?/topic/ ... ent-273392
Saludos.
ó
http://fivewin.com.br/index.php?/topic/ ... ent-280100
ó
http://fivewin.com.br/index.php?/topic/ ... ent-279832
ó
http://fivewin.com.br/index.php?/topic/ ... ent-273392
Saludos.
João Santos - São Paulo - Brasil
- MauroArevalo
- Posts: 98
- Joined: Thu Jan 19, 2006 11:47 pm
- Location: Bogota DC. Colombia
- Contact:
Re: Cual clase para imprimir tickets?
Armando:
Con EasyReport. La ventaja es que usted lo conoce y me enseño a utilizarlo....Saludos...
Con EasyReport. La ventaja es que usted lo conoce y me enseño a utilizarlo....Saludos...
Edgar Mauricio Arévalo Mogollón.
Bogotá DC. Colombia
FWH 19.06 xHarbour 1.2.1, Pelles C, Fivedit, Borland 7.30
http://www.hymplus.com
Tratando de retomar la programación....
Bogotá DC. Colombia
FWH 19.06 xHarbour 1.2.1, Pelles C, Fivedit, Borland 7.30
http://www.hymplus.com
Tratando de retomar la programación....
Re: Cual clase para imprimir tickets?
Mauricio:
Gracias por la sugerencia, fijate que lo he intentado pero
al imprimir la letra la hace muy pequeña. Tal vez sea
necesario configurar la impresora.
Saludos
Gracias por la sugerencia, fijate que lo he intentado pero
al imprimir la letra la hace muy pequeña. Tal vez sea
necesario configurar la impresora.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Cual clase para imprimir tickets?
Armando, buenas:
Lo mejor es Tprinter. Puedes cambiar el tipo de letra, tamaño, imprimir logos... etc...
Mi usuario, en la opción de "ajustes del programa", puede seleccionar tamaño de letra, incluir o no logo, separación entre líneas, apertura de cajón portamonedas... etc...
Te muestro también el código para abrir el cajón portamonedas:
NOTA:
1.- la función lanza_impreticket() determina por qué impresora saldrá impreso el ticket según las preferencias de cada usuario en los ajustes del programa, en caso de estar en un entorno multiusuario con varias impresoras de ticket
interconectadas.
2.- La funcion convertic() determina el tamaño de la fuente según las preferencias del usuario en los ajustes del programa. El usuario puede establecer un zoom haciendo que el ancho y alto del ticket en su conjunto cambie según ese zoom. De esta manera el ticket se adapta a cualquier impresora de ticket tanto de carro muy estrecho, estrecho o ancho.
Saludos.
LORENZO
Lo mejor es Tprinter. Puedes cambiar el tipo de letra, tamaño, imprimir logos... etc...
Code: Select all
PRINT oPrn NAME "ticket" to lanza_impreticket()
DEFINE FONT aFonP NAME "COURIER NEW" SIZE 0,convertic(8 ,nanchoPapel) OF oprn
DEFINE FONT aFonN NAME "COURIER NEW" SIZE 0,convertic(10,nanchoPapel) OF oprn
PAGE
if !empty(configu->clogo) && aquí muestro el código que utilizo si el usuario quiere incluir en logo en el ticket. El programa calcula el tamaño del logo y lo redimensiona al ancho del carro automáticamente.
if file(camino+'\logos\ticket\'+cFileNoPath(configu->clogo))
DEFINE BITMAP oBmp FILE camino+'\logos\ticket\'+cFileNoPath(configu->clogo)
aCoords := oPrn:Cmtr2Pix(nanchoPapel/10,0) && pasando los cm a pixel
if oBmp:nWidth()>aCoords[1] && el bmp es mas grande que el ancho de carro seleccionado
aalto=oprn:Pix2Mmtr(aCoords[1],((aCoords[1]*oBmp:nHeight())/oBmp:nWidth())) && convierte los pixel a mm
oprn:saybitmap(0,0,camino+'\logos\ticket\'+cFileNoPath(configu->clogo),aCoords[1],((aCoords[1]*oBmp:nHeight())/oBmp:nWidth()))
else
aalto=oprn:Pix2Mmtr(oBmp:nWidth(),oBmp:nHeight())
oprn:saybitmap(0,((aCoords[1]-oBmp:nWidth())/2),camino+'\logos\ticket\'+cFileNoPath(configu->clogo),oBmp:nWidth(),oBmp:nHeight())
endif
y+=(aalto[2]/10)+s*2-1
endif
endif
....
....
oPrn:CmSay(y,0,"Hola, esto es una prueba...",aFonN)
....
ENDPAGE
ENDPRINT
abrir_cajon()
Te muestro también el código para abrir el cajón portamonedas:
Code: Select all
funct abrir_cajon()
LOCAL hFile,opencajon:='CHR(27)+"p"+CHR(0)+CHR(25)+CHR(250)' && VISTO EN http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26970&start=0
If configu->liticket=.t. && el usuario tiene cajón portamonedas.
IF !File('opn.esc')
hFile:=FCreate('opn.esc')
FWrite(hFile,&opencajon) //Abrir cajón
FClose(hFile)
ENDIF
PrintFileRaw(lanza_impreticket(),'opn.esc','')
release oPrn
endif
return
1.- la función lanza_impreticket() determina por qué impresora saldrá impreso el ticket según las preferencias de cada usuario en los ajustes del programa, en caso de estar en un entorno multiusuario con varias impresoras de ticket
interconectadas.
2.- La funcion convertic() determina el tamaño de la fuente según las preferencias del usuario en los ajustes del programa. El usuario puede establecer un zoom haciendo que el ancho y alto del ticket en su conjunto cambie según ese zoom. De esta manera el ticket se adapta a cualquier impresora de ticket tanto de carro muy estrecho, estrecho o ancho.
Saludos.
LORENZO
Re: Cual clase para imprimir tickets?
Loren:
Eres muy amable, he intentado con la TPrinter pero la impresora reduce
la impresión y sale muy compacta, sospecho que habrá que configurar la
impresora.
Voy a pedir el modelo de la impresora para ver si es por ahí.
Saludos
Eres muy amable, he intentado con la TPrinter pero la impresora reduce
la impresión y sale muy compacta, sospecho que habrá que configurar la
impresora.
Voy a pedir el modelo de la impresora para ver si es por ahí.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Cual clase para imprimir tickets?
Paisa, tprinter
en mi caso tdosprn solo lo uso para abrir el cajón de dinero
el corte de papel esa tarea se la dejas a windows.
saludos.
en mi caso tdosprn solo lo uso para abrir el cajón de dinero
el corte de papel esa tarea se la dejas a windows.
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
Re: Cual clase para imprimir tickets?
César:
Gracias paisano.
Saludos
Gracias paisano.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Cual clase para imprimir tickets?
Hola Armando.
Tengo un programa para comandas de bar y restaurante, en el cual imprimo tarjeta de identificacion del empleado.
Talvez si lo adaptas a tus necesidades te pueda ser util. (o a otros compañeros)
Aqui expongo el codigo completo.
Saludos.
Tengo un programa para comandas de bar y restaurante, en el cual imprimo tarjeta de identificacion del empleado.
Talvez si lo adaptas a tus necesidades te pueda ser util. (o a otros compañeros)
Aqui expongo el codigo completo.
Code: Select all
//--------------------------------//10 Tarjetas con Foto y Code-Bar en caja hoja tam carta
Function MyCarnet(cAlias)
local oPrn, oFont, oFont2, oFontCBar, oPen1, cIcon := ".\Gorra.ico"
//local cFontCBar := ".\EAN-13.ttf", cNombre := "EAN-13"
local cFontCBar := ".\Code3of9.TTF", cNombre := "Code3of9"
local cImagePath := "..\FOTOS\"
local aDir := {}, aDire := Directory( cImagePath +"*.*" )
local nWidth, nHeight, nWid,nHei
local n,i,nRow, nCol, nn, nRec, nImages:=0
local lStretch := .t. // to stretch image or not
Local aImage := {}, aNombre := {}, aCargo := {}, aCode := {}
local aImages:= {}, aNombres:= {}, aCargos:= {}, aCodes:= {}
local nRowStep:=0, nColStep:=0
local nCancel:=0, n2:=0, nLin:=0, aTokens
local nWdIcon:=0, nHtIcon:=0
//ARRAY CON LAS FOTOS Y OTROS DATOS
nRec := (cAlias)->(Recno())
(cAlias)->(dbgotop())
While (cAlias)->(!eof())
if ( n:= Ascan(aDire,{|a| a[1] = cFileNoExt(StrZero((cAlias)->Codigo,3))} )) != 0
AAdd( aDir, { aDire[ n,1 ],;
(cAlias)->nombre,;
(cAlias)->cargo ,;
StrZero((cAlias)->Codigo,3) ; //+ Alltrim(Upper((cAlias)->Nombre)) ;
} )
else
if ( n:= Ascan(aDire,{|a| a[1] = cFileNoExt("000")} )) != 0
AAdd( aDir, { aDire[ n,1 ],;
(cAlias)->nombre,;
(cAlias)->cargo ,;
StrZero((cAlias)->Codigo,3) ; //+ Substr(upper((cAlias)->nombre),1,9) ;
} )
endif
endif
(cAlias)->(dbSkip())
Enddo
(cAlias)->(dbGoTo(nRec))
SysRefresh()
//FIN ARRAY CON LAS FOTOS Y OTROS DATOS
//SEPARAMOS DATOS EN ARRAYS DIFERENTES
for n := 1 to Len( aDir ) step 2
For nn := 1 to 2
nImages ++
if nImages <= Len(aDir)
aadd(aImages, cImagePath + aDir[ nImages ][ 1 ])
aadd(aNombres, aDir[ nImages ][ 2 ])
aadd(aCargos, aDir[ nImages ][ 3 ])
aadd(aCodes, "*"+ aDir[ nImages ][ 4 ] +"*")
else
aadd(aImages, " ")
aadd(anombres, " ")
aadd(aCargos, " ")
aadd(aCodes, " ")
endif
Next
AAdd( aImage, aImages )
AAdd( aNombre, aNombres )
AAdd( aCargo, aCargos )
AAdd( aCode, aCodes )
aImages := {}
aNombres := {}
aCargos := {}
aCodes := {}
next
//FIN SEPARAMOS DATOS EN ARRAYS DIFERENTES
PrnSetSize(2160,2790) // tam carta
PrnPorTrait() // Vertical
IF ( nCancel := PrinterSetup(oPrn) ) == 0
return nil
ENDIF
AddFontResource( cFontCBar ) //cuando font no esta instalada en windows
PRINT oPrn NAME "Carnet" PREVIEW
DEFINE PEN oPen1 WIDTH 1
DEFINE FONT oFont NAME "Arial" SIZE 0,-10 OF oPrn BOLD
DEFINE FONT oFont2 NAME "Arial" SIZE 0,-12 OF oPrn BOLD
DEFINE FONT oFontCBar NAME cNombre SIZE 0,-16 OF oPrn
nRowStep := oPrn:nVertRes/60
nColStep := oPrn:nHorzRes/80
nHeight := nRowStep * 11 //alto del carnet : 12 (5 filas de carnets)
nWidth := nColStep * 32 //ancho del carnet: 33 (2 cols de carnets)
nHei := nHeight - (4 * nRowStep) //alto foto
nWid := nHei / 1.40 //ancho foto
nWdIcon :=1.5*nRowStep //ancho icon
nHtIcon :=1.5*nRowStep //alto icon
for n := 1 to Len( aImage ) step 5 //5 Carnets por hoja carta (5 carnets vert por 2 horizontales)
PAGE
nRow := 1 * nRowStep
nCol := 3 * nColStep
for i := n to Min( n + 4, Len( aImage ) )
if !Empty(aImage[ i, 1 ])
oPrn:Box(nRow,nCol, nRow+nHeight, nCol+nWidth, oPen1)
oPrn:SayImage( nRow+(2*nRowStep), nCol+(nWidth-(4*nColStep)), cIcon, nWdIcon, nHtIcon, nil, lStretch )
oPrn:SayImage( nRow+(2*nRowStep), nCol+(1*nColStep), aImage[ i, 1 ], nWid, nHei, nil, lStretch )
oPrn:Say( nRow+(nRowStep*.5), nCol+(1*nColStep), EMPRESA, oFont2)
aTokens := FA_Tokens(aNombre[i,1])
nLin := nRow+(nRowStep*2)
For n2 := 1 to len(aTokens)
nLin+=nRowStep
oPrn:Say( nLin, nCol+nWid+(3*nColStep), aTokens[n2], oFont)
Next
oPrn:Say( nRow+(nRowStep*7.5), nCol+nWid+(2*nRowStep), Capitalize(aCargo[i,1]), oFont)
oPrn:Say( nRow+(nRowStep*9.3), nCol+(1*nColStep), aCode[i,1], oFontCBar)
endif
if !Empty(aImage[ i, 2 ])
nCol += nWidth
oPrn:Box(nRow,nCol, nRow+nHeight, nCol+nWidth, oPen1)
oPrn:SayImage( nRow+(2*nRowStep), nCol+(nWidth-(4*nColStep)), cIcon, nWdIcon, nHtIcon, nil, lStretch )
oPrn:SayImage( nRow+(2*nRowStep), nCol+(1*nColStep), aImage[ i, 2 ], nWid, nHei, nil, lStretch )
oPrn:Say( nRow+(nRowStep*.5), nCol+(1*nColStep), EMPRESA, oFont2)
aTokens := FA_Tokens(aNombre[i,2])
nLin := nRow+(nRowStep*2)
For n2 := 1 to len(aTokens)
nLin+=nRowStep
oPrn:Say( nLin, nCol+nWid+(3*nColStep), aTokens[n2], oFont)
Next
oPrn:Say( nRow+(nRowStep*7.5), nCol +nWid+(2*nColStep), Capitalize(aCargo[i,2]), oFont)
oPrn:Say( nRow+(nRowStep*9.3), nCol+(1*nColStep), aCode[i,2], oFontCBar)
endif
nRow += nHeight
nCol := 3 * nColStep
next
ENDPAGE
next n
ENDPRINT
oFont:End()
oFont2:End()
oFontCBar:End()
oPen1:End()
*RemoveFontResource( cFontCBar ) //cuando font no esta instalada en windows
//Tarjeta() //probando otra font code-bar
return nil
//----------------------//DEVUELVE ARRAY CON NOMBRES, APELLIDOS, EN CADA LINEA
Function FA_Tokens(cString)
local aTokens := {}, cToken := "", n
For n := 1 to len(cString)
cToken := Upper( StrToken( cString, n ) )
if !Empty( cToken )
AAdd( aTokens, cToken )
endif
Next
Return aTokens
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: Cual clase para imprimir tickets?
Francisco:
Muchas gracias, le voy a tirar un ojo.
Saludos
Muchas gracias, le voy a tirar un ojo.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero