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