Página 1 de 2

harbour boleto

Enviado: 06 Ago 2012 22:17
por Abel
ola pessoal,
tenho diversos problemas que to aos poucos resolvendo um a um desde que mudei de clipper para o harbour. Um dos problemas é quanto a cobranca, pois faco boletos pelo BB, carteira 17 19, (banco emite, banco envia) e o maior problema é o cliente nao receber ou ele ter o CNPJ cadastrado do DDA (novo servico que os banco inventaram que quando ativo no CNPJ os bancos nao emitem boletos de papel para o CNPJ) pois o mesmo autorizado que fosse eletronico. Muitas vezes o cliente nem sabe o que é DDA.

Minha ideia, era o proprio sistema abrir uma opcao "gerar boleto", o proprio cliente emite na impressora dele, e paga, e eu controlo isso pelo arquivo de retorno.
Ja sei que vou ter que usar outra carteira junto ao banco...e configurar o meu proprio sistema para controlar o retorno.

Minha duvida, é como emitir o boleto atraves do meu sistema. Li varias postagens sobre o Harbour Boleto, mas nao achei ainda onde fazer o download e por onde comecar meus testes ...

Se alguem puder me dar algumas dicas, agradeço.
ABEL

harbour boleto

Enviado: 07 Ago 2012 07:42
por sygecom
Olá Abel,
Você terá que baixar o HarbourBoleto direto do CVS usando o TORTOISE CVS
Endereço para ser usado no Tortoise
:pserver:anonymous@harbourboleto.cvs.sourceforge.net:/cvsroot/harbourboleto

Ou no link abaixo(o correto é baixar usando o CVS)
http://www.fivewin.com.br/Dicas/881xhbboleto.zip

harbour boleto

Enviado: 07 Ago 2012 22:25
por Abel
sygcom, baixei pelo link porque nao sei o que é tortoise cvs.
é a primeira vez que vejo este termo...pois sou novo no harbour, pois apenas usava o clipper e nao tinha a minima noçao do que o harbour era capaz.

vc pode me passar algumas dicas de como usar o tortoise, e o quq é cvs ?

quanto ao download que fiz, pelo que li nos posts e entendi, se eu criar o bol.ini e rodar o hboleto.exe ele gera o boleto de acordo com as configuracoes do bol.ini em html.
fiz inclusive um teste de 1,00 e paguei para ver se da certo.. rs rs

por enquanto, valeu !!!

ABEL

harbour boleto

Enviado: 09 Ago 2012 12:32
por Abel
sygecom, procurei na net e baixei o TORTOISE CVS

mas nao consegui utiliza-lo para baixar o harbour boleto conforme vc disse no post anterior.

pelo link q baixei o harbour boleto, fiz diversos testes e gera o boleto normal pelo bol.ini, o problema é quando faco pelo BB banco 001, meu convenio é de 7 digitos e ele nao esta adaptado para montar o nosso numero e nem o codigo barra de acordo com as especificacoes do BB. tentei alterar e compilar, mas tb nao consegui compilar pelo harbour 3.1 nigthy.

Abel

harbour boleto

Enviado: 10 Ago 2012 07:28
por lucimauro
Eu tambem tenho o mesmo problema com harbour boleto,ate ja compilei com harbour 3.0 + MinGw, so que não gera o boleto completo e quando vou visualizar no explorer pede para ajustar as margens.

Espero que algun possa ajudar a egente.

harbour boleto

Enviado: 10 Ago 2012 09:48
por Imatech
Olá Abel !


Para BB: Convenio com 7 digitos e NossoNumero com 18+DV

Ajustar: oBoleto.prg

Código: Selecionar todos

*------------------------------------------------------------------*
* Ajustes/Modificações por:
* M., Ronaldo 10/08/2012
*------------------------------------------------------------------*

...
METHOD Execute() CLASS oBoleto
...
   LOCAL cAux := ''
...
      CASE ::cCodBco == "001" // Brasil
         IF LEFT( cCarteira, 2) $ "(16#18)"
           *------------------------------------------------------------------*
           * COBRANÇA SEM REGISTRO: 18 Digitos para NN
           * Autor: M., Ronaldo 10/08/2012
           *------------------------------------------------------------------*
           cAux := LEFT( ::cCDPF, 7 )
           ::cCDPF := STRZERO( VAL( LEFT( cAux, 6 ) ), 6 )

           cAux  := ::cCDPF + SUBSTR( cAux, 7, 1 )
           ::cNossoNumero := cAux + STRZERO( VAL( ::cNossoNumero ), 10 )

           cAux := '-' + DC_Mod11( ::cCodBco, 9, .F., ::cNossoNumero, .F.)
           cNsNm := ::cNossoNumero + cAux

           cAux := REPL( '0', 6)
           cCpoLivre := cAux + ::cNossoNumero + ::cCarteira //

         ELSE
           *------------------------------------------------------------------*
           * OUTRAS: 11 Digitos para NN
           *------------------------------------------------------------------*
            ::cCDPF        := STRZERO(VAL(::cCDPF),6)
            cCarteira      := STRZERO(VAL(cCarteira),2)
            ::cNumCC       := STRZERO(VAL(::cNumCC),8)
            ::cNossoNumero := STRZERO(VAL(::cNossoNumero),5)
            ::cDGNN        := DC_Mod11(::cCodBco,9,.F.,::cCDPF+::cNossoNumero, .F.)
            cNsNm          := TRANSFORM(::cCDPF+::cNossoNumero,"@R 99.999.999.999")+"-"+::cDGNN
            cCpoLivre      := ::cCDPF+::cNossoNumero+cNumAgencia+::cNumCC+cCarteira
         ENDIF
...



Impressão HTML
Ajustar: htmlprint.prg

Código: Selecionar todos

*------------------------------------------------------------------*
* Ajustes/Modificações por:
* M., Ronaldo 10/08/2012
*------------------------------------------------------------------*
#include "hbclass.ch"
#include "common.ch"

#command DEFAULT <param> := <val> [, <paramn> := <valn> ];
=> ;
         <param> := IIF(<param> = NIL, <val>, <param> ) ;
         [; <paramn> := IIF(<paramn> = NIL, <valn>, <paramn> ) ]

#DEFINE OLECMDID_PRINT 6
#DEFINE OLECMDEXECOPT_PROMPTUSER 1
#DEFINE LECMDEXECOPT_DONTPROMPTUSER 2

#DEFINE OLECMDF_SUPPORTED 1
#DEFINE OLECMDF_ENABLED 2

#DEFINE READYSTATE_COMPLETE 4
#DEFINE MAX_TIME 30

#define HKEY_LOCAL_MACHINE  0
#define HKEY_CLASSES_ROOT   1
#define HKEY_CURRENT_USER   2
#define HKEY_CURRENT_CONFIG 3

#ifndef HKEY_LOCAL_MACHINE
#define HKEY_LOCAL_MACHINE  4
#endif

#define HKEY_USERS          5

#define VERSION             "1.0.01"

STATIC IEHeader
STATIC IEFooter
STATIC IEMarginBottom
STATIC IEMarginLeft
STATIC IEMarginRight
STATIC IEMarginTop
STATIC IEKey  := "Software\Microsoft\Internet Explorer\PageSetup"

STATIC WB
STATIC PR

STATIC HP

//--------------------------------------------------------------------------------------------//
FUNCTION PrintHTML(cURL,cPrinter,lPrevIew,lPromptPrint,lPrintHtml,cHeader,cFooter)

   DEFAULT lPrintHtml   := .T.
   DEFAULT lPreview     := .F.
   DEFAULT lPromptPrint := .F.
   DEFAULT cPrinter     := Win_PrinterGetDefault()
   DEFAULT cFooter      := ""
   DEFAULT cHeader      := ""

   IF (HP==NIL)
      HP := HTMLPRINT():NEW()
   ENDIF

   HP:PrintUrl     := cURL
   HP:lPreview     := lPreview
   HP:lPromptPrint := lPromptPrint
   HP:lPrintHtml   := lPrintHtml
   HP:PrinterName  := cPrinter
   HP:Footer       := cFooter
   HP:Header       := cHeader

   HP:Print()
   HP:Close()

RETURN .T.
//--------------------------------------------------------------------------------------------//

CLASS HTMLPRINT

   DATA PrinterName
   DATA Orientation            //TO DO  to implement
   DATA Copies                 //TO DO  to implement
   DATA Key  PROTECTED         //TO DO  to implement
   DATA Header
   DATA Footer
   DATA BackGround             //TO DO  to implement
   DATA MarginButtom
   DATA MarginLeft
   DATA MarginTop
   DATA MarginRight
   DATA MarginMeasure          //TO DO  to implement
   DATA PaperSize              //TO DO  to implement
   DATA PrintUrl

   DATA lPreview
   DATA lPromptPrint
   DATA lPrintHtml

   DATA PrintDefault INIT Win_PrinterGetDefault() PROTECTED

   METHOD New() CONSTRUCTOR
   METHOD Print()
   METHOD savePrintSetup() PROTECTED
   METHOD restorePrintSetup() PROTECTED
   METHOD changePrintSetup PROTECTED
   METHOD Close()

ENDCLASS

//--------------------------------------------------------------------------------------------//

METHOD New() CLASS HTMLPRINT

   StartObjectWs()
   StartObjectPr()

   ::savePrintSetup()

RETURN Self

//--------------------------------------------------------------------------------------------//
METHOD Print() CLASS HTMLPRINT

   LOCAL lnStarted        && Seconds started for the document
   LOCAL lnWaiting   := 0 && Seconds waiting for the document to load

   DEFAULT ::PrinterName  := ::PrintDefault
   DEFAULT ::Orientation  := 2
   DEFAULT ::Copies       := 1
   DEFAULT ::Footer       := ""
   DEFAULT ::Header       := ""
   DEFAULT ::MarginButtom  := IEMarginBottom
   DEFAULT ::MarginLeft    := IEMarginLeft
   DEFAULT ::MarginTop     := IEMarginTop
   DEFAULT ::MarginRight   := IEMarginRight
   DEFAULT ::MarginMeasure := 1
   DEFAULT ::PaperSize     := 9

   DEFAULT ::lPreview     := .F.
   DEFAULT ::lPromptPrint := .F.
   DEFAULT ::lPrintHtml   := .T.

   lnStarted := SECONDS()

   IF ::PrintUrl != NIL

      // Configura impressora  seta impressora como padrão
      IF ::lPrintHtml
            IF ::PrintDefault # ::PrinterName
               PR:SetDefaultPrinter(::PrinterName)
            ENDIF
      ENDIF

      ::changePrintSetup()

      WB:Visible    := ::lPreview
      WB:Navigate(::PrintUrl)

      WHILE WB:Readystate # READYSTATE_COMPLETE .OR. lnWaiting >= MAX_TIME
         lnWaiting = Seconds() - lnStarted
      ENDDO

      WHILE WB:QueryStatusWB(OLECMDID_PRINT) != (OLECMDF_SUPPORTED + OLECMDF_ENABLED)
      ENDDO

      // Imprime ou Não
      IF ::lPrintHtml
        WB:ExecWB(OLECMDID_PRINT, If(::lPromptPrint, OLECMDEXECOPT_PROMPTUSER, LECMDEXECOPT_DONTPROMPTUSER) )
      ENDIF

   ELSE
      RETURN .F.
   ENDIF

RETURN .T.

//--------------------------------------------------------------------------------------------//
METHOD savePrintSetup() CLASS HTMLPRINT

   // Salva o que está definido como padrão
   IEFooter       := getRegistry( HKEY_CURRENT_USER , IEKey, "footer")
   IEHeader       := getRegistry( HKEY_CURRENT_USER , IEKey, "header")
   IEMarginBottom := getRegistry( HKEY_CURRENT_USER , IEKey, "margin_bottom")
   IEMarginLeft   := getRegistry( HKEY_CURRENT_USER , IEKey , "margin_left")
   IEMarginRight  := getRegistry( HKEY_CURRENT_USER , IEKey , "margin_right")
   IEMarginTop    := getRegistry( HKEY_CURRENT_USER , IEKey, "margin_top")

RETURN NIL

//--------------------------------------------------------------------------------------------//
METHOD changePrintSetup() CLASS HTMLPRINT

   SetRegistry(HKEY_CURRENT_USER , IEKey , "footer",::Footer)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "header",::Header)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_bottom",::MarginButtom)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_left",::MarginLeft)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_right",::MarginRight)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_top",::MarginTop)

RETURN .T.

//--------------------------------------------------------------------------------------------//
METHOD restorePrintSetup() CLASS HTMLPRINT

   IF ( Empty(IEFooter) .Or. IEFooter == NIL )
      IEFooter := "&u&b&d"
   ENDIF

   IF ( Empty(IEHeader) .Or. IEFooter == NIL )
      IEHeader := "&w&bPage &p of &P"
   ENDIF

   SetRegistry(HKEY_CURRENT_USER , IEKey , "footer",IEFooter)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "header",IEHeader)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_bottom",IEMarginBottom)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_left",IEMarginLeft)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_right",IEMarginRight)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_top",IEMarginTop)

RETURN .T.

//--------------------------------------------------------------------------------------------//
METHOD close() CLASS HTMLPRINT

   // Restaura impressora se for o caso.
   PR:SetDefaultPrinter(::PrintDefault)
   ::restorePrintSetup()

   WB := NIL
   PR := NIL
   HP := NIL

RETURN NIL

//--------------------------------------------------------------------------------------------//
STATIC FUNCTION startObjectWS()

   TRY
      WB    := GetActiveObject( "InternetExplorer.Application" )
   CATCH
      TRY
         WB := CreateObject( "InternetExplorer.Application" )
      CATCH
         RETURN Throw(ErrorNew( "HTMLPrint", 0, 0, ProcName(),"ERROR! IExplorer not avialable. [" + Ole2TxtError()+ "]" ))
      END
   END

RETURN .T.

//--------------------------------------------------------------------------------------------//
STATIC FUNCTION startObjectPR()

   TRY
     PR := GetActiveObject("WScript.Network")
   CATCH
     TRY
       PR := CreateObject("WScript.Network")
     CATCH
       RETURN Throw(ErrorNew( "HTMLPrint", 0, 0, ProcName(),"ERROR! Printer network not avialable. [" + Ole2TxtError() + "]"))
     END
   END

RETURN .T.

/*
EOF
*/

/*
&w Window title
&u Page address (URL)
&d Date in short format specified by Regional Settings in Control Panel
&D Date in long format specified by Regional Settings in Control Panel
&t Time in the format specified by Regional Settings in Control Panel
&T Time in 24-hour format
&p Current page number
&P Total number of pages
&& A single ampersand (&)
&b The text immediately following these characters as centered
&b&b The text immediately following the first "&b" as centered, and the text following the second "&b" as right-justified
*/

//---------------------------------------------------------------------------//
/*
FUNCTION TWEB()

   StartObjectWs()

   PUBLICVAR("OIE")

   OIE := getWB()

RETURN OIE
*/
//---------------------------------------------------------------------------//
FUNCTION getHP()
RETURN HP

//---------------------------------------------------------------------------//
FUNCTION getWB
RETURN WB

//--------------------------------------------------------------------------//
FUNCTION HtmlPrintVersion()
RETURN VERSION


harbour boleto

Enviado: 10 Ago 2012 12:00
por sygecom
Eu uso com xHarbour, com algumas alterações que fizemos para ter carteira para o Sicred e outras mais que não deve fazer muita diferença para o que está no CVS.

harbour boleto

Enviado: 10 Ago 2012 16:28
por JoséQuintas
Acabei achando na internet um jeito de colocar as barras branca e preta dentro do html.
Não sei se pode interessar pro Harbour boleto.
Fica interessante se for mandar o html por email.

<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABQAQMAAAAa6XZvAAAAA1BMVEUAAACnej3aAAAADElEQVR42mNgGFkAAADwAAE4aVpRAAAAAElFTkSuQmCC width=3 height=50 border=0>
<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABQAQMAAAAa6XZvAAAAA1BMVEX///+nxBvIAAAADElEQVR42mNgGFkAAADwAAE4aVpRAAAAAElFTkSuQmCC width=3 height=50 border=0>

harbour boleto

Enviado: 13 Ago 2012 20:26
por Abel
valeu imatech,

apos entrar em contato com o BB suporte, me mandaram o manual e eu consegui montar o codigo para carteira 18. (praticamente igual o seu).

estou a uma semana "brincando com os fontes do harbour boleto", ja consigo gerar o boleto em htm, e inclusive ja paguei um boleto teste, so nao consegui receber ainda o retorno do banco. (to resolvendo com o suporte deles ainda).

agora minha dificuldade esta em imprimir sem usar o IE, quando coloco o prg htmlprint da diversos erros de compilacao, sera que é pq eu uso o harbour ? se nao for, quais libs tenho q compilar junto aos fontes. ?

se tiver uma forma de transform o htm em pdf, tambem resolveria. rs

Abracos,
ABEL

harbour boleto

Enviado: 13 Ago 2012 21:10
por Imatech
Olá Abel !


Só vejo vantagens utilizando Harbour ;)
Quem utiliza xH e faça uma simples tentativa de migração ira descobrir o quanto as mensagens do compilador Harbour são úteis na depuração de código...

e

Parabens pela resolução da carteira SR do BB...


Quanto a impressão:

OBOLETO.PRG
Ajustar: METHOD PRINT...

Código: Selecionar todos


METHOD PRINT(lPreview,lPromptPrint,cPrinter) CLASS oBoleto
  DEFAULT lPreview TO ::lPreview
  DEFAULT lPromptPrint TO .T.
  DEFAULT cPrinter TO Win_PrinterGetDefault()

  IF ::lBoleto .AND. ::nBoletos > 0
    IF lPreview
      RM_Shell_Execute_( ::Destino + ::Nomehtm, NIL, NIL )
    ELSE
      RM_Shell_Print_( ::Destino + ::Nomehtm, NIL, NIL )
    ENDIF
  ENDIF
RETURN Self

UTILS_SHELL.C

Código: Selecionar todos

#include "hbapi.h"
#include <windows.h>
#include <shellapi.h>

HB_FUNC( RM_SHELL_EXECUTE_ )
{
   ShellExecute( NULL,
                "OPEN",
                 hb_parc( 1 ),
                 hb_parc( 2 ),
                 hb_parc( 3 ),
                 SW_SHOWMAXIMIZED );
}

HB_FUNC( RM_SHELL_PRINT_ )
{
   ShellExecute( NULL,
                "PRINT",
                 hb_parc( 1 ),
                 hb_parc( 2 ),
                 hb_parc( 3 ),
                 SW_SHOWNORMAL );
}


Opcional: htmlprint.prg para Harbour (Não Testado)

Código: Selecionar todos


/*
 * $Id: htmlprint.prg,v 1.3 2007/06/20 12:29:56 marioargon Exp $
*/
/*
 * xHarbour Project source code:
 * HTMLPRINT engine library class
 *
 * Copyright 2007-2007 Laverson Espíndola <laverson.espindola@gmail.com>
 * www - http://www.xharbour.org http://www.harbour-project.org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this software; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
 *
 * As a special exception, the Harbour Project gives permission for
 * additional uses of the text contained in its release of Harbour.
 *
 * The exception is that, if you link the Harbour libraries with other
 * files to produce an executable, this does not by itself cause the
 * resulting executable to be covered by the GNU General Public License.
 * Your use of that executable is in no way restricted on account of
 * linking the Harbour library code into it.
 *
 * This exception does not however invalidate any other reasons why
 * the executable file might be covered by the GNU General Public License.
 *
 * This exception applies only to the code released by the Harbour
 * Project under the name Harbour.  If you copy code from other
 * Harbour Project or Free Software Foundation releases into a copy of
 * Harbour, as the General Public License permits, the exception does
 * not apply to the code that you add in this way.  To avoid misleading
 * anyone as to the status of such modified files, you must delete
 * this exception notice from them.
 *
 * If you write modifications of your own for Harbour, it is your choice
 * whether to permit this exception to apply to your modifications.
 * If you do not wish that, delete this exception notice.
 *
 */

#include "hbclass.ch"
#include "common.ch"

#command DEFAULT <param> := <val> [, <paramn> := <valn> ];
=> ;
         <param> := IIF(<param> = NIL, <val>, <param> ) ;
         [; <paramn> := IIF(<paramn> = NIL, <valn>, <paramn> ) ]

#DEFINE OLECMDID_PRINT 6
#DEFINE OLECMDEXECOPT_PROMPTUSER 1
#DEFINE LECMDEXECOPT_DONTPROMPTUSER 2

#DEFINE OLECMDF_SUPPORTED 1
#DEFINE OLECMDF_ENABLED 2

#DEFINE READYSTATE_COMPLETE 4
#DEFINE MAX_TIME 30

#define HKEY_LOCAL_MACHINE  0
#define HKEY_CLASSES_ROOT   1
#define HKEY_CURRENT_USER   2
#define HKEY_CURRENT_CONFIG 3

#ifndef HKEY_LOCAL_MACHINE
#define HKEY_LOCAL_MACHINE  4
#endif

#define HKEY_USERS          5

#define VERSION             "1.0.01"

STATIC IEHeader
STATIC IEFooter
STATIC IEMarginBottom
STATIC IEMarginLeft
STATIC IEMarginRight
STATIC IEMarginTop
STATIC IEKey  := "Software\Microsoft\Internet Explorer\PageSetup"

STATIC WB
STATIC PR

STATIC HP

//--------------------------------------------------------------------------------------------//
FUNCTION PrintHTML(cURL,cPrinter,lPrevIew,lPromptPrint,lPrintHtml,cHeader,cFooter)

   DEFAULT lPrintHtml   := .T.
   DEFAULT lPreview     := .F.
   DEFAULT lPromptPrint := .F.
   DEFAULT cPrinter     := Win_PrinterGetDefault()
   DEFAULT cFooter      := ""
   DEFAULT cHeader      := ""

   IF (HP==NIL)
      HP := HTMLPRINT():NEW()
   ENDIF

   HP:PrintUrl     := cURL
   HP:lPreview     := lPreview
   HP:lPromptPrint := lPromptPrint
   HP:lPrintHtml   := lPrintHtml
   HP:PrinterName  := cPrinter
   HP:Footer       := cFooter
   HP:Header       := cHeader

   HP:Print()
   HP:Close()

RETURN .T.
//--------------------------------------------------------------------------------------------//

CLASS HTMLPRINT

   DATA PrinterName
   DATA Orientation            //TO DO  to implement
   DATA Copies                 //TO DO  to implement
   DATA Key  PROTECTED         //TO DO  to implement
   DATA Header
   DATA Footer
   DATA BackGround             //TO DO  to implement
   DATA MarginButtom
   DATA MarginLeft
   DATA MarginTop
   DATA MarginRight
   DATA MarginMeasure          //TO DO  to implement
   DATA PaperSize              //TO DO  to implement
   DATA PrintUrl

   DATA lPreview
   DATA lPromptPrint
   DATA lPrintHtml

   DATA PrintDefault INIT Win_PrinterGetDefault() PROTECTED

   METHOD New() CONSTRUCTOR
   METHOD Print()
   METHOD savePrintSetup() PROTECTED
   METHOD restorePrintSetup() PROTECTED
   METHOD changePrintSetup PROTECTED
   METHOD Close()

ENDCLASS

//--------------------------------------------------------------------------------------------//

METHOD New() CLASS HTMLPRINT

   StartObjectWs()
   StartObjectPr()

   ::savePrintSetup()

RETURN Self

//--------------------------------------------------------------------------------------------//
METHOD Print() CLASS HTMLPRINT

   LOCAL lnStarted        && Seconds started for the document
   LOCAL lnWaiting   := 0 && Seconds waiting for the document to load

   DEFAULT ::PrinterName  := ::PrintDefault
   DEFAULT ::Orientation  := 2
   DEFAULT ::Copies       := 1
   DEFAULT ::Footer       := ""
   DEFAULT ::Header       := ""
   DEFAULT ::MarginButtom  := IEMarginBottom
   DEFAULT ::MarginLeft    := IEMarginLeft
   DEFAULT ::MarginTop     := IEMarginTop
   DEFAULT ::MarginRight   := IEMarginRight
   DEFAULT ::MarginMeasure := 1
   DEFAULT ::PaperSize     := 9

   DEFAULT ::lPreview     := .F.
   DEFAULT ::lPromptPrint := .F.
   DEFAULT ::lPrintHtml   := .T.

   lnStarted := SECONDS()

   IF ::PrintUrl != NIL

      // Configura impressora  seta impressora como padrão
      IF ::lPrintHtml
            IF ::PrintDefault # ::PrinterName
               PR:SetDefaultPrinter(::PrinterName)
            ENDIF
      ENDIF

      ::changePrintSetup()

      WB:Visible    := ::lPreview
      WB:Navigate(::PrintUrl)

      WHILE WB:Readystate # READYSTATE_COMPLETE .OR. lnWaiting >= MAX_TIME
         lnWaiting = Seconds() - lnStarted
      ENDDO

      WHILE WB:QueryStatusWB(OLECMDID_PRINT) != (OLECMDF_SUPPORTED + OLECMDF_ENABLED)
      ENDDO

      // Imprime ou Não
      IF ::lPrintHtml
        WB:ExecWB(OLECMDID_PRINT, If(::lPromptPrint, OLECMDEXECOPT_PROMPTUSER, LECMDEXECOPT_DONTPROMPTUSER) )
      ENDIF

   ELSE
      RETURN .F.
   ENDIF

RETURN .T.

//--------------------------------------------------------------------------------------------//
METHOD savePrintSetup() CLASS HTMLPRINT

   // Salva o que está definido como padrão
   IEFooter       := getRegistry( HKEY_CURRENT_USER , IEKey, "footer")
   IEHeader       := getRegistry( HKEY_CURRENT_USER , IEKey, "header")
   IEMarginBottom := getRegistry( HKEY_CURRENT_USER , IEKey, "margin_bottom")
   IEMarginLeft   := getRegistry( HKEY_CURRENT_USER , IEKey , "margin_left")
   IEMarginRight  := getRegistry( HKEY_CURRENT_USER , IEKey , "margin_right")
   IEMarginTop    := getRegistry( HKEY_CURRENT_USER , IEKey, "margin_top")

RETURN NIL

//--------------------------------------------------------------------------------------------//
METHOD changePrintSetup() CLASS HTMLPRINT

   SetRegistry(HKEY_CURRENT_USER , IEKey , "footer",::Footer)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "header",::Header)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_bottom",::MarginButtom)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_left",::MarginLeft)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_right",::MarginRight)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_top",::MarginTop)

RETURN .T.

//--------------------------------------------------------------------------------------------//
METHOD restorePrintSetup() CLASS HTMLPRINT

   IF ( Empty(IEFooter) .Or. IEFooter == NIL )
      IEFooter := "&u&b&d"
   ENDIF

   IF ( Empty(IEHeader) .Or. IEFooter == NIL )
      IEHeader := "&w&bPage &p of &P"
   ENDIF

   SetRegistry(HKEY_CURRENT_USER , IEKey , "footer",IEFooter)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "header",IEHeader)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_bottom",IEMarginBottom)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_left",IEMarginLeft)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_right",IEMarginRight)
   SetRegistry(HKEY_CURRENT_USER , IEKey , "margin_top",IEMarginTop)

RETURN .T.

//--------------------------------------------------------------------------------------------//
METHOD close() CLASS HTMLPRINT

   // Restaura impressora se for o caso.
   PR:SetDefaultPrinter(::PrintDefault)
   ::restorePrintSetup()

   WB := NIL
   PR := NIL
   HP := NIL

RETURN NIL

//--------------------------------------------------------------------------------------------//
STATIC FUNCTION startObjectWS()

   TRY
      WB    := GetActiveObject( "InternetExplorer.Application" )
   CATCH
      TRY
         WB := CreateObject( "InternetExplorer.Application" )
      CATCH
         RETURN Throw(ErrorNew( "HTMLPrint", 0, 0, ProcName(),"ERROR! IExplorer not avialable. [" + Ole2TxtError()+ "]" ))
      END
   END

RETURN .T.

//--------------------------------------------------------------------------------------------//
STATIC FUNCTION startObjectPR()

   TRY
     PR := GetActiveObject("WScript.Network")
   CATCH
     TRY
       PR := CreateObject("WScript.Network")
     CATCH
       RETURN Throw(ErrorNew( "HTMLPrint", 0, 0, ProcName(),"ERROR! Printer network not avialable. [" + Ole2TxtError() + "]"))
     END
   END

RETURN .T.

/*
EOF
*/

/*
&w Window title
&u Page address (URL)
&d Date in short format specified by Regional Settings in Control Panel
&D Date in long format specified by Regional Settings in Control Panel
&t Time in the format specified by Regional Settings in Control Panel
&T Time in 24-hour format
&p Current page number
&P Total number of pages
&& A single ampersand (&)
&b The text immediately following these characters as centered
&b&b The text immediately following the first "&b" as centered, and the text following the second "&b" as right-justified
*/

//---------------------------------------------------------------------------//
/*
FUNCTION TWEB()

   StartObjectWs()

   PUBLICVAR("OIE")

   OIE := getWB()

RETURN OIE
*/
//---------------------------------------------------------------------------//
FUNCTION getHP()
RETURN HP

//---------------------------------------------------------------------------//
FUNCTION getWB
RETURN WB

//--------------------------------------------------------------------------//
FUNCTION HtmlPrintVersion()
RETURN VERSION


harbour boleto

Enviado: 13 Ago 2012 22:59
por Abel
voltei,

consegui fazer a impressao pelo fonte original (opcao q vc escreveu nao testado), adicionando na compilacao os comandos abaixo:

-lxhb
-lhbwin

fiz alguns ajustes nas opcoes lprint, lpromptprint, e lpreview e esta imprimindo.

so tem uma coisa, a ultima linha que ele imprime sai o caminho do meu arquivo htm

exemplo:
"file://c:\sistema\boleto\boleto.htm ", seria possivel retirar esta linha e a data que sai do canto direito embaixo ?

Abracos, e valeu pela força.
ABEL

harbour boleto

Enviado: 14 Ago 2012 06:44
por ANDRIL
Abel escreveu:"file://c:\sistema\boleto\boleto.htm ", seria possivel retirar esta linha e a data que sai do canto direito embaixo ?
Estes dados me parece ser do rodapé do IE. Verifique em configuração de página se consegue desativa-lo. Não sei se tem como faze-lo automatico.

Nos testes que fiz, não sei se é por que uso o Google Chrome como navegador padrão, não consigo imprimir direto. Alguém passou por esta dificuldade?

Seria difícil converter um HTML em PDF, tem alguma classe ou função para isto no [x]harbour? Assim acabaria de vez com o problema de diferença entre os browsers.

Ate+

harbour boleto

Enviado: 14 Ago 2012 08:56
por lucimauro
Abel;

voce compilou com harbour, qual versão?

e tambem voce compilou a UTILS_SHELL.C

Porque aqui quando eu compilo ela da um erro. num arquivo .H

harbour boleto

Enviado: 14 Ago 2012 10:09
por Imatech
Olá Lucimauro !



As adaptações disponibilizadas foram testadas com Harbour 3.xx + Compiladores MSVC e MingW



Que arquivo .h falta em sua compilação (e que ambiente usa para compilação) ?




Abç...

harbour boleto

Enviado: 14 Ago 2012 20:44
por lucimauro
Este é o erro que da na minha compilação
Harbour 3.0
Mingw

C:\fontes\SISTEMA\novo>HBMK2 SCE.hbp /N /M /B
hbmk2: Harbour: Compilando módulos...
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'oboleto.prg'...
C:\hb30\include\hbdefs.h(56) Error F0029 Can't open #include file 'stdarg.h'
hbmk2: Erro: Executando o compilador Harbour (interno): 1
(C:\hb30\bin\harbour.exe) -n2 oboleto.prg /N /M /B -o.hbmk\win\mingw\ -iC:\hb30\include


Se alguem puder me ajudar agradeço.