Win32prn - Linhas p/polegada

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

Moderador: Moderadores

Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Olá, pessoal!
Sou iniciante no Win32prn, e tenho a seguinte dificuldade: Imprimir um pedido, 5,5 polegadas, 8 linhas por polegada, e nota fiscal, 8.5 polegadas, tambem 8 linhas por polegada. Como faço isso unsando o Win32prn?
DLZ
Usuário Nível 3
Usuário Nível 3
Mensagens: 184
Registrado em: 09 Jun 2008 10:09
Localização: Ibirubá - RS - Brasil

Re: Win32prn - Linhas p/polegada

Mensagem por DLZ »

Olá amigo..
Se vc quer imprimir em modo caractere, como era no clipper, não muda nada.., ou seja, para mudar para 1/8 ou 1/6 vc envia os comandos da impressora.
a única diferença é que ao invés de imprimir direto para a impressora, vc vai imprimir primeiro para um texto, depois vai chamar uma função do Xharbour que vai imprimir esse texto em uma impressora do windows..
Seria mais ou menos assim:

SET DEVICE TO PRINTER
SET PRINTER ON
SET PRINTER TO "TESTE.TXT"
SETPOS(0,0)

? CHR..... // COMANDO ESPECIFICO PARA A IMPRESSORA PARA MUDAR PARA 1/8 O 1/6
@ PROW()+1,00 SAY "LINHA DE IMPRESSÃO"

SET DEVICE TO SCREEN
SET PRINTER OFF

PRINTFILERAW(NOME_IMPRESSORA,"TESTE.TXT")

Para Capturar as impressora instaladas no windows, vc pode usar a função GETPRINTERS(). Ela irá retornar uma matriz com algumas informações sobre as impressoras intaladas no windows..
Espero ter ajudado.. Um grande abraço...
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Bom dia, DLZ. Desculpe, mas só vou conseguir fazer os testes à noite!
Pelo que você demonstrou, não preciso alterar o meu código, criando o job de impressão. Somente incluo a rotina de capturar a impressora, o set printer to "arquivo.txt" e o printfileraw(nome_Imp,"arquivo.txt")?
Hoje tenho os comandos SET PRINTER TO ("NOTAFIS.PRN"), SET DEVICE TO PRINT e !COPY NOTAFIS.PRN LPT1 > NUL:
Se eu incluir o comando printfileraw(nome_Imp,"NOTAFIS.PRN "), funcionaria?
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Fiz uns testes e, o sistema copia o arquivo nofafis.txt para o spool da impressora, porém, a impressora não imprime.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Win32prn - Linhas p/polegada

Mensagem por Maligno »

Qual é a impressora?
Note que algumas impressoras não têm tabela de caracteres semi-gráficos e imprimem apenas em modo gráfico. Logo, imprimir em modo RAW não funciona.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Estou usando a Impressora matricial Citzen GSX-190S.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Win32prn - Linhas p/polegada

Mensagem por Maligno »

Essa é da boa! :)
E provavelmente imprimirá no mod RAW sem problema.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
DLZ
Usuário Nível 3
Usuário Nível 3
Mensagens: 184
Registrado em: 09 Jun 2008 10:09
Localização: Ibirubá - RS - Brasil

Re: Win32prn - Linhas p/polegada

Mensagem por DLZ »

Com certeza funcina com essa impressora... aliás, acredito que funciona com qualquer matricial e algumas jato de tinta e Laser..

veja se vc está fechando a comunicação com o arquivo texto gerado antes de executar a PrintFileRaw()
Se vc não der um set device to Screen e um Set print off antes de executar a função o arquivo estará aberto !
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Tenho o seguinte codigo:

Código: Selecionar todos

FUNCTION EMI_NOTA_FISCAL()
******************************************
* OBJETIVO.: Emissao da Nota Fiscal Modelo Unico
IF SGCODNOTA = 'MAGIW'
	#define FORM_A4 5.5
	#define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) 
	#define PS_SOLID   0 
	#define BLACK           RGB( 0x0 ,0x0 ,0x0 ) 
	#define BLUE            RGB( 0x0 ,0x0 ,0x85 ) 
	#define GREEN           RGB( 0x0 ,0x85,0x0 ) 
	#define CYAN            RGB( 0x0 ,0x85,0x85 ) 
	#define RED             RGB( 0x85,0x0 ,0x0 ) 
	#define MAGENTA         RGB( 0x85,0x0 ,0x85 ) 
	#define BROWN           RGB( 0x85,0x85,0x0 ) 
	#define WHITE           RGB( 0xC6,0xC6,0xC6 ) 

	NF_MAGIA_W()

	RETURN
ENDIF
.
.
.
FUNCTION NF_MAGIA_W()

LOCAL nPrn:=1
LOCAL aPrn:= GetPrinters()
save screen to tela
CLS
IF EMPTY(aPrn)
	Alert("Nao Ha Impressoras Instaladas")
	restore screen from tela
 	return
ENDIF
DO WHILE !EMPTY(nPrn)
  	CLS
  	@ 0,0 SAY 'WIN32PRN(). ESCOLHA UMA IMPRESSORA. ESC para sair.'
  	@ 1,0 TO maxRow(),maxCol()
  	nPrn:= ACHOICE(2,1,maxRow()-1,maxCol()-1,aPrn,.T.,,nPrn)
  	IF !EMPTY(nPrn)
  	        restore screen from tela
     	        nf_magia(aPrn[nPrn])
  	ENDIF
  	exit
ENDDO
RETURN
.
.
.
FUNCTION NF_MAGIA()
param sgprinternf
@24,10 say 'Impressora: ' + sgprinternf
SET DEVICE TO PRINTER
SET PRINTER ON
SET PRINTER TO "TESTE.PRN"
SETPOS(0,0)
@ prow(),1 say chr(15)  && condensado
*? CHR..... // COMANDO ESPECIFICO PARA A IMPRESSORA PARA MUDAR PARA 1/8 O 1/6
@ PROW()+1,00 SAY "LINHA DE IMPRESSÃO"
SET DEVICE TO SCREEN
SET PRINTER OFF
PRINTFILERAW(sgprinternf,"TESTE.PRN")
return
*****
O arquivo vai para a janela de controle da impressora e logo desaparece como se tivesse sido impresso, porém, não imprime. Pode ser algo na configuração aqui. Listei outro relatorio e a impressão saiu ok.



---
Nota da Moderação (Maligno):
A presente mensagem foi editada para inserir o código postado dentro de tags de visualização de código. Por favor, no futuro, use essas tags, pois se já é difícil ler o código alheio, pior fica sem a devida indentação.
DLZ
Usuário Nível 3
Usuário Nível 3
Mensagens: 184
Registrado em: 09 Jun 2008 10:09
Localização: Ibirubá - RS - Brasil

Re: Win32prn - Linhas p/polegada

Mensagem por DLZ »

Bahh cara.. nunca vi disso... mas estou desconfiado dessa extensão .prn ai ! tenta trocar para .txt ..
sei la.. é só um chute !
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Já havia testado com o arquivo "teste.txt", mas não funcionou. Hoje testei com uma impressora como sendo um arquivo e, a princípio, o arquivo enviado é vazio, so consultando o arquivo teste.prn ou teste.txt contém a nota, como segue:

0 CD x


XX 1429




VENDAS 5,403


LAUDELINO SCARMAGNANI 999999999-72 02/08/09

R GETULIO VARGAS, 2536 CIDADE ALT
85884000 02/08/09

MEDIANEIRA (45)264-4316 PR 2176690 00:00




143782 ACR ANJO FOSCA BRANCA 060 GL 3,00 47,450 142,35 0 0.00



















0,00 0,00 142,35

0,00 142,35


2 PR







502 A VISTA 590
Documento emitido por Microempresa optante pelo Simples/PR
Nao gera Credito

Pedido: 1,429 1
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Inclui o seguinte código:

LOCAL nResult := -1
LOCAL cMsg := "PrintFileRaw(): "
SET DEVICE TO PRINT
SET PRINTER ON
cFile := "notafis.txt"
SET PRINTER TO ("NOTAFIS.TXT")
SETPOS(0,0)
......
......

SET PRINTER OFF
nResult := PRINTFILERAW(SGPRINTERNF, cFile, "Test for PrintFileRaw()" )
SWITCH nResult
CASE -1
cMsg += "Invalid parameters passed to function" ; EXIT
CASE -2
cMsg += "WinAPI OpenPrinter() call failed" ; EXIT
CASE -3
cMsg += "WinAPI StartDocPrinter() call failed" ; EXIT
CASE -4
cMsg += "WinAPI StartPagePrinter() call failed" ; EXIT
CASE -5
cMsg += "WinAPI malloc() of memory failed" ; EXIT
CASE -6
cMsg += "File " + cFile + " not found" ; EXIT
DEFAULT
cMsg += cFile + " PRINTED OK!!!"
END

? cMsg
inkey(0)
RETURN

A mensagem que retorna é PrintFileRaw(): notafis.txt not found.

Estou fazendo algo errado, porém, não sei onde. Se alguém tiver uma idéia de onde posso estar errando e me ajudar, agradeço.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Win32prn - Linhas p/polegada

Mensagem por Hasse »

Bom dia colegas.

Eu ainda não entendi bem o que o colega Laudelino pretende fazer.

A Classe Win32prn() é só para imprimir em modo Windows (modo pixel) que imprime uma imgagem do texto.

Os comandos ? CHR (27)...... etc.. não podem mais usados. A mudaça do tamanho dos caracteres e altura da linha são setados por uma função da Classe, exemplo:
oPrinter:SetFont('Courier New',10,{1,nFont}, 0, .F., .F.), onde:
1)- O valor 10 representa o valor que seta a altura da linha;
2)- O valor nFont representa o tamanho do caracter;
3)- O valor 1, antes do nFont representa uma espécie de multiplicador da fonte.

Você pode dar uma olhada no tópico:
viewtopic.php?f=4&t=6465 (Win32prn para Iniciantes)
Lá você encontrará muitas informações.

Outro detalhe: Se você precisa imprimir com impressoras matriciais, não tem sentido em usar a Classe Win32prn(). A impressão vai ficar tão lenta que antes de terminar a impressão uma lesma chega ao Japão....
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Win32prn - Linhas p/polegada

Mensagem por alaminojunior »

À meu ver, faltou o comando para esvaziar o buffer.

Código: Selecionar todos

    FUNCTION EMI_NOTA_FISCAL()
    ******************************************
    * OBJETIVO.: Emissao da Nota Fiscal Modelo Unico
    IF SGCODNOTA = 'MAGIW'
       #define FORM_A4 5.5
       #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) )
       #define PS_SOLID   0
       #define BLACK           RGB( 0x0 ,0x0 ,0x0 )
       #define BLUE            RGB( 0x0 ,0x0 ,0x85 )
       #define GREEN           RGB( 0x0 ,0x85,0x0 )
       #define CYAN            RGB( 0x0 ,0x85,0x85 )
       #define RED             RGB( 0x85,0x0 ,0x0 )
       #define MAGENTA         RGB( 0x85,0x0 ,0x85 )
       #define BROWN           RGB( 0x85,0x85,0x0 )
       #define WHITE           RGB( 0xC6,0xC6,0xC6 )

       NF_MAGIA_W()

       RETURN
    ENDIF
    .
    .
    .
    FUNCTION NF_MAGIA_W()

    LOCAL nPrn:=1
    LOCAL aPrn:= GetPrinters()
    save screen to tela
    CLS
    IF EMPTY(aPrn)
       Alert("Nao Ha Impressoras Instaladas")
       restore screen from tela
       return
    ENDIF
    DO WHILE !EMPTY(nPrn)
         CLS
         @ 0,0 SAY 'WIN32PRN(). ESCOLHA UMA IMPRESSORA. ESC para sair.'
         @ 1,0 TO maxRow(),maxCol()
         nPrn:= ACHOICE(2,1,maxRow()-1,maxCol()-1,aPrn,.T.,,nPrn)
         IF !EMPTY(nPrn)
                 restore screen from tela
                    nf_magia(aPrn[nPrn])
         ENDIF
         exit
    ENDDO
    RETURN
    .
    .
    .
    FUNCTION NF_MAGIA(sgprinternf)
    @24,10 say 'Impressora: ' + sgprinternf
    SET DEVICE TO PRINTER
    SET PRINTER ON
    SET PRINTER TO "TESTE.PRN"
    SETPOS(0,0)
    @ prow(),1 say chr(15)  && condensado
    *? CHR..... // COMANDO ESPECIFICO PARA A IMPRESSORA PARA MUDAR PARA 1/8 O 1/6
    @ PROW()+1,00 SAY "LINHA DE IMPRESSÃO"
    SET DEVICE TO SCREEN
    SET PRINTER OFF
    SET PRINTER TO // FALTOU ESSA LINHA
    PRINTFILERAW(sgprinternf,"TESTE.PRN")
    return
    *****
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Re: Win32prn - Linhas p/polegada

Mensagem por Laudelino Scarmagnani »

Ok, Alamino Junior. Funcionou. Obrigado. Só pra desencargo de conciência: com o uso deste esquema, posso esquecer aqueles comandos NET USE LPT: ..?
Quanto ao que o Hasse comentou, fica mais lento? Pelo que entendi, o PrintFileRaw() é modo caracter e não está contido na classe Win32prn(). É isso mesmo?
De qualquer forma, este forum, mais uma vez, foi esclarecedor. O pessoal de informática dando um show! Espero, quando estiver ao meu alcanse, ajudar também e retribuir a ajuda que recebi de vocês. Obrigado!
Responder