Página 1 de 3

Win32prn - Linhas p/polegada

Enviado: 03 Ago 2009 20:41
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?

Re: Win32prn - Linhas p/polegada

Enviado: 04 Ago 2009 08:49
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...

Re: Win32prn - Linhas p/polegada

Enviado: 04 Ago 2009 12:38
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?

Re: Win32prn - Linhas p/polegada

Enviado: 04 Ago 2009 19:01
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.

Re: Win32prn - Linhas p/polegada

Enviado: 04 Ago 2009 19:12
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.

Re: Win32prn - Linhas p/polegada

Enviado: 04 Ago 2009 21:11
por Laudelino Scarmagnani
Estou usando a Impressora matricial Citzen GSX-190S.

Re: Win32prn - Linhas p/polegada

Enviado: 05 Ago 2009 00:31
por Maligno
Essa é da boa! :)
E provavelmente imprimirá no mod RAW sem problema.

Re: Win32prn - Linhas p/polegada

Enviado: 05 Ago 2009 07:03
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 !

Re: Win32prn - Linhas p/polegada

Enviado: 05 Ago 2009 12:33
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.

Re: Win32prn - Linhas p/polegada

Enviado: 05 Ago 2009 12:59
por DLZ
Bahh cara.. nunca vi disso... mas estou desconfiado dessa extensão .prn ai ! tenta trocar para .txt ..
sei la.. é só um chute !

Re: Win32prn - Linhas p/polegada

Enviado: 05 Ago 2009 18:12
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

Re: Win32prn - Linhas p/polegada

Enviado: 05 Ago 2009 22:00
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.

Win32prn - Linhas p/polegada

Enviado: 06 Ago 2009 08:44
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....

Re: Win32prn - Linhas p/polegada

Enviado: 06 Ago 2009 11:05
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
    *****

Re: Win32prn - Linhas p/polegada

Enviado: 06 Ago 2009 21:10
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!