Win32prn - Linhas p/polegada
Moderador: Moderadores
-
Laudelino Scarmagnani
- Usuário Nível 3

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Win32prn - Linhas p/polegada
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?
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

- Mensagens: 184
- Registrado em: 09 Jun 2008 10:09
- Localização: Ibirubá - RS - Brasil
Re: Win32prn - Linhas p/polegada
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...
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

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
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?
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

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
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
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.
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!
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

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
Essa é da boa! 
E provavelmente imprimirá no mod RAW sem problema.
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!
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

- Mensagens: 184
- Registrado em: 09 Jun 2008 10:09
- Localização: Ibirubá - RS - Brasil
Re: Win32prn - Linhas p/polegada
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 !
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

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
Tenho o seguinte codigo:
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.
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
*****---
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

- Mensagens: 184
- Registrado em: 09 Jun 2008 10:09
- Localização: Ibirubá - RS - Brasil
Re: Win32prn - Linhas p/polegada
Bahh cara.. nunca vi disso... mas estou desconfiado dessa extensão .prn ai ! tenta trocar para .txt ..
sei la.. é só um chute !
sei la.. é só um chute !
-
Laudelino Scarmagnani
- Usuário Nível 3

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
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
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

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
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.
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Win32prn - Linhas p/polegada
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....
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)
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)
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Win32prn - Linhas p/polegada
À 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
MySQL c/ SQLRDD
HwGui + GTWVG
-
Laudelino Scarmagnani
- Usuário Nível 3

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Win32prn - Linhas p/polegada
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!
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!
