duvida de em qual linha por tipo de impressão.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

ola pessoal, gostaria de saber na rotina abaixo, em qual linha eu informo o tipo de impressao, sei que o comando
oPrinter:SetFont( "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. ), determina o tipo de impressao, mas não sei onde por esse comando
na rotina abaixo no xHarbour.

Código: Selecionar todos

PROCEDURE W32PRN_(arqtxt,nomeimpressora,tipo_de_impressao)
       	Local cPrinter := ALLTRIM(nomeimpressora)
  	Local nResult, cMsg:=""
  	cFileName := "C:\ARQUIVOS\" + arqtxt
	
    SET PRINTER TO
    SET DEVICE TO SCREEN
	
    If !File("&cFileName")
       Return Nil
    Else
       nResult := PrintFileRaw( cPrinter, cFileName, "Impressao Pelo Sistema" )
       IF nResult = -1
          cMsg = "Parametros Invalido, Favor Tentar Novamente"
       ELSEIF nResult = -2
          cMsg = "Falha na chamada da Impressora, Favor Verificar a Impressora"
       ELSEIF nResult = -3
          cMsg = "Falha ao Iniciar Impressão, Favor Verificar a Impressora"
       ELSEIF nResult = -4
          cMsg = "Falha ao Iniciar a Primeira Pagina, Favor Verificar a Impressora"
       ELSEIF nResult = -5
          cMsg = "Falha de Memoria da Impressora, Favor Verificar a Impressora"
       ELSEIF nResult = -6
          cMsg = "Não foi Possivel localizar o arquivo de Impressão, Favor Tentar Novamente"
       ENDIF
       IF len(alltrim(cMsg)) > 1
          Alert(HB_ANSITOOEM(cMsg) )
       ENDIF
    EndIf
    Return Nil
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida de em qual linha por tipo de impressão.

Mensagem por Jairo Maia »

Olá Porter,

Você só pode usar o comando :SetFont( "Lucida Console", 10,{3,-60},FW_BOLD,.F.,.F. ) quando você usa a classe WIN32PRN (xHarbour). Quando usa o PrintFileRaw(), para imprimir comprimido ou definir tipos de fontes suportados pela impressora você deve inserir os comandos ESC/POS diretamente no arquivo que vai ser enviado a impressora pelo PrintFileRaw().
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

duvida de em qual linha por tipo de impressão.

Mensagem por Kapiaba »

Se entendi...

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
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

ola Jairo e Kapiaba, estou gerando o arquivo txt conforme rotina abaixo, onde está o comando QQout( CHR(15) + CHR(27) + "E" ), eu preciso aumentar a quantidade de caracteres por polegada, eu preciso aumentar a largura dos caracteres, se eu colocar chr(18) vai ficar muito largo os caracteres, qual comando eu usaria, obrigado.

Código: Selecionar todos

SET DEVICE TO PRINT
SET PRINT ON
SET PRINTER TO C:\ARQUIVO\TESTE.TXT
QQout( CHR(15) + CHR(27) + "E" )
@ contl,00 SAY CHR(14)+"PEDIDO Nº " + STR(cNCUPOM,6,0)     
contl++
@ contl,00 SAY LEFT(DESCRICAO)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida de em qual linha por tipo de impressão.

Mensagem por Jairo Maia »

Olá Porter,

Se você usar o Chr( 18 ), você desativa a compressão de 17.5 cpp, voltando para o padrão que é 12 cpp.

Para comprimir em 20 cpp use:

Código: Selecionar todos

QQout( "Chr(27)+'M'+Chr(15)" )  // comprime em 20 cpp
QQout( "Chr(27)+'P'" )          // desativa 20 cpp (volta ao padrão de 12 cpp)
Editado:
Os comandos acima funcionam somente para Matriciais ou Térmicas. Se for DeskJet ou Lazer, use:

Código: Selecionar todos

 QQout( "CHR(27)+'(s16.67H'" )  // comprime em 20 cpp
 QQout( "CHR(27)+'(s10H'" )     // desativa 20 cpp (volta ao padrão de 12 cpp)
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

olá Jairo, estou usando esse comando:
QQout( CHR(15) + CHR(27) + "E" ) )

Você me passou esse:
QQout( "Chr(27)+'M'+Chr(15)" ) // comprime em 20 cpp

Tentei imprimir em uma impressora termica Bematech não fiscal MP-2500, usando o comando que você sugeriu, e o resultado foi iqual ao comando que eu já usava, aparentemente os dois comandos são iguais, a minha duvida é, para imprimir caracteres com largura maior onde está chr(15) mudar para outro, qual seria,
se eu quiser ao inves de 20 cpp, imprimir 10 cpp.

obrigado.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

ola, imprimir a 12 cpp, a letra fica muito grande, imprimir a 20 cpp a letra fica muito pequena, tem como imprimir a 14 cpp ou a 15 cpp ?
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida de em qual linha por tipo de impressão.

Mensagem por Jairo Maia »

Olá Porter,

Tente encontrar na internet o manual ESC/BEMA. A bematech tem uma configuração própria, embora afirme que é compatível com ESC/POS (e é, apenas nunca usei nada além 12 cpp ou 17.5 cpp). Tente encontrar um manual ESC/BEMA. Veja se tem alguma configuração para 15 ccp por exemplo. Se encontrar, talvez (acho que com certeza), no manual estará como EXADECIMAL, mas é fácil traduzir para o Harbour, então poste se houver dúvida.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

ola Jairo, encontrei essa configuração da Bematech, aqui tem decimal e convertido para hexadecimal, como ficariam para ser usado como comando no
xHarbour ? obrigado.

Largura de Impressão, Largura e Altura dos Caracteres
ASCII Dec Hexa Descrição
ESC H 72 48 Ativa o modo de 48 colunas (padrão)
ESC P 80 50 Ativa o modo de 48 colunas (padrão)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida de em qual linha por tipo de impressão.

Mensagem por Jairo Maia »

Porter,

O que você postou são os comandos a ser usado para setar a largura de colunas. O padrão como já diz é de 48 colunas. Veja no manual os comandos de compressão de caractres e poste para que eu ou algum colega passe para Harbour. Não tem segredo, você verá.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

Jairo,
Encontrei o manual Esc/Bema, lá encontrei varios tópicos descritos abaixo, mas compressão de caracteres não encontrei, se você puder passar alguns exemplos de configuração que você usa, talvez algum deles sirva para mim.

Operação
Posicionamento Vertical
Posicionamento Horizontal
Tipos de Caracteres
Largura de Impressão, Largura e Altura dos Caracteres
Códigos de Barras
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

duvida de em qual linha por tipo de impressão.

Mensagem por Jairo Maia »

Porter,

Provavelmente está no tópico: Tipos de Caracteres. Mas anexe esse manual aqui, assim que algum colega (isso me inclui) puder podemos tentar ajudar.

Com relação a passar algum comando, os que eu usava eram os comandos ESC/POS, e aliás, desde o dia 1º deste mês não tenho mais nenhum cliente com Bematech. Elas foram substituídas pela Epson TM-T20 e SAT. Apenas um teimoso não aceitou a sugestão e comprou uma Elgin.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

Obrigado Jairo, vou tentar outros comandos, se eu conseguir posto aqui.

Operação
ASCII Dec Hex Description
ESC @ 64 40 Inicializa a impressora
ESC b n 98 62 Habilitado (1): Sensor do estado da gaveta
Desabilitado (0): Sensor do estado do papel
ESC v n 118 76 Ativa a gaveta (n milissegundos; -50 ms < n < 200 ms
ESC w 119 77 Efetua um corte de papel
ESC x 120 78 Habilita o modo Dump
ESC y n 121 79 Habilitado (1) ou Desabilitado (0). Modo-padrão do teclado (1)
ESC z 1/0 122 7A Habilita o avanço automático de linha (n=1). Desabilita o avanço
automático de linha (n=0)
ESC m 109 6D Efetua um corte parcial de papel

Posicionamento Vertical
ASCII Dec Hexa Descrição
ESC C n 67 43 Programa o tamanho da página em linhas, onde n é o número de linhas
(altura simples). O padrão corresponde a 12 linhas (de altura simples)
ESC c n1 n2 99 63 Programa o tamanho da página em milímetros, onde Tamanho =
0,125mm*n1*n2
ESC J n 74 4A Efetua o avanço de n*0,125 mm de papel
FF 12 0C Avança uma página
LF 10 0A Avança uma linha
ESC 2 50 32 Avanço de linha de 1/6" (avanço de linha-padrão)
ESC 3 n 51 33 Avanço de linha de n/144 de polegada, onde n varia de 18(d) a 255(d)
ESC f 1 n 102 66 Salto de n caracteres na vertical
ESC A n 65 41 Efetua o avanço de n*0,375 mm de papel
19
MP-2100 TH . REVISÃO 1.2

Posicionamento Horizontal
ASCII Dec Hexa Descrição
ESC f 0 n 102 66 Salto de n caracteres na horizontal
ESC Q n 81 51 Posiciona a margem direita na coluna n
ESC I n 108 6c Posiciona a margem esquerda na coluna n
ESC a n 97 61 Alinha os caracteres; eles são centralizados com n=1 ou alinhados à
esquerda com n=0
.
Tipos de Caracteres
ASCII Dec Hex Descrição
ESC - n 45 2D Ativa (n=1) ou desativa (n=0) o modo sublinhado
ESC 4 52 34 Ativa o modo itálico
ESC 5 53 35 Desativa o modo itálico
ESC E 69 45 Ativa o modo de realce.
ESC F 70 46 Desativa o modo de realce
ESC t n 116 74 Seleciona a tabela de caracteres:
n=2 (Tabela de Caracteres 850 - Padrão)
n=3 (Tabela de Caracteres 437)
n=4 (Tabela de Caracteres 860)
n=5 (Tabela de Caracteres 858)
ESC S n 83 53 n=0 (habilita os caracteres sobrescritos)
n=1 (habilita os caracteres subscritos)
ESC T 84 54 Desabilita os modos sobrescrito e subscrito
ESC N n 78 4E n=0 (baixíssima densidade) n=1 (baixa densidade)
n=2 (densidade normal) n=3 (alta densidade)
n=4 (altíssima densidade)
ESC } n 125 7D n=1 (habilita o modo reverso)
n=0 (desabilita o modo reverso)
Manual de Usuário
20

Largura de Impressão, Largura e Altura dos Caracteres
ASCII Dec Hexa Descrição
DC2 18 12 Desativa o modo condensado (42 colunas)
DC4 20 14 Desativa o modo expandido de uma linha
ESC d n 100 64 Ativa (n=1) ou desativa (n=0) a altura dupla
ESC H 72 48 Ativa o modo de 48 colunas (padrão)
ESC P 80 50 Ativa o modo de 48 colunas (padrão)
ESC SI 15 0F Ativa o modo condensado (64 colunas)
ESC SO 14 0E Ativa o modo expandido de um linha
ESC V 86 56 Ativa a altura dupla de uma linha
ESC W n 87 57 Ativa (n=1) ou desativa (n=0) o modo expandido
SI 15 0F Ativa o modo condensado (64 colunas)
SO 14 0E Ativa o modo expandido de uma linha
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

duvida de em qual linha por tipo de impressão.

Mensagem por Kapiaba »

Veja se te ajuda:

Código: Selecionar todos

//-> testando a impressora matricial

//----- Definicao de comando SAY para TdosPrn ---------------------------------
//

#xcommand @ <nRow>, <nCol> SAY <cText> OF <oPrinter> => <oPrinter>:Say(<nRow>, <nCol>, <cText> )

STATIC FUNCTION IMP_TESTE_MATRICIAL( OpcaoImp )

   LOCAL nLinha, oPrn

   IF MsgYesNo( "Atenção Por Favor:" + CRLF + ;
                "Posso Imprimir?"    + CRLF + ;
                "Impressora Já Está Ligada?", ;
                "Por Favor, Confirme!!!" ) = .F.

      RETURN NIL
   ENDIF

   nLinha      := 0

   // Para Rede de Computadores
   // oPrn:New("\\seuterminal\suaimpressora\LPT1")
   oPrn:= TDosPrn():New( "TESTEIMP.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 " "+CHR(27)+"H" + CHR(27)+"W"+CHR(0)                  + ;
                        CHR(20) + CHR(18) + CHR(27)+"-"+CHR(0)            + ;
                        CHR(27)+"F" + CHR(27)+"5"+CHR(27)+"W"+CHR(0)      + ;
                        CHR(27)+"5"+CHR(27)+"-"+CHR(0)                    + ;
                        CHR(27)+"5"+CHR(27)+"W"+CHR(0)+CHR(27)+"-"+CHR(0) + ;
                        CHR(27)+"W"+CHR(0)+CHR(27)+"-"+CHR(0) OF oPrn

   nLinha := nLinha + 1

   DO CASE
   CASE OPCAOIMP = 1
      @ nLinha,01 SAY "A - M o d o  Condensado   com  6 Linhas Por Polegada"+CHR(15)                         OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 2
      @ nLinha,01 SAY "B - M o d o  Carta  com    6   Linhas  Por  Polegada"+CHR(27)+"G"                     OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 3
      @ nLinha,01 SAY "C - Modo Carta Condensado  com 6 Linhas por Polegada"+CHR(27)+"G"+CHR(15)             OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 4
      @ nLinha,01 SAY "D - M o d o  Normal  com   8   Linhas  por  Polegada"+CHR(27)+"0"                     OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 5
      @ nLinha,01 SAY "E - M o d o  Condensado   com  8 Linhas por Polegada"+CHR(15)+CHR(27)+"0"             OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 6
      @ nLinha,01 SAY "F - M o d o  Carta  com    8  Linhas   por  Polegada"+CHR(27)+"G"+CHR(27)+"0"         OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 7
      @ nLinha,01 SAY "G - Modo Carta Condensado  com 8 Linhas por Polegada"+CHR(15)+CHR(27)+"G"+CHR(27)     OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 8
      @ nLinha,01 SAY "H - M o d o   Condensado   c o m   dupla   Impressao"+CHR(15)+CHR(27)+"E"             OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 9
      @ nLinha,01 SAY "I - M o d o  N o r m a l  c o m  d u p l a Impressao"+CHR(27)+"E"                     OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   CASE OPCAOIMP = 10
      @ nLinha,01 SAY "J - V o l t a  ao  Normal  com 6 Linhas por Polegada"+CHR(18)+CHR(27)+"2"+CHR(27)+"H" OF oPrn
      nLinha := nLinha + 1
      @ nLinha, 00 SAY "."                                                                                   OF oPrn
      nLinha := nLinha + 1
   ENDCASE

   //-> 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( "TESTEIMP.TXT",, .T. )
   //--- opcionamente pode-se apagar o arquivo passando .t. no 3o. parametro.

RETURN NIL
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

duvida de em qual linha por tipo de impressão.

Mensagem por porter »

ola Kapiaba, estou tentando compilar a rotina que você passou, mas está dando o erro abaixo, eu preciso declarar alguma lib para dar certo,
estou compilando com xHarbour, obrigado.

xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6633)
Copyright 1999-2009, http://www.xharbour.org http://www.harbour-project.org/

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_TDOSPRN' referenced from C:\ESTOQUE\KAPIABA.OBJ
Error: Unresolved external '_HB_FUN_IMPSPOOL' referenced from C:\ESTOQUE\KAPIABA.OBJ
Responder