PrintFileRaw

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

cpaiva
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 18 Nov 2025 10:22
Curtiram: 1 vez

PrintFileRaw

Mensagem por cpaiva »

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
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8221
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: PrintFileRaw

Mensagem por Itamar M. Lins Jr. »

Olá!
Coloca sua rotina de impressão para analise.
LX350 imprime "raw file".
Já usei muito isso.
Saudações,
Itamar M. Lins Jr.
pauloa1
Usuário Nível 3
Usuário Nível 3
Mensagens: 242
Registrado em: 25 Jun 2008 14:57
Localização: Augusto Pestana-RS

Re: PrintFileRaw

Mensagem por pauloa1 »

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.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8221
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: PrintFileRaw

Mensagem por Itamar M. Lins Jr. »

Olá!
Tá errada a resposta da IA.

Por isso é bom ver o código.
Saudações,
Itamar M. Lins Jr.
cpaiva
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 18 Nov 2025 10:22
Curtiram: 1 vez

Re: PrintFileRaw

Mensagem por cpaiva »

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
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8221
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: PrintFileRaw

Mensagem por Itamar M. Lins Jr. »

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.)

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.
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)...

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.
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.
Saudações,
Itamar M. Lins Jr.
Responder