Impressão Jato de Tinta USB Linux ... problemas ...

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

Moderador: Moderadores

arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por arcanjoebc »

Pessoal, faz bastante tempo que não programo mais em xBase e decidi criar um pequeno exemplo, com base nos meus conhecimentos em DBase III Plus, para um pequeno sistema de cadastro de clientes, para depois, ampliá-lo para algo maior. Estou usando o Harbour no Ubuntu 16.04 64 bits como Sistema Operacional e consigo compilar o programa e linká-lo. Porém, quando o executo e peço para imprimir todos os dados dos Clientes, com a rotina que fiz, ele não imprime ... só após eu sair do programa. Então, é impresso o cabeçalho em uma folha e os dados em outra ... no que estou errando na rotina e por que tenho que pressionar a opção "9" de saída, para poder liberar os dados para a Impressora Lexmark X1250, jato de tinta, multifuncional? Abaixo está o código chamador principal e a rotina de impressão:

Programa Chamador - Menu Principal :

Código: Selecionar todos

*---------------------------------------*
* PROGRAMA   : cli.prg                  *
* AUTOR      : Everaldo Bernardo Cunha  *
* DATA       : 15/02/2016               *
* FINALIDADE : Gerenciar o Sistema      *
*---------------------------------------*
REQUEST DBFCDX

function main ()

RDDSETDEFAULT("DBFCDX")

set date french
set century on

opcao = 0

do struc2
do indices

do while .t.
   setcolor("w/b")
   clear screen
   quadro(1,1,40,140)
   @ 03,43 say "       CADASTRO DE CLIENTES"
   @ 04,43 say "       ======== == ========"
   @ 06,43 say "Incluir ....................... 1"
   @ 08,43 say "Alterar ....................... 2"
   @ 10,43 say "Consultar ..................... 3"
   @ 12,43 say "Excluir ....................... 4"
   @ 14,43 say "Imprimir ...................... 5"
   @ 16,43 say "Mostra dados na tela .......... 6" 
   @ 18,43 say "Reindexar ..................... 7"
   @ 20,43 say "Sair .......................... 9"
   @ 24,43 say "Opcao .............. #"
   @ 24,64 get opcao picture "9"
   read
   do case
      case opcao = 1
        do cli01
      case opcao = 2
        do cli02
      case opcao = 3
        do cli03
      case opcao = 4
       do cli04
      case opcao = 5
       do cli05
      case opcao = 6
       do cli06
      case opcao = 7
       do reindexa
      case opcao = 9
         exit
   endcase
enddo
return nil

// ---------------------------------------
function quadro(ri,ci,rf,cf)
@ ri,ci clear to rf,cf
dispbox(ri,ci,rf,cf)
return nil
                           
Rotina de Impressão de todos os dados do DBF indexado:

Código: Selecionar todos

*-------------------------------------------*
* PROGRAMA   :  cli05.prg                   *
* AUTOR      :  Everaldo Bernardo Cunha     *
* DATA       :  20/02/2016                  *
* FINALIDADE :  Imprimir dados do programa  *
*-------------------------------------------*
use clientes
OrdSetFocus("indcli02")

linha  = 0
pagina = 0
tot_cli = 0
set device to prin
set print on
do while .not. eof()
   if linha = 0 .or. linha > 59
   pagina = pagina + 1
   if pagina > 1
      eject
   endif
       @ 01,01 say "CONTROLE DE CLIENTE"
       @ 01,57 say "PAG"
       @ 01,61 say pagina
       @ 03,29 say "LISTAGEM DE CLIENTES"
       @ 03,57 say date()
       @ 05,01 say replicate("_",76)
       @ 06,01 say "CODIGO"
       @ 06,09 say "NOME"
       @ 06,41 say "DT NASC"
       @ 06,51 say "TELEFONE"
       @ 07,01 say replicate("_",76)
   endif
   linha = linha + 1
   @ linha, 03 say cod
   @ linha, 09 say nome
   @ linha, 41 say nasc
   @ linha, 51 say fone
   skip
enddo
linha = linha + 1
@ linha,01 say "TOTAL DE CLIENTES"
@ linha,20 say tot_cli
set device to screen
set prin off
close all
return
Desde já, sou-lhes grato por qualquer solução que possam me fornecer para o problema enfrentado!
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por Daniel »

Ola faz tempo que eu não uso Linux
mais se não me engano você tem que criar a impressão em texto e usar o comando run
para copiar para a porta da impressora seria o mais fácil
OBS: Não sei se funciona no Linux o comando "lpprinter"

Código: Selecionar todos

Set Cursor off
Set Console off
Set Device To Printer
Set Printer On
If Linux
	cTempFile:= StrTran(time(), ":") + ".prn"
	Set Printer To (cTempFile)
Else
   Set Printer To (LpPrinter)
EndIf

@ 10,  2 Say 'Teste de impressao linux'

Set Printer To
Set Printer Off
Set Device to Screen
Set Console On
Set Cursor On
If Linux
	__Run(lpprinter  + cTempfile)
EndIf

Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por arcanjoebc »

Eu tentei imprimir para um arquivo TXT e funcionou ... com o teu exemplo, compilou, mas dá erro dizendo que a variável LINUX não existe:
everaldo@positivo:~/cli$ hbmk2 -lgpm -static imprime.prg
Harbour 3.2.0dev (r1602051722)
Copyright (c) 1999-2016, http://harbour-project.org/
Compiling 'imprime.prg'...
Lines 23, Functions/Procedures 1
Generating C source output to '/tmp/hbmk_gdtHlM.dir/imprime.c'... Done.
everaldo@positivo:~/cli$ ./imprime

Error BASE/1003 Variable does not exist: LINUX
Called from MAIN(7)
everaldo@positivo:~/cli$
O que poderá ser, Daniel !!!
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por Daniel »

declare ela
Linux:= .t.
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por arcanjoebc »

Olha o resultado, Daniel ...
everaldo@positivo:~/cli$ ./imprime

Error BASE/1003 Variable does not exist: LPPRINTER
Called from MAIN(25)



Alguma solução?
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por Daniel »

aqui esta ele
lpprinter:= "lpr "
não sei como esta este comando no linux agora pois isto eu usava a muito tempo
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por arcanjoebc »

Daniel, colocando-se a atribuição para a porta de impressão, o erro durante a execução do programa, não aparece mais, porém, o arquivo de saída, extensão "prn" não mostra nada e, quando apresentava o erro, saía com "quit" e gerava um arquivo com o texto do exemplo ... 10 linhas em branco e o texto de teste ... mas dava o erro já mencionado acima ... lembras de alguma outra solução, caro amigo?
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por arcanjoebc »

Como está imprimindo em um arquivo TXT, a solução que achei, foi criar a rotina abaixo, criando o mesmo e imprimir abrindo-se o arquivo texto. É uma solução temporária, mas ajuda. A letra do texto fica um pouco pequena, queria aumentá-la, mas não me lembro mais o comando que usava no tempo que criava em DBase. Como disse, abaixo está a solução temporária para o caso:

Código: Selecionar todos

*-------------------------------------------*
* PROGRAMA   :  cli05.prg                   *
* AUTOR      :  Everaldo Bernardo Cunha     *
* DATA       :  20/02/2016                  *
* FINALIDADE :  Imprimir dados do programa  *
*-------------------------------------------*
use clientes
set order to 2
set cursor off
set console off


linha  = 0
pagina = 0
tot_cli = 0
arq = "relat.txt"
set printer to ( arq )
set device  to printer
set print on
do while .not. eof()
   if linha = 0 .or. linha > 59
   pagina = pagina + 1
   if pagina > 1
      eject
   endif
       @ 01,01 say "CONTROLE DE CLIENTE"
       @ 01,57 say "PAG"     
       @ 01,61 say pagina    
       @ 02,01 say "======== == ======="
       @ 02,57 say "==="
       @ 03,29 say "LISTAGEM DE CLIENTES"
       @ 03,57 say date()
       @ 04,29 say "======== == ========"
       @ 04,57 say "=========="
       @ 05,01 say replicate("_",76)
       @ 06,01 say "CODIGO"
       @ 06,09 say "NOME"
       @ 06,51 say "DT NASC"
       @ 06,63 say "   TELEFONE"
       @ 07,01 say replicate("_",76)
   endif
   linha = linha + 1
   @ linha, 03 say ltrim(str(cod))
   @ linha, 10 say nome
   @ linha, 51 say nasc
   @ linha, 63 say fone
   skip
enddo
linha = linha + 1
tot_cli = linha - 1
@ linha,01 say "TOTAL DE CLIENTES"
@ linha,20 say tot_cli
Set Printer To
Set Printer Off
Set Device to Screen
Set Console On
Set Cursor On
close all
return
Se o fonte ajudar a achar uma solução, Daniel, fico-lhe muito grato, ok!
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por Daniel »

o comando "lpr" faz parte do cups tem que ver se tem ele instalado no linux
olhe este link http://www.monolitonimbus.com.br/compar ... -no-linux/
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Impressão Jato de Tinta USB Linux ... problemas ...

Mensagem por arcanjoebc »

Daniel, o "cups" já está instalado, ok!
Responder