SOLUÇÃO PARA IMPRESSÃO USB

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

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

Mensagem por sygecom »

Tche, assim que sobrar um tempinho posso lhe dar umas dicas no xharbour....mas hooooonão se inlude muito ....pq comecei a pouco...a principio soh encontrei dificuldade em criar na mão grande as janelinha...não encontrei uma IDE descente....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
MarcosV
Usuário Nível 3
Usuário Nível 3
Mensagens: 106
Registrado em: 15 Jun 2005 20:37
Localização: Sorocaba/SP

Mensagem por MarcosV »

ô Loco Pablo... Toco gaita sim! faz uns 3 anos... não sou um profissional... mas da pra arranhar um improviso em qq blues ou rock.
Marcos Villela
x[H]arbour.org (CVS) | GtWvW+HwGui (CVS) | HbMake | Dbf | Rdd DbfCdx | LeToDb (CVS) (Implantando)
===============================================================
“Quem nunca dormiu à noite e acordou de repente, suando frio e chorando, chorando e
chorando? Se isso lhe aconteceu, então você foi apanhado pelo blues.” (Robert Johnson)
Sweet Home Chicago (Versão Blind Bulldog Blues): www.youtube.com/watch?v=J-V61vQTSZs
heveraldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 16 Jun 2006 17:15

USB

Mensagem por heveraldo »

Galera,

Usei a Win32prn do xharbour.
Primeiro criei um sisteminha externo, o qual compartilei com todos.
Depois chequei a conclusão, que com algumas alterações poderia implmentar dentro do meu próprio sistema.
E foi o que eu fiz.
Eliminei o sistema externo e usando a mesma idéia, não foi preciso alterar cada relatorio do sistema. Como todo relatorio do mesu sistema cria um arquivo txt antes da impressão, com as devidas configuracoes de fontes:
[NEGRITO]
[CONDESADO]
[NORMAL]
[EXPANDIDO]

Depois leio o arquivo linha a linha e verifico se existe alguma configuraçao de fonte, limpo a configuração para nao ser impresso e defino a fonte a ser usada
- oPrinter:SetFont("Courier New",vm_nNormal, 0).




SEGUE O FONTE DO USB.EXE

Código: Selecionar todos


#define FORM_A4 9 
#define PS_SOLID 0 
#define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) 
                  
#define BLACK   RGB  ( 0x0 ,0x0 ,0x0  ) 
#define BLUE    RGB  ( 0x0 ,0x0 ,0x85 ) 
#define GREEN   RGB  ( 0x0 ,0x85,0x0  ) 
#define CYAN    RGB  ( 0x0 ,0x85,0x85 ) 
#define RED     RGB  ( 0x85,0x0 ,0x0  ) 
#define MAGENTA RGB  ( 0x85,0x0 ,0x85 ) 
#define BROWN   RGB  ( 0x85,0x85,0x0  ) 
#define WHITE   RGB  ( 0xC6,0xC6,0xC6 )




FUNCTION Main(cFilePRN,cSemConfiguracao)
         LOCAL  GetList        := {}
         LOCAL  aPrn           := GetPrinters()
         LOCAL  aFiles        
         
         cFilePRN              := if(cFilePRN         # NIL, cFilePRN        , "")
         cSemConfiguracao      := if(cSemConfiguracao # NIL, cSemConfiguracao, "")

         If File("USB.MEM")
            Rest From USB.MEM additive
         Endif

         vm_Prn         := if(type("vm_Prn"       ) = "U", 1                     , vm_Prn     )
         vm_cFile       := if(type("vm_cFile"     ) = "U", "*.PRN       "        , vm_cFile   )
         vm_nTempo      := if(type("vm_nTempo"    ) = "U", 5                     , vm_nTempo  )
         vm_nNormal     := if(type("vm_nNormal"   ) = "U", 11                    , vm_nNormal )
         vm_nCompri     := if(type("vm_nCompri"   ) = "U", 8                     , vm_nCompri )
         vm_nExpand     := if(type("vm_nExpand"   ) = "U", 18                    , vm_nExpand )
         vm_cNormal     := if(type("vm_cNormal"   ) = "U", '"[NORMAL]"          ', vm_cNormal )
         vm_cCompri     := if(type("vm_cCompri"   ) = "U", '"[COMPRIMIDO]"      ', vm_cCompri )
         vm_cExpand     := if(type("vm_cExpand"   ) = "U", '"[EXPANDIDO]"       ', vm_cExpand )
         vm_cNegrit     := if(type("vm_cNegrit"   ) = "U", '"[NEGRITO]"         ', vm_cNegrit )
         vm_cCancel     := if(type("vm_cCancel"   ) = "U", '"[CANCELANEGRITO]"  ', vm_cCancel )

         vm_Prn         := GETDEFAULTPRINTER()
         
         * Imprime arquivo sem necessidade de configura‡Æo
         * Rotina executada por sistema principal
         * -----------------------------------------------
         if !empty(cFilePRN)
            if FILE(cFilePRN)
               PrnTeste(       vm_Prn  , cFilePRN)
             * PrnTeste( aPrn[ vm_Prn ], cFilePRN)
               DELETE FILE (cFilePRN)
            endif
            RETURN(NIL)
         endif

         SetColor("bg+/b,w+/bg,w/w,w/w,w+/b")               // Configuracao  de cores PADRAO do sistema
         Set Key 28  to Help()

         CLS
         IF EMPTY(aPrn) 
            Alert("Nenhuma impressora instalada - N„o ‚ poss¡vel continuar") 
            QUIT 
         ENDIF 

         DO WHILE .T. //!EMPTY(vm_Prn)
            CLS
            @ 00,00 TO maxRow(),maxCol() 
            @ 01,02 say "Sistema de impress„o Via USB                                         F1-Help"
            @ 02,01 TO 02,78 

            @ 03,02 say "Nome do arquivo:"      get vm_cFile  PICT "@!K"
            @ 04,02 say "        Exemplo: SPOOL.PRN"
            @ 05,02 say "                 *.PRN    "
            @ 06,02 say "       N„o usar: *.*      "
            @ 07,02 say "                 *.TMP    " 

            @ 03,35 say "Tempo para Impress„o:" get vm_nTempo PICT "9.99"
            @ 03,62 say "Segundos"

            @ 08,01 TO 08,78
            @ 09,02 get vm_cNormal
            @ 09,23 say "Imprime caractere com fonte normal     tamanho:" get vm_nNormal  pict "99"
            @ 10,02 get vm_cCompri
            @ 10,23 say "Imprime caractere com fonte comprimida tamanho:" get vm_nCompri  pict "99"
            @ 11,02 get vm_cExpand
            @ 11,23 say "Imprime caractere com fonte expandida  tamanho:" get vm_nExpand  pict "99"
            @ 12,02 get vm_cNegrit
            @ 12,23 say "Imprime caractere com fonte negrito"
            @ 13,02 get vm_cCancel
            @ 13,23 say "Imprime caractere com fonte cancelanegrito"

            @ 17,02 say "Impressora Default"
            @ 18,01 TO 18,78
            @ 19,02 say vm_Prn

            @ 21,01 TO 21,78 
            @ 22,02 say "Desenvolvido por: Heveraldo Pereira            heveraldo@veloxmail.com.br"
            @ 23,02 say "                  Fortaleza-CE (85) 8859.9770  heveraldo@msn.com         "
            if !empty(cSemConfiguracao)
               CLEAR GETS
          *    keyboard chr(13)
          *    vm_Prn := ACHOICE(17,1,20,78,aPrn,.T.,,vm_Prn)
            else
               READ
               IF LASTKEY()=27 ; EXIT ; ENDIF
          *    vm_Prn := ACHOICE(17,1,20,78,aPrn,.T.,,vm_Prn)
               save to USB.MEM all like vm_*
            endif
          * READ
          * save to USB.MEM all like vm_*

            IF !EMPTY(vm_Prn)
               Do while .T. .and. lastkey() # 27
                  Aviso("     Aguardando arquivos para impress„o !     ", vm_nTempo)

                * vm_Prn := GETDEFAULTPRINTER()
                * @ 19,02 say vm_Prn

                  aFiles := {}
                  asize( aFiles, aDir( alltrim(vm_cFile) ) )
                  aDir ( alltrim(vm_cFile), aFiles         )

                  if !empty(aFiles)
                     Aviso("Imprimindo relat¢rio...Agruarde!")
                   * AEVAL( aFiles, { |cFile| Aviso("Imprimindo arquivo " + cFile + "...Agruarde!"), PrnTeste( aPrn[ vm_Prn ], cFile) } )
                     AEVAL( aFiles, { |cFile| Aviso("Imprimindo arquivo " + cFile + "...Agruarde!"), PrnTeste(       vm_Prn  , cFile) } )
                     AEVAL( aFiles, { |cFile| FERASE( cFile ) } )
                     inkey(vm_nTempo)
                  endif
               Enddo

             * Do while .T. .and. lastkey() # 27
             *    Aviso("Aguardando arquivos para impress„o!", vm_nTempo)
             *    if FILE(vm_cFile)
             *       Aviso("Imprimindo relat¢rio...Agruarde!")
             *       PrnTeste( aPrn[ vm_Prn ], vm_cFile)
             *       DELETE FILE (vm_cFile)
             *       inkey(vm_nTempo)
             *    endif
             * Enddo

            ENDIF
            EXIT
         ENDDO 
RETURN(NIL) 



STATIC FUNCTION PrnTeste()     // (cPrinter, cBMPFile)
       PARA cPrinter, cBMPFile

       LOCAL oPrinter := Win32Prn():New(cPrinter)
       LOCAL aFonts 
       LOCAL x 
       LOCAL nColFixed 
       LOCAL nColTTF
       LOCAL nColCharSet

             oPrinter:Landscape := .F. 
             oPrinter:FormType  := FORM_A4 
             oPrinter:Copies    := 1

       * Cria arquivo temporario
       * --------------------------------------------------------------------
       TMP_Tela()

       Select Tela
       append from (cBMPFile) sdf  && nome completo do arquivo sdf

       IF !oPrinter:Create()  // Cria classe
          Alert("N„o ‚ poss¡vel criar a impress„o") 
       ELSE 
          IF !oPrinter:startDoc("Win32Prn(Nome documento e suas propriedades)") 
             Alert("StartDoc() Falhou") 
          ELSE

             oPrinter:SetFont("Courier New",vm_nNormal, 0)              // Normal
             oPrinter:Bold(0)                                           // Normal 

             dbgotop()
             Do while !eof()

                lCancelaNegrito := .F.                                  // Semafaro de impressao negrito/cancela negrito
                cLinha          := Tela->Linha                          // Busca linha de impressao
                lEject          := ("" $ cLinha)                       // Procura caractete EJECT
                cLinha          := strtran( cLinha, "")                // Elimina caractere EJECT

                oPrinter:newline()                                      // Inicia nova linha
                if  &vm_cNORMAL.      $ cLinha                          // Verifica se linha existe cfg de fonte 
                    cLinha := strtran( cLinha, &vm_cNORMAL.)            // Elimina caractere cfg de fonte
                    oPrinter:SetFont("Courier New",vm_nNormal, 0)       // Muda para padrao windows NORMAL
                endif
                if &vm_cCompri.     $ cLinha
                    cLinha := strtran( cLinha, &vm_cCompri.)
                    oPrinter:SetFont("Courier New",vm_nCompri,{3,-50})  // Comprimida
                endif
                if &vm_cExpand.       $ cLinha
                    cLinha := strtran( cLinha, &vm_cExpand.)
                    oPrinter:SetFont("Courier New",vm_nExpand, 0)       // Expandido
                endif
                if &vm_cNegrit.        $ cLinha
                    cLinha := strtran( cLinha, &vm_cNegrit.)
                    oPrinter:Bold(800)                                  // Negrito/Bold
                endif
                If &vm_cCancel. $ cLinha
                    cLinha := strtran( cLinha, &vm_cCancel.)
                  * oPrinter:Bold(0)                                    // Normal
                    lCancelaNegrito := .T.
                endif

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

                if(lEject .and. !eof(), oPrinter:NewPage(), )           // Usa "oPrinter:NewPage()" para iniciar nova pagina
                if (oPrinter:MaxRow() - 2) <= oPrinter:Prow()           // Usa "oPrinter:NewPage()" para iniciar nova pagina
                   oPrinter:NewPage()
                endif

             Enddo
             oPrinter:EndDoc()                                          // Finaliza documento
          ENDIF 
          oPrinter:Destroy()                                            // Destroi classe
       ENDIF
       Close Tela
RETURN(NIL) 


Procedure PrintBitMap( oPrn, cBitFile ) 
          LOCAL oBMP 
          IF     EMPTY( cBitFile ) 
                 * 
          ELSEIF !FILE( cBitFile ) 
                 Alert( cBitFile + " n„o encontrado " ) 
          ELSE 
                 oBMP:= Win32BMP():new() 
                 IF oBmp:loadFile( cBitFile ) 
                    oBmp:Draw( oPrn, { 200,200, 2000, 1500 } ) 
                    // Note: Can also use this method to print bitmap 
                    // oBmp:Rect:= { 200,2000, 2000, 1500 } 
                    // oPrn:DrawBitMap( oBmp ) 
                 ENDIF 
                 oBMP:Destroy() 
          ENDIF 
RETURN


* Criacao de arquivo temporario de auxilio impressao na tela
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Function TMP_Tela()
	 local Retorna := .T.
         local aSCGTMP :=  { {"LINHA", "C", 200, 0} }

	 set exclusive on
       * Arquivo1  := alltrim(left(sys_Usuario,4)) + "TELA.TMP"
         Arquivo1  := "TELA.TMP"
         if(!file(Arquivo1), DBCREATE(Arquivo1,aSCGTMP), )
         if      select("Tela") # 0
                 select Tela
                 Tela->(__dbzap())
         elseif  select("Tela") = 0 .and. userede(Arquivo1,"Tela",.T.,10)
                 Tela->(__dbzap())
	 endif
	 set exclusive off
Return (Retorna)
* o arquivo testw32p.prg (ou algo assim que vem no pacote do xharbour apresenta todos os recursos da classe.


* Funcao para abertura de arquivos
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Function UseRede(arquivo,apelido,exuse,tempo)
  local  sempre := (tempo = 0)
  Do while (sempre .or. tempo > 0)
     If exuse
        USE (arquivo) Alias (apelido) Exclusive //NEW VIA 'MySQL'
     Else
        USE (arquivo) Alias (apelido) Shared    //NEW VIA 'MySQL'
     Endif

     If !Neterr() ;  Return .T. ; Endif
        aviso("Tentando acesso ao bancos de dados...Aguarde!",1)
     tempo -= 1
  Enddo

* atencao(""," N„o foi poss¡vel acessar algum arquivo de dados.",;
*            " O sistema  ser   finalizado  para  evitar  perda",;
*            " de dados e manter a consistˆncia dos arquivos.  ",;
*            "                                                 ",;
*            " Acesse o sistema novamente.                     ",;
*            " Qualquer d£vida, entre em contato com o suporte ",;
*            " t‚cnico.","                                     ",;
*            "                                      Tecle algo"  )
*            cls ; quit

Return .F.


*                                   Aviso
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Function Aviso(msg, tempo)
   local TelaAguarde := if(tempo # NIL, savescreen(), "")
   local ci
   local cf

   if !empty(msg) 
      msg            := if(msg=NIL,"  Processando...Aguarde!  ",msg)
      ci             := int(40-(len(msg)/2)-2)
      cf             := int(40+(len(msg)/2)+2)

    * Som(1)
      Jan(12,ci,16,cf,"w+/b","n+/b",.T. )
      @ 14,ci+1 say padc(msg,len(msg)+2) color "r*/b"

      If Tempo # NIL
         Inkey(tempo)
         TelaAguarde := restscreen(,,,,TelaAguarde)
      Endif
    * @ 48,78 Say ""
   endif
Return(.T.)

*                                   Jan
* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Function Jan(li,ci,lf,cf,linhaS,linhaI,fundo)
  local CorJan := SetColor()
  if fundo = .T.                       && se .T. limpa a tela e coloca cor de fundos
     setColor(linhaS)                  && cor de fundo
     @ li,ci clear to lf,cf            && limpa quadro
     setColor(CorJan)
  endif                                && fecha if

  @ li,ci to lf,cf       Color linhaS  && faz um quadro
  @ lf,ci to lf,cf       Color linhaI  && linha inferior
  @ li,cf to lf,cf       Color linhaI  && linha direita
  @ li,cf say "¿"        Color linhaI  && canto superior direito
  @ lf,cf say "Ù"        Color linhaI  && canto inferior direito
  @ lf,ci say "À"        Color linhaS  && canto inferior esquerdo
  @ 48,78 say ""
  SetColor(CorJan)
Return NIL


Function Help()
         local TelaHelp := savescreen()
       * limpa()
       * cls
       * @ 08,01 say "Ajuda ao Sistema                                                             "
       * @ 09,01 say "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"

         CLS
         @ 00,00 TO maxRow(),maxCol() 
         @ 01,02 say "Sistema de impress„o Via USB"
         @ 02,01 TO 02,78 

         @ 04,01 say "1. Configura‡„o do Arquivo: USB.MEM                                          "
         @ 05,01 say "   Insira macros substitui‡„o de  fontes  em  seu  arquivo  de  impress„o  ou"
         @ 06,01 say "   altere para as que j  s„o usadas como configura‡Æo de fonte no seu arquivo"
         @ 07,01 say "   de impress„o e defina seus respectivos tamanhos de fontes.                "
         @ 08,01 say "   Use ASPAS no inicio e final de cada macro.                                "

         @ 10,01 say "   Definir tamb‚m:                                                           "
         @ 11,01 say "   Nome do arquivo, tempo para impress„o de cada arquivo.                    "

         @ 13,01 say "2. Como configurar ?                                                         "
         @ 14,01 say "   Execute o programa USB.EXE e realize as devidas configura‡äes.            "

         @ 16,01 say "3. Como imprimir ?                                                           "
         @ 17,01 say "   Modo STAND ALONE -> Execute o programa assim:                             "
         @ 18,01 say '   USB "" "SEM CONFIGURACAO"                                                 '

         @ 20,01 say "   Imprimindo direto pelo seu aplicativo:Insira a linha abaixo no seu sistema:"
         @ 21,01 say "   RUN USB NOME DO ARQUIVO DE IMPRESSAO                                      "

         @ 23,01 say "                                   Pressione qualquer tecla para continuar..."
         inkey(0)

         CLS
         @ 00,00 TO maxRow(),maxCol() 
         @ 01,02 say "Sistema de impress„o Via USB"
         @ 02,01 TO 02,78 

         @ 04,01 say "4. Como funciona a substitui‡„o de fonte ?                                   "
         @ 05,01 say "   O sistema procura as macros substiui‡„o no  seu  arquivo  de  impress„o  e"
         @ 06,01 say "   altera para defini‡„o de fonte padr„o windows.                            "

         @ 08,01 say "   A configura‡„o de cada tipo de fonte ‚ configurada por linha inteira, n„o "
         @ 09,01 say "   podendo mudar de fonte no meio de uma linha.                              "

         @ 11,01 say "   Negrito sempre ser  cancelada na linha seguinte.                           "

         @ 13,01 say '   O eject ‚ executado quando encontra  este  ""  caractere  no  arquivo  de'
         @ 14,01 say '   impress„o ou no final de cada p gina.                                     '

         @ 16,01 say "   O arquivo impresso, ser  exclu¡do ap¢s a impress„o.                       "

         @ 18,01 say "   O programa direcionar  as impress”es para a impressora default do windows."

         @ 20,01 say "   Sugest„o: Crie uma pasta C:\Temp, copie os arquivos de impress„o para  ela"
         @ 21,01 say "   e execute o programa USB.EXE na mesma.                                    "

         @ 23,01 say "                                   Pressione qualquer tecla para continuar..."
         inkey(0)

         CLS
         @ 00,00 TO maxRow(),maxCol() 
         @ 01,02 say "Sistema de impress„o Via USB"
         @ 02,01 TO 02,78 

         @ 04,01 say "5. Exemplo: Seu arquivo de impress„o deve ficar assim:                        "
         @ 05,01 say "   [NORMAL]Teste de impressao com fonte normal                                "
         @ 06,01 say "   Ainda imprimindo com fonte normal                                          "

         @ 08,01 say "   [NEGRITO]Teste de impressao com fonte negrito                              " 
         @ 09,01 say "   Fonte negrito ‚ sempre cancelada a cada nova linha ou seja, valta ao normal"
         @ 10,01 say "   Imprimindo com fonte normal                                                "

         @ 12,01 say "   [EXPANDIDO]Impressao EXPANDIDA                                             "
         @ 13,01 say "   Continua EXPANDIDO                                                         "
         @ 14,01 say "   [NORMAL] Configura impressao com fonte normal                              "

         @ 16,01 say "   [NORMAL]Temos que abrir m„o de certos recursos e est‚tica no  in¡cio,  para"
         @ 17,01 say "   conseguir imprimir. Depois que aprender um pouco desse programa,   trabalhe"
         @ 18,01 say "   a est‚tica, os recursos e a facilidade de impress„o para o usu rio final.  "

         @ 23,01 say "                                     Pressione qualquer tecla para retornar..."
         inkey(0)

         Restscreen(,,,,TelaHelp)
Return Nil

Compilado com xharbour
BCC55
Win32Prn



Aconselhor testarem também o PDFCreator. Mostra na tela com exatamente como será impresso, envia via e-mail, para a porta USB e etc.


Espero que ajude!

Um grande abraços a todos,

Heveraldo

Clipper.52 / xHarbour / GTWVW
Responder