Boa tarde
colocaram uma epson lx-350 USB em um cliente
se mando imprimir usando PrintFileRaw NAO sai NADA
se abro um bloco de notas e mando imprimir sai e BEM rápido
preciso fazer alguma configuração para imprimir um arquivo TEXTO para uma impressora Epson Lx-350 usando o comando PrintFileRaw ?
desde já agradeço
Paiva
PrintFileRaw
Moderador: Moderadores
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8221
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 6 vezes
- Curtiram: 1 vez
Re: PrintFileRaw
Olá!
Coloca sua rotina de impressão para analise.
LX350 imprime "raw file".
Já usei muito isso.
Coloca sua rotina de impressão para analise.
LX350 imprime "raw file".
Já usei muito isso.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
pauloa1
- Usuário Nível 3

- Mensagens: 242
- Registrado em: 25 Jun 2008 14:57
- Localização: Augusto Pestana-RS
Re: PrintFileRaw
O problema ocorre porque a função PrintFileRaw() envia o arquivo diretamente para o spool do Windows em modo bruto (RAW),
mas as impressoras USB não possuem uma porta nativa mapeada (como LPT1 ou COM1) para receber comandos de texto puros
sem um direcionamento explícito. Quando você imprime pelo Bloco de Notas, o Windows usa o driver gráfico da Epson para renderizar a imagem da página, e é por isso que funciona.
Para resolver isso e fazer o PrintFileRaw()
funcionar no xHarbour via USB, você precisa mapear a impressora USB para uma porta virtual LPT ou usar o caminho de rede (UNC) do compartilhamento.Veja abaixo os passos e as alternativas para configurar e resolver o problema:
1. Compartilhar a Impressora e Mapear a Porta (Recomendado)Este é o método mais robusto para sistemas legados xHarbour conversarem com impressoras USB em modo texto.
Passo 1: No Windows do cliente, vá em Dispositivos e Impressoras.
Passo 2: Clique com o botão direito na Epson LX-350, selecione Propriedades da Impressora e vá na aba Compartilhamento.
Passo 3: Marque a opção Compartilhar esta impressora e dê um nome curto e sem espaços (ex: EpsonLX).Passo 4: Abra o Prompt de Comando (CMD) como Administrador e execute o comando para mapear o compartilhamento para uma porta LPT virtual:cmdNET USE LPT1: \\127.0.0.1\EpsonLX /PERSISTENT:YES
Resposta da IA.
mas as impressoras USB não possuem uma porta nativa mapeada (como LPT1 ou COM1) para receber comandos de texto puros
sem um direcionamento explícito. Quando você imprime pelo Bloco de Notas, o Windows usa o driver gráfico da Epson para renderizar a imagem da página, e é por isso que funciona.
Para resolver isso e fazer o PrintFileRaw()
funcionar no xHarbour via USB, você precisa mapear a impressora USB para uma porta virtual LPT ou usar o caminho de rede (UNC) do compartilhamento.Veja abaixo os passos e as alternativas para configurar e resolver o problema:
1. Compartilhar a Impressora e Mapear a Porta (Recomendado)Este é o método mais robusto para sistemas legados xHarbour conversarem com impressoras USB em modo texto.
Passo 1: No Windows do cliente, vá em Dispositivos e Impressoras.
Passo 2: Clique com o botão direito na Epson LX-350, selecione Propriedades da Impressora e vá na aba Compartilhamento.
Passo 3: Marque a opção Compartilhar esta impressora e dê um nome curto e sem espaços (ex: EpsonLX).Passo 4: Abra o Prompt de Comando (CMD) como Administrador e execute o comando para mapear o compartilhamento para uma porta LPT virtual:cmdNET USE LPT1: \\127.0.0.1\EpsonLX /PERSISTENT:YES
Resposta da IA.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8221
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 6 vezes
- Curtiram: 1 vez
Re: PrintFileRaw
Olá!
Tá errada a resposta da IA.
Por isso é bom ver o código.
Tá errada a resposta da IA.
Por isso é bom ver o código.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Re: PrintFileRaw
Itamar, bom dia
gero um txt do relatório e depois uso o comando
PrintFileRaw(pprt,a,pprograma)
pprt = nome da impressora
a = arquivo texto tipo: \usr\sfa\paiva.txt
pprograma = nome do programa CRAPEDA
SEMPRE usei assim N anos
derrepente não quer funcionar
Obrigado
gero um txt do relatório e depois uso o comando
PrintFileRaw(pprt,a,pprograma)
pprt = nome da impressora
a = arquivo texto tipo: \usr\sfa\paiva.txt
pprograma = nome do programa CRAPEDA
SEMPRE usei assim N anos
derrepente não quer funcionar
Obrigado
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8221
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 6 vezes
- Curtiram: 1 vez
Re: PrintFileRaw
Olá!
Pois é.
Ou não está achando a impressora ou o arquivo, se antes funcionava ?
Aqui sempre assim e sempre funcionou para as matriciais, na USB.
Tenta assim -> win_PrinterGetDefault() (coloque ela como default ANTES! Lá no gerenciador de impressão.)
Agora se não for de forma nenhuma, vc vai precisar usar a classe WIN_PRN é a forma gráfica, mais lenta e vai precisar manipular fonte, etc.. Ai já são outros 500(Quinhentos)...
Tem a CLASSE do José Quintas que transforme em PDF.
No meu caso eu uso HTML e sempre exibir meus relatórios em TELA a impressão fica a disposição dos navegadores.
Pois é.
Ou não está achando a impressora ou o arquivo, se antes funcionava ?
Aqui sempre assim e sempre funcionou para as matriciais, na USB.
Tenta assim -> win_PrinterGetDefault() (coloque ela como default ANTES! Lá no gerenciador de impressão.)
Código: Selecionar todos
Function Imprime(cArq,cPrint,cTit)
#ifdef __PLATFORM__WINDOWS
Local oPrn, aPrn:=WIN_PRINTERLIST()
hb_default(@cPrint,win_PrinterGetDefault())
hb_default(@cTit,"PEDIDO")
If Empty(cArq)
hwg_Msginfo('Informe algo p/ imprimir.')
Return .F.
EndIf
If empty(aPrn)
hwg_Msginfo('Não há impressoras instaladas')
Return .F.
EndIf
//hwg_msginfo( "win_printerStatus(): " + hb_ntos( win_printerStatus(cPrint) ) )
nRet := Win_PrintFileRaw(cPrint,cArq,cTit)
if nRet < 1
cMsg := 'Erro Imprimindo: '
SWITCH nRet
CASE -1
cMsg += "Parâmetro inválido passado" ; EXIT
CASE -2
cMsg += "WinAPI OpenPrinter() Falha na chamada" ; EXIT
CASE -3
cMsg += "WinAPI StartDocPrinter() Falha na chamada" ; EXIT
CASE -4
cMsg += "WinAPI StartPagePrinter() Falha na chamada" ; EXIT
CASE -5
cMsg += "WinAPI malloc() of memory failed" ; EXIT
CASE -6
cMsg += "Arquivo " + cArq + " não Localizado" ; EXIT
//DEFAULT
// cMsg += cFile + " PRINTED OK!!!"
END
hwg_Msgstop(cMsg)
EndIf
#endif
RETURN .T.
Código: Selecionar todos
Function PrintWinPrn(cArq,cPrint)
#ifdef __PLATFORM__WINDOWS
Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0
if empty(aPrn)
hwg_Msginfo('Não há impressoras instaladas')
return .f.
endif
If cPrint == Nil
cPrint := win_PrinterGetDefault()
EndIf
oPrn := win_prn():New(cPrint)
oPrn : LandScape := .F.
oPrn : FormType := WIN_DMPAPER_A4
oPrn : Copies := 1
oPrn : CharSet(255)
//oPrn : setfont('Courier New',,10,{ 4, -70 },,,255)
oPrn : SetFont( "Lucida Console", 8, { 4, -70 } )
If !oPrn:Create()
hwg_Msginfo("Não foi criado documento")
Return Nil
EndIf
If !oPrn:startDoc("Imprimindo Documento")
hwg_Msginfo("Erro na Impressora")
Return Nil
EndIf
HB_CDPSelect("PT850")
//setprc(7,0)
cText := memoread(cArq)
nLinh := mlcount(cText)
oPrn:NewLine()
oPrn:NewLine()
For n := 1 to nLinh
oPrn:Textout(WIN_ansitooem(memoline(cText,,n)),.t.)
Next
oPrn:EndDoc()
HB_CDPSelect( "PTISO")
#endif
Return .t.
No meu caso eu uso HTML e sempre exibir meus relatórios em TELA a impressão fica a disposição dos navegadores.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
