Página 1 de 1

WIN32PRN + PRINTSETUPEX() + Impressora em Rede

Enviado: 12 Dez 2007 18:17
por Luciano Bonfim
Estou usando a Win32Prn e está tudo funcionando muito bem, só näo consigo imprimir quando a impressora está na rede, só imprime quando a impressora está ligada direto no computador do cliente.

no código abaixo:

Código: Selecionar todos


local oPrinter := win32prn()
nPrn:=PRINTSETUPEX()
oPrinter:New( nPrn )
oPrinter:Landscape := formularioLandscape
oPrinter:FormType  := 9
oPrinter:Copies    := 1
oprinter:SetPrintQuality(1)

if !oPrinter:Create()
   avi_rep("Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.")
   return NIL
endif
if !oPrinter:StartDoc(nomeRelatorio)
   avi_rep("Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora")
   return NIL
endif

após o usuário selecionar uma impressora que está na rede pela funçäo PRINTSETUPEX() da HWGUI quando vou dar o comando oPrinter:Create() retorna falso entrando na mensagem de erro.

Quando a impressora está Local funciona bem.

Alguém sabe o que pode ser?

Muito Obrigado

Enviado: 12 Dez 2007 18:23
por Pablo César
Você estaria verificando o status da impressora com o PRINTSETUPEX() ? Se for e a impressora for de rede, não tem como saber se está pronta, acho eu.

Enviado: 12 Dez 2007 19:04
por Luciano Bonfim
nao, eu uso o printsetuphex() para pegar o numero da impressora:

nPrn:=PRINTSETUPEX()
oPrinter:New( nPrn )

depois testo usando a linha:

if !oPrinter:Create()

Enviado: 17 Dez 2007 08:41
por sygecom
Pablo César escreveu:Você estaria verificando o status da impressora com o PRINTSETUPEX() ? Se for e a impressora for de rede, não tem como saber se está pronta, acho eu.
Se vc estiver em um micro XP,2OOO ou SUPERIOR dentro da caixa do PrintSetup() ele aparece visualmente as impressoras prontos ou não !!! se ela não estiver pronta ele aparece a impressora como marca d'agua.

Enviado: 17 Dez 2007 08:43
por sygecom
Luciano Bonfim escreveu:nao, eu uso o printsetuphex() para pegar o numero da impressora:

nPrn:=PRINTSETUPEX()
oPrinter:New( nPrn )

depois testo usando a linha:

if !oPrinter:Create()
Segue abaixo a que estou usando e funcionando 100%

Código: Selecionar todos

**************
FUNC CHAMAIMP
**************
LOCAL cPrinterName
LOCAL aPrn    := GetPrinters()
PARA TAM,cARQ      // S=136-colunas  N=79-colunas 

IF TAM=Nil
   TAM="S"
ENDIF

If Empty(aPrn)
   OBRIGA11()  // aviso
   Return
EndIf

IF !EMPTY(cARQ)
   cFILE := cARQ
ELSE
   MsgInfo("Não foi possivel Gerar arquivo de impressão","Aviso do Sistema")
   Return
ENDIF

nPrn:=PrintSetup( @cPrinterName )

IF TAM="S"
   IF !EMPTY(nPrn)
      Imprime(cFILE,136,cPrinterName)
   ENDIF
ELSE
   IF !EMPTY(nPrn)
      Imprime(cFILE,80,cPrinterName)
   ENDIF
ENDIF
RETURN NIL

*********************************************
Function Imprime( cArq, tamrel ,cPrinter )
*********************************************
local cTexto, nLinhas, nA, cLinha    // oPrinter := win32prn():New(cPrinter)
local oPrinter := win32prn():New(cPrinter)

oPrinter:Landscape := .F.
oPrinter:FormType  := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão

oPrinter:Copies    := 1

IF FILE("res\logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
   aTamlog := 9
else
   aTamlog := 0
Endif
*cFILE2=SubStr( cArq, 1, 9 )

GERAFILE()  // gera arquivo temp
vARQ:={}
aadd( vARQ, {"LINHA","C",200,0} )
DBcreate(cFILE, vARQ,"DBFCDX")

SELE 40
USE (cFILE) new shar VIA "DBFCDX"
append from (cArq) sdf && nome completo do arquivo sdf

oPrinter:Create()
IF !oPrinter:Create()
   MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.","Aviso do Sistema")
   return NIL
ELSE
   IF !oPrinter:StartDoc("Impressao Pelo Sistema SAGI")
      MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora","Aviso do Sistema")
      Return NIL
   endif

   PrintBitMap( oPrinter )
   FOR TT=1 TO aTamlog
      oPrinter:newline()
   NEXT

   IF TAMREL=80
      oPrinter:setfont('Courier New',,11,,,,255) // Normal
   ELSE
      oPrinter:SetFont("Courier New",11,{3,-50}) // Comprimida
   ENDIF
   oPrinter:Bold(0) // Normal

   dbgotop()
   Do while !eof()
      cLinha := Linha    // Busca linha de impressao
      oPrinter:newline() // Inicia nova linha

      oPrinter:SetFont("Courier New",11,{3,-50}) // Comprimida

      oPrinter:TextOut(HB_OemToAnsi(cLinha))
      oPrinter:Bold(0) // Normal
      dbskip()

      if !eof()
         if (oPrinter:MaxRow() - 2) <= oPrinter:Prow() // Usa "oPrinter:NewPage()" para iniciar nova pagina
            oPrinter:NewPage()
            PrintBitMap( oPrinter )
            FOR TT=1 TO aTamlog
                oPrinter:newline()
            NEXT
         endif
      endif
   enddo
   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
USE
RETURN NIL

************************
FUNC PrintBitMap( oPrn )  //função para imprimir imagem do logotipo
************************
LOCAL oBMP
oBMP:= Win32BMP():new()
oBmp:loadFile( "res\logo.bmp" )
oBmp:Draw( oPrn,  { 200,200,500,500 } )
oBMP:Destroy()
RETURN