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!