Page 1 of 1

Win32Prn() o win_Prn() Ayuda..?

PostPosted: Sun Sep 13, 2015 10:30 pm
by ruben Dario
Saludos al Forum

Usando Win32Prn() o win_Prn()

Tengo esta pregunta genero un reporte , al ejecutar me solicita el nombre del archivo PDF, como hago para que no me pida el nombre y lo tome de una variable ya definida donde tiene el nombre del Archivo PDF. Gracias.

La otra pregunta , despues de generarlo necesito abrirlo. El problema que tengo es que si el reporte es grande, cuando trata de abrilo, da error porque no ha terminado de generarlo ya que esta en proveco, como controlo que ya termino de generarlo y poderlo abrir.

ShellExecute( 0, "Open", ...., archivo )



Code: Select all  Expand view

         cFile := "Microsoft Print to PDF"
         #ifdef __XHARBOUR__
           oPrn := Win32Prn():new(cFile)
         #else
           oPrn := win_Prn():new(cFile)
         #endif
         oPrn:Landscape:= if(Hpapel=1,.T.,.F.)
         oPrn:FormType := 9 //FORM_A4
         oPrn:Copies   := 1
         If !oPrn:Create()
            Alert("Printer No Creada")
            return
         Else
          IF !oPrn:startDoc('Win32Prn(Dococumento Printer)')
             Alert("StartDoc() A Fallado")
             return
          Else
          Endif
         Endif


 

Re: Win32Prn() o win_Prn() Ayuda..?

PostPosted: Mon Sep 14, 2015 2:26 pm
by karinha
Hola, mira si ayuda:

Mira también: https://github.com/MRonaldo/MR-Tools/downloads

Code: Select all  Expand view

**************************************************
Function Imprime( cArq, tamrel ,cPrinter, cCopias)
**************************************************
local cTexto, nLinhas, nA, cLinha, oBMP
#ifdef __XHARBOUR__
 local oPrinter := win32prn():New(cPrinter)
#else
 local oPrinter := win_prn():New(cPrinter)
#endif
cText := memoread( cArq )
oPrinter:Landscape:= .F.
oPrinter:FormType:= 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies:=cCopias

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 SCM")
      MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora","Aviso do Sistema")
      Return NIL
   endif

   IF File("res\logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
      #ifdef __XHARBOUR__
       oBMP:= Win32BMP():new()
      #else
       oBMP:= Win_BMP():new()
      #endif
      oBmp:loadFile( "res\logo.bmp" )
      oBmp:Draw( oPrinter,  { 15,15,60,60 } )
      aTamlog := 9
   else
      aTamlog := 2
   endif

   FOR TT=1 TO aTamlog
      oPrinter:newline()
   NEXT
   //oPrinter:CharSet( 255 )

   IF TAMREL=80
      oPrinter:setfont('Courier New',,12,,,,255) // Normal
      nLines2 := 85
   ELSE
      oPrinter:SetFont("Courier New",13,{3,-50},0,.F.,.F.) // Comprimida
      nLines2 := 150
   ENDIF
   oPrinter:Bold(0) // Normal
*   oPrinter:newline() // Inicia nova linha

   nLines := mlcount( cText, nLines2 )
   for nA := 1 to nLines
      cLine := memoline( cText, nLines2, nA, 1, .F. )
      If Left(AllTrim(cLine),1)==Chr(12) //SALTO DA PAGINA
         oPrinter:NewPage()
         IF FILE("res\logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
            #ifdef __XHARBOUR__
             oBMP:= Win32BMP():new()
            #else
             oBMP:= Win_BMP():new()
            #endif
            oBmp:loadFile( "res\logo.bmp" )
            oBmp:Draw( oPrinter,  { 15,15,60,60 } )
            aTamlog := 9
         else
            aTamlog := 2
         endif
      endif

      oPrinter:TextOut( cLine, .T. )
      oPrinter:Bold(0) // Normal

      if (oPrinter:MaxRow()-2 ) <= oPrinter:Prow()
         oPrinter:NewPage()
         IF FILE("res\logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
            #ifdef __XHARBOUR__
             oBMP:= Win32BMP():new()
            #else
             oBMP:= Win_BMP():new()
            #endif
            oBmp:loadFile( "res\logo.bmp" )
            oBmp:Draw( oPrinter,  { 15,15,60,60 } )
            aTamlog := 9
         else
            aTamlog := 2
         endif

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

   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
RETURN NIL