Página 1 de 1

iniciando uso printfileraw()

Enviado: 27 Jun 2014 10:20
por Abel
ola, gostaria de começar a usar o comando printfileraw para imprimir pelo meu sistema via harbour (modo console). So que percebi que ele nao entende os comandos chr padrao epson. alguem sabe como poderia usar o printfileraw() mudando tamanho de fonte etc....

utilizo atualmente chr(18) chr(15) entre outros.

Grato,
ABEL

iniciando uso printfileraw()

Enviado: 27 Jun 2014 10:58
por Jairo Maia
Olá Abel,

Você deve estar fazendo algo errado. Usando o PrintFileRaw() você pode enviar a impressora todos os comandos ESC/POS que ela entende, inclusive corte de papel e abertura de gaveta.

iniciando uso printfileraw()

Enviado: 27 Jun 2014 11:09
por Kapiaba
Ola, veja se te ajuda:

Código: Selecionar todos

FUNCTION PrintDosForWin()

   LOCAL cTexto     := ""
   LOCAL ON_GRANDE  := CHR(27) + CHR(33) + CHR(16) // Para Impressoras Epson
   LOCAL OFF_GRANDE := CHR(27) + CHR(33) + CHR(01) // Para Impressoras Epson
   // Seleciona a Impressora do Windows
   LOCAL cPrinter   := GetDefaultPrinter()         
   LOCAL CRLF       := CHR(13) + CHR(10)
   LOCAL cFileName  := "TEXTO.PRN"

   cTexto += "Esta e a primeira linha do texto" + CRLF
   cTexto += Replicate( "*-", 20 ) + CRLF
   cTexto += ON_GRANDE + "LETRAS GRANDES" + OFF_GRANDE + CRLF
   cTexto += "Esta e outra linha de texto..." + CRLF
   cTexto += PADL( "Esquerda ", 40 ) + CRLF
   cTexto += PADC( "CENTRALIZADO", 40 ) + CRLF
   cTexto += PADR( "Direita", 40 ) + CRLF
   cTexto += PADC( "< Linha Final >", 40, "-" ) + CRLF

   IF WriteStream( cFileName, cTexto )
      // Envia a Impressao ao Spool do Windows
      PrintFileRaw( cPrinter, cFileName, "Impressao Em Formato DOS desde Windows" )
      FERASE( cFileName )
   ENDIF

RETURN NIL

// Esta Funcion la encontre por ahi...
FUNCTION WriteStream( cFile, cStream )

   LOCAL nHandle := FCreate( cFile )

   IF FError() <> 0
      RETURN( .F. )
   ENDIF

   FWrite( nHandle, cStream, Len(cStream) )

   FClose( nHandle )

RETURN ( FError() == 0 )

// FIM DO PROGRAMA
abs,

iniciando uso printfileraw()

Enviado: 27 Jun 2014 11:13
por Toledo
Abel escreveu:So que percebi que ele nao entende os comandos chr padrao epson.
Quem tem que entender é a impressora, a função PrintFileRaw() só envia o arquivo para a impressora. Então se você estiver enviando os comandos para uma impressora que não é Epson, com certeza os comandos não serão reconhecidos.

Abraços,

iniciando uso printfileraw()

Enviado: 27 Jun 2014 11:15
por bencz
O printfileraw, pode enviar para a impressora, um arquivo TXT ou PCL ( e se a impressora tiver suporte para PS, PS, PDF e etc... )

Veja este exemplo...

Teste.pcl

Código: Selecionar todos

%-12345X@PJL ENTER LANGUAGE=PCL
E
&u300D
&l26A
&l0O
&l0E
&a0L
&l0C
&l0L
&l1S

&f100y0X
&f0S
&l0E
&a0L
&l0C
&l0L

*p0150y0720X*c767a1bp767b50g2P
*p0152y0723X*c761a1bp761b1P

*p1017y0147X*c2060a3bp675b10g2P
*p+675y0147X*c1bP
*p1080y0300X*c1750a0550b1P

*p2150y0147X*c2060a1bp980b50g2P
*p+980y0147X*c1bP
*p+250y0147X*c1bP
*p2200y0200X*c1960a0870b1P

*p0635y+50y1800X&f9950y2X
*p0665y0147X&f31237y2X

&f1S
&f1x10X


&f101y0X
&f0S
&l0E
&a0L
&l0C
&l0L

&a180P
*p0150y0720X*c767a1bp767b50g2P
*p0152y0723X*c761a1bp761b1P

*p1017y0147X*c2060a3bp675b10g2P
*p+675y0147X*c1bP
*p1080y0300X*c1750a0550b1P

*p2150y0147X*c2060a1bp980b50g2P
*p+980y0147X*c1bP
*p+250y0147X*c1bP
*p2200y0200X*c1960a0870b1P

*p0635y+50y1800X&f9950y2X
*p0665y0147X&f31237y2X

&a0P
&f1S
&f1x10X&l0O&a0L&l0E&l0C&l0L&l1S&f100y2X*p1500y0350X(s1P(s25v0s5b4148TALEXANDRE                &l0E&a0L&l0C&l0L&f101y2X*p1500y0350X(251X<wNnnWwwNnNwNWnnNnnWw>(3@E%-12345X
Você pode pegar este código, salvar em um arquivo PCL e usar o printfileraw para enviar tal p/ a impressora...

Código: Selecionar todos

function main()
   local cFileName := "teste.pcl"
   local cPrinterName := "LPT1"
   
   if PrintFileRaw(cPrinterName, cFileName) == 0
      ? "Falha :("
   else
      ? "Sucesso.."
   endif
   
return nil
Veja o anexo.

iniciando uso printfileraw()

Enviado: 27 Jun 2014 11:29
por Jairo Maia
Olá Pessoal,

Apenas para registro:
Toledo escreveu:Então se você estiver enviando os comandos para uma impressora que não é Epson
A rigor, como o próprio nome da função diz, a impressora precisa ser compatível com o modo RAW. Pode ser impressora de qualquer marca e modelos Matricial, Térmica, DeskJet ou Laser. Porém, precisa ter compatibilidade com o modo RAW, ou seja, ela precisa ser capaz de interpretar os comandos ESC/POS.

Se a impressora não for compatível com esse modo, ou ele estiver desabilitado, não irá funcionar. Se a impressora for compatível, o exemplo do colega Kapiaba irá funcionar corretamente.

iniciando uso printfileraw()

Enviado: 27 Jun 2014 11:47
por bencz
Normalmente as impressoras utilizam por padrão ( as que suportam RAW... ) PCL, PS..

iniciando uso printfileraw()

Enviado: 28 Jun 2014 09:59
por Abel
Realmente nao deu certo ainda.

fiz um teste simples
chr(27)+'@'
chr(27)+chr(18) teste 80 colunas
chr(27)+chr(15) teste 132 colunas

e nao deu certo, imprimiu tudo letra normal "80 colunas por linha" e a impressora é epson mesmo.

sera que tenho que compilar alguma lib junta ? ou por algum comando no inicio do programa na rotina main() ?

Abel

iniciando uso printfileraw()

Enviado: 28 Jun 2014 10:12
por Abel
Ops, a impressora nao é epson.

uma é OKI B410 LASER
a outra é HP PHOTOSMART C4400 SERIES

abraços e agradeco desde ja.
ABEL

iniciando uso printfileraw()

Enviado: 29 Jun 2014 08:13
por Jairo Maia
Olá Abel,
Abel escreveu:sera que tenho que compilar alguma lib junta ?
Não. Você precisa usar os comandos corretamente. Veja que para comprimir em 17.5 cpp o comando não é precedido por Chr(27):

Código: Selecionar todos

Chr(15)               // ativa 17,5 cpp
Chr(18)               // desativa 17,5 cpp
Chr(27)+'M'+Chr(15)   // ativa 20 cpp
Chr(27)+'P'           // desativa 20 cpp
Chr(27)+'M'           // ativa elite
Chr(27)+'P'           // desativa elite
Chr(27)+'E'           // ativa enfatizado
Chr(27)+'F'           // desativa enfatizado
Chr(27)+'W'+Chr(1)    // ativa expansao
Chr(27)+'W'+Chr(0)    // desativa expansao
Chr(27)+'0'           // ativa 8 lpp
Chr(27)+'2'           // desativa 8 lpp