Impressão com Imagem em Xharbour - win32prn

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

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Impressão com Imagem em Xharbour - win32prn

Mensagem por sygecom »

Um exemplo simples de como chamar as impressoras instalada no windows para xHarbour.
É soh gerar um simples TXT com nome de TEXTO.TXT e no final fazer achamada de :

Código: Selecionar todos

Func Main
arq="c:\imp.txt"
if !file(arq)
   arqh=fcreate(arq,0)
   if !arqh>0
      quit
   endif
   txt="IMP ABERTO"
   txt_t=fwrite(arqh,txt)
   if !txt_t=len(txt)
      quit
   endif
   fclose(arqh)
endif

janela2=fopen(arq,18)
if !janela2>0
   quit
endi
rele arq, arqh, janela2, txt, txt_t
IMPRES()
Return Nil

FUNC IMPRES
LOCAL aPrn := PRINTERPORTTONAME( "PDF", .T. )   // usa a impressora PDF criator para imprimir via PDF
IF EMPTY( PRINTERPORTTONAME( "PDF", .T. ) )
   aPrn := GETDEFAULTPRINTER() //  caso a PDFCREATOR não exista ele vai pegar a impressora padrão
ENDIF
IF !FILE("TEXTO.TXT")
   RETURN
ELSE
   inkey(5)
   cFILE := "C:\LEO"+ ALLTRIM( STR( RANDOM(9999) ))+".TXT"
   COPY FILE TEXTO.TXT TO (cFILE)
   DELETE FILE TEXTO.TXT
ENDIF

If Empty(aPrn)
   alert("Não tem Impressora Instalada")
else
   Imprime(cFILE,aPrn)
EndIf
DELETE FILE C:\TEXTO.DBF
RETURN

FUNC Imprime( cArq,cPrinter )
local cTexto, nLinhas, nA, cLinha
local oPrinter := win32prn():New(cPrinter)
oPrinter:Landscape := .F.
oPrinter:FormType  := 9
oprinter:SetPrintQuality(-1)
oPrinter:Copies    := 1

IF FILE("logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
   aTamlog := 9
else
   aTamlog := 0
endif

DELETE FILE C:\TEXTO.DBF
vARQ:={}
aadd( vARQ, {"LINHA","C",200,0} )
DBcreate("C:\TEXTO.DBF", vARQ)

SELE 40
USE C:\TEXTO ALIAS TELA EXCL
SELE TELA
append from (cArq) sdf

IF !oPrinter:Create()
   return NIL
ELSE
   IF ! oPrinter:StartDoc("SAGI")
      return NIL
   endif

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

   oPrinter:SetFont("Courier New",11,{3,-50})
   oPrinter:Bold(0)
   SELE TELA
   dbgotop()
   Do while !eof()
      cLinha := Tela->Linha
      oPrinter:newline()
      oPrinter:SetFont("Courier New",11,{3,-50})
      oPrinter:TextOut(cLinha)
      oPrinter:Bold(0)
      dbskip()
      if !eof()
         if (oPrinter:MaxRow() - 2) <= oPrinter:Prow()
            oPrinter:NewPage()   // novo pagina
            PrintBitMap( oPrinter )  // imprimindo o logotipo de novo
            FOR TT=1 TO aTamlog
               oPrinter:newline()
            NEXT
         endif
      endif
   enddo
   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
SELE TELA
USE
RETURN NIL

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

FUNC Random( nLimite )  // função para criar um arquivo temporario
  static nGuarda:= 1
  local I
  local nResult
  if ValType( nLimite ) # [N]
    nLimite:= 100
  endif
  I:= Seconds()
  while nLimite > I
    I:= I * 100 +Seconds()
  enddo
  nGuarda:= (nGuarda +I) / (nResult:= nGuarda * I % nLimite +1)
  nResult:= Int( nResult )
return nResult

FUI......
Editado pela última vez por sygecom em 25 Jul 2007 13:41, em um total de 1 vez.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Desculpa mas dei uma alterada no post para implementar impressão com imagem usando a Classe Win32Prn.

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem por Grings »

Sygecom, baixei o fonte, compilei mas não funcionou. Vc chegou a testar ? Será que fiz algo errado ?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Eu uso isso em sistema que estão indo no clipper ....vc compilou e deu algum erro ?
De uma olhada nesse que esta no meu link !!!
http://www.sygecom.com.br/xharbour/usb.zip

Qual versão do xharbour vc esta usando ?

Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
clodoaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 20 Ago 2007 18:59
Localização: Teresina

Mensagem por clodoaldo »

Sygecom!

Quero testar sua rotina mais num to conseguindo baixar o arquivo.
At. Clodoaldo Monteiro
MSN: clodoaldosmt@hotmail.com
Fone: (86)3233-0053
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Clodoaldo, não tem que baixar nd ...no link era a mesma coisa que no post acima !!!

Compile esse CODIGO FONTE acima no xharbour puro !! e vai funcionar...

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder