Página 1 de 1

Impressão com o usb.exe

Enviado: 03 Abr 2008 00:59
por José Luiz
Caros amigos, tenho um sistema desenvolvido em clipper 5.2 que está em rede, usando windows xp, com impressoras laser na rede. Estou usando o usb.exe do Santo Heveraldo, mas está imprimindo uma folha após o relatório com alguns caracteres. Não consigo resolver esse problema. A rotina é a seguinte:
do while .t.
if isprinter()
do impterm1
texto do relatório
do impterm2
else
aviso2("LIGUE A IMPRESSORA E TECLE <<<ENTER>>>...")
loop
endif
enddo

*********

PROCEDURE impterm1

aviso("GERANDO RELATàRIO. AGUARDE...")
set console off
set print to impterm.txt
set print on
set device to print
RETURN

**********

PROCEDURE impterm2

set print off
set print to
set console on
set device to screen
aviso("I M P R I M I N D O...")
run usb impterm.txt
close all
RETURN

[/code]

Enviado: 03 Abr 2008 16:36
por Pablo César
José Luiz, execute o USB sem parâmetro na linha de comando e verifique o conteúdo das variáveis que compõe o USB.MEM, teriam que ser mais ou menos assim:

Código: Selecionar todos

VM_CCANCEL  Tam 20 Tipo C "[CANCELANEGRITO]"
VM_CCOMPRI  Tam 20 Tipo C "[COMPRIMIDO]"
VM_CEXPAND  Tam 20 Tipo C "[EXPANDIDO]"
VM_CFILE    Tam 12 Tipo C "*.PRN"
VM_CNEGRIT  Tam 20 Tipo C "[NEGRITO]"
VM_CNORMAL  Tam 20 Tipo C "[NORMAL]"
VM_NCOMPRI  Tam  9 Tipo N 8
VM_NEXPAND  Tam  9 Tipo N 18
VM_NNORMAL  Tam  9 Tipo N 11
VM_NTEMPO   Tam  9 Tipo N 5
VM_PRN      Tam 12 Tipo C "Impressora instalada no Windows"
Senão faça algo mais simples, delete o USB.MEM que o USB.EXE irá criá-lo novamente. Se o problema persistir, poste para nós o conteúdo das letras que está imprimindo a mais.

Enviado: 03 Abr 2008 20:57
por rosalvo rosa
Olá pessoal

peço permissao Jose Luiz para pegar uma carona neste tópico,
e pergunto :

como faço para linkar o usb.exe no meu sistema ?
ou só chamo ele com o Run ?

desde já agradeço.

USB

Enviado: 04 Abr 2008 00:30
por José Luiz
Pablo, fiz a substituição das macros de fonte no usb para ficar igual ao que eu uso no meu sistema e alterei também o tamanho das fontes. Ficou assim: "normal" tamanho 11, "condensado" tamanho 9, "expande" tamanho 14 e "negriton" para negrito. Está funcionando as configurações das fontes, porém, após a impressão do relatório a impressora imprime outra folha com o caracter  no canto superior esquerdo.

Rosalvo, só chamo ele com o run.

Enviado: 04 Abr 2008 01:05
por Pablo César
rosalvo rosa escreveu:como faço para linkar o usb.exe no meu sistema ?
Eu acho que se você quiser fazer uma LIB, acredito que daria um pouco de trabalho, mas seria possível na teoria. Por acaso você chegou ver o processo que o Maligno inventou para conseguir uma .LIB através de um aplicativo .EXE ?. Se tiver interesse, baixe a ultima a ultima versão do WAPI e veja a documentação na pasta WAPI2LIB.
ou só chamo ele com o Run ?
Esta forma é a que mais é usada, pode também ser usado o SWPRUNCMD se for linkado com o BLINKER.

Além disso teria mais duas formas de se fazer uso do USB.EXE:

1. No meu caso que meu sistema é modular, isto é, tenho um executável para cada opção de menu e é gerenciado por um arquivo BATCH principal. Então suponhamos que usuário entra em relatórios manda imprimir e ao invés de imprimir direto na impressora você direciona sempre para arquivo .PRN (por exemplo). Daí na saída desse aplicativo através de um arquivo BATCH você chama o USB.EXE. Veja o exemplo do arquivo em lote:

Código: Selecionar todos

RELATORIO.EXE
IF EXIST LISTA1.PRN USB.EXE LISTA1.PRN 
2. O USB.EXE do Heveraldo tem a opção de ficar em looping, verificando a todo momento se em determinada pasta existe algum arquivo .PRN (ou a extensão que você definir) e daí então o USB manda para a impressora setada automaticamente. Isso serve como um servidor de impressão, mas teria que ficar aberta a sessão (podendo estar minimizada) mas em execução. Então todo relatório que o usuário mandar imprimir, você muda seu programa para que grave em arquivo e em determinada pasta. Para deixar ouvindo o USB.EXE é só chamar sem parâmetro algum que ele ficará em stand-by com a mensagem "Aguardando arquivos para impressão..."
José Luiz escreveu:após a impressão do relatório a impressora imprime outra folha com o caracter  no canto superior esquerdo.
CHR(127) equivale o BackSpace. Talvez algum comando que você tenha passado para esse arquivo e que não conseguiu interpretar e experimenta a não dar o CHR(12) ou EJECT no final do relatório. Talvez seja isso.

José Luiz, antes de chamar o:

Código: Selecionar todos

run usb impterm.txt 
coloque "//", isto é, desabilite a chamada do USB para que o arquivo não seja apagado e daí então edite seu arquivo impterm.txt para ver se contém algum caracter estranho. Está me parecendo que seus ALTERNATE ou SET DEVICE estão invertidos ao fechar e não estaria fechando.

Nã consegui resolver

Enviado: 04 Abr 2008 21:57
por José Luiz
Pablo, ainda continua o problema. Não sei como resolver. Vou tentar desde o começo para ver se encontro o problema. Obrigado.

Enviado: 05 Abr 2008 10:59
por heveraldo
Carissimos,

O USB.EXE não consegue sobrepor impressão e acaba realizando um EJECT.
Talvez seja isso.

Qualquer dúvida, entrem em contato!

Ah! Tem uma versão nova, onde eu poderia postar?

Abraços,

Heveraldo@msn.com

Enviado: 05 Abr 2008 11:08
por Maligno
Se quiser, me mande por eMail que disponibilizo no meu site. :)
Endereço: news(ARROBA)buzinello.com

Enviado: 12 Abr 2008 13:41
por danielrxavier
Não sei se estou falando besteira pois não sou fera como esse pessoal.
Mas quando a impressora no cliente é usb e o windows é XP, eu compartilho a impressora e faço um .bat para antes de chamar meu prog, mapear a lpt1 para a impressora compartilhada.

EX do arquivo .bat:

net use lpt1 \\nomedomicro\nomedocompartilhamentodaimpressora
meuprog.exe

Enviado: 12 Abr 2008 13:57
por Maligno
Nunca testei, até porque uso a LIB WAPI. Mas já vi darem essa mesma dica. Não acho muito prático, mas se funciona bem, melhor. :)

Enviado: 13 Abr 2008 10:10
por Pablo César
danielrxavier escreveu:quando a impressora no cliente é usb e o windows é XP, eu compartilho a impressora e faço um .bat para antes de chamar meu prog, mapear a lpt1 para a impressora compartilhada.
Sim esta é outra saída que pode ser utilizada, no entanto (não sei se em XP é possível) capturar a impressora para LPT1 quando a impressora está conectada à própria estação. Pelas tentativas que eu fiz (não fiz em XP) isto não era possível capturar em LPT1 quando a impressora estava conectada naquela mesma estação. Dá uma mensagem que não é possivel instalar nessa estação no momento de instalação da impressora.

Enviado: 13 Abr 2008 21:01
por danielrxavier
na verdade, no win98 é que não funciona. mas a partir do win2000 é possível capturar a própria impressora. sempre faço isso em clientes com imp. usb.

Enviado: 24 Abr 2008 10:58
por Alcir
danielrxavier escreveu:Não sei se estou falando besteira pois não sou fera como esse pessoal.
Mas quando a impressora no cliente é usb e o windows é XP, eu compartilho a impressora e faço um .bat para antes de chamar meu prog, mapear a lpt1 para a impressora compartilhada.

EX do arquivo .bat:

net use lpt1 \\nomedomicro\nomedocompartilhamentodaimpressora
meuprog.exe
Isso NAO funciona, se for impressora com cabo USB conectado a rede.
Abraços

Enviado: 24 Abr 2008 11:06
por Maligno
Há quem diga que funciona em kernel NT. E se alguém disse isso é porque deve ser verdade. Talvez você tenha algum problema na sua rede que o impossibilite de usar esse recurso. Ou você está falando de Windos não-NT?

Enviado: 24 Abr 2008 12:02
por gvc
Eu já usei captura de USB para LPT1.

O principal problema é que algums impressoras não tem caracter residente, ou seja, não imprimem diretos usando DOS/LPT1.
Essas impressoras só usam impressão "gráfica".