Win32Prn - Salto de Pagina apos impressao

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

nasouza
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 20 Jul 2009 17:57
Localização: Santa Isabel do Ivai - Pr

Win32Prn - Salto de Pagina apos impressao

Mensagem por nasouza »

Estou tentanto utilizar win32prn, tenho que imprimir um formulario com 31 linhas, terminando tenho que ja deixar a impressora pronta para imprimir o proximo formulario, mas quando termina a impressao do primeiro cormulario ele ja salta para a proxima folha, pois em cada folha tenho dois formularios, existe uma maneira de fazer com que a impressora nao de este salto.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por Hasse »

Dependendo da orientação do papel, você pode setar o formulário para:
#define DMPAPER_A5 11 /* A5 148 x 210 mm */
ou
#define DMPAPER_A5_TRANSVERSE 61 /* A5 Transverse 148 x 210 mm */

ou ainda controlar o avanço do papel pelo número de linhas.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
nasouza
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 20 Jul 2009 17:57
Localização: Santa Isabel do Ivai - Pr

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por nasouza »

Estou usando a impressora lx300, e mesmo utilizando o DMPAPER_A5, assim que ele termina a impressao ele salta para proxima pagina, precisaria que ele nao saltasse, e permanecesse, para que pudesse fazer uma nova impressao na segunda parte do formulario. Mas gostaria de saber se é possivel isso usando a Win32Prn.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por Hasse »

Na realidade nunca usei a Classe Win32prn() com impressoras matriciais.

Não sei te informar. Quem sabe algum outro colega saiba.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por sygecom »

Olá nasouza,
nasouza escreveu:Estou usando a impressora lx300, e mesmo utilizando o DMPAPER_A5, assim que ele termina a impressao ele salta para proxima pagina, precisaria que ele nao saltasse, e permanecesse, para que pudesse fazer uma nova impressao na segunda parte do formulario. Mas gostaria de saber se é possivel isso usando a Win32Prn.
Post sua rotina de impressão que está usando a WIN32PRN para poder ver o que pode está acontecendo ou quem sabe dar alguma dica.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
nasouza
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 20 Jul 2009 17:57
Localização: Santa Isabel do Ivai - Pr

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por nasouza »

Estou testando esta rotina, que encontrei no exemplo do Wagner, a respeito da Win32Prn, e criei este layout, para ver se conseguia gerar a impressao, mas o problema tem sido o salto de pagina, apos a impressao.

/* Printer.prg */

Código: Selecionar todos

#define DMPAPER_A5   11 /* A5 148X210mm */
//-------------
FUNCTION Main()
//-------------
LOCAL nPrn:=1
LOCAL aPrn:= GetPrinters()
CLS

IF EMPTY(aPrn)
   Alert("Nenhuma impressora instalada")
   QUIT
END

cls

WHILE !EMPTY(nPrn)
   CLS
   @ 0,0 SAY 'Teste de uso do WIN32PRN'
   @ 1,0 TO maxRow(),maxCol()
   nPrn:= ACHOICE(2,1,maxRow()-1,maxCol()-1,aPrn,.T.,,nPrn)

   IF !EMPTY(nPrn)
      PrnTest(aPrn[nPrn])
   else

   END

END

RETURN(NIL)

//------------------------
FUNCTION PrnTest(cPrinter)
//------------------------
LOCAL oPrinter:= WIN32PRN():New(cPrinter), aFonts, nPos
oPrinter:Landscape := .f.
oPrinter:FormType  := DMPAPER_A5
oPrinter:Copies    := 1

IF !oPrinter:Create()
   Alert("Erro criando a impressora")
ELSE

   IF !oPrinter:startDoc('Isto ir  aparecer no SPOOLER do windows')
      Alert("Erro iniciando documento.")
   ELSE
      oPrinter:UnderLine(.F.)
      aFonts:= oPrinter:GetFonts()
      oPrinter:SetFont(aFonts[25,1])
      oPrinter:NewLine()
      oprinter:setpos((0 * oPrinter:Charwidth));oPrinter:TextOut("===============================================================================",.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth));oprinter:textOut("123456789012345678901234567890",.f.)
      oprinter:setpos((32 * oPrinter:Charwidth));oprinter:textOut([- Telefone],.f.)
      oprinter:setpos((43 * oPrinter:Charwidth));oprinter:textOut([ 99  9999-9999],.f.)
      oprinter:setpos((58 * oPrinter:Charwidth));oprinter:textOut([! Orcamento:],.f.)
      oprinter:setpos((72 * oPrinter:Charwidth));oprinter:textOut([1234567],.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth));oprinter:textOut("1234567890123456789012345678901234567890",.f.)
      oprinter:setpos((58 * oPrinter:Charwidth));oprinter:textOut("! Emissao:",.f.)
      oprinter:setpos((69 * oPrinter:Charwidth));oprinter:textOut("99/99/9999",.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth)) ;oprinter:textOut("SANTA CRUZ DO MONTE CASTELO",.f.)
      oprinter:setpos((28 * oPrinter:Charwidth)) ;oprinter:textOut("-",.f.)
      oprinter:setpos((29 * oPrinter:Charwidth)) ;oprinter:textOut("PR",.f.)
      oprinter:setpos((31 * oPrinter:Charwidth)) ;oprinter:textOut("-",.f.)
      oprinter:setpos((32 * oPrinter:Charwidth)) ;oprinter:textOut("1234567890123456789012345",.f.)
      oprinter:setpos((58 * oPrinter:Charwidth)) ;oprinter:textOut("! Hora:",.f.)
      oprinter:setpos((70 * oPrinter:Charwidth)) ;oprinter:textOut(TIME(),.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth)) ;oprinter:textOut("-[Vendedor:",.f.)
      oprinter:setpos((12 * oPrinter:Charwidth)) ;oprinter:textOut("123456789012345678901234567890",.f.)
      oprinter:setpos((42 * oPrinter:Charwidth)) ;oprinter:textOut("]---------------! Operacao:",.f.)
      oprinter:setpos((70 * oPrinter:Charwidth)) ;oprinter:textOut("123456789",.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth)) ;oprinter:textOut("-[Cliente]-----------------------------------------------! Pagina n.",.f.)
      oprinter:setpos((74 * oPrinter:Charwidth)) ;oprinter:textOut("99999",.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth)) ;oprinter:textOut("12345",.f.)
      oprinter:setpos((06 * oPrinter:Charwidth)) ;oprinter:textOut("-",.f.)
      oprinter:setpos((07 * oPrinter:Charwidth)) ;oprinter:textOut("12345678901234567890123456789012345678901234",.f.)
      oprinter:setpos((52 * oPrinter:Charwidth)) ;oprinter:textOut("-",.f.)
      oprinter:setpos((54 * oPrinter:Charwidth)) ;oprinter:textOut("Telefone :",.f.)
      oprinter:setpos((65 * oPrinter:Charwidth)) ;oprinter:textOut("[44] 9999-9999",.f.)
      oPrinter:NewLine()
      oprinter:setpos((01 * oPrinter:Charwidth)) ;oprinter:textOut("1234567890123456789012345678901234567890",.f.)
      oprinter:setpos((44 * oPrinter:Charwidth)) ;oprinter:textOut("123456789012345678901234567890",.f.)
      oprinter:setpos((77 * oPrinter:Charwidth)) ;oprinter:textOut("12",.f.)
      oPrinter:NewLine()
      oprinter:setpos((00 * oPrinter:Charwidth)) ;oprinter:textOut("-------------------------------------------------------------------------------",.f.)
      oPrinter:NewLine()
      oPrinter:SetFont(aFonts[27,1])
      oprinter:setpos((05 * oPrinter:Charwidth)) ;oprinter:textOut("Codm        Descricao das Mercadorias                             UN      Qtidade      Unitario         Total",.f.)
      oPrinter:NewLine()
      oprinter:setpos((05 * oPrinter:Charwidth)) ;oprinter:textOut("--------    --------------------------------------------------    --    ---------    ----------    ----------",.f.)

      for a = 1 to 13
          oPrinter:NewLine()
          oprinter:setpos((005 * oPrinter:Charwidth)) ;oprinter:textOut("999/9999",.f.)
          oprinter:setpos((017 * oPrinter:Charwidth)) ;oprinter:textOut("12345678901234567890123456789012345678901234567890",.f.)
          oprinter:setpos((071 * oPrinter:Charwidth)) ;oprinter:textOut("99",.f.)
          oprinter:setpos((077 * oPrinter:Charwidth)) ;oprinter:textOut("99999.999",.f.)
          oprinter:setpos((090 * oPrinter:Charwidth)) ;oprinter:textOut("999,999.99",.f.)
          oprinter:setpos((104 * oPrinter:Charwidth)) ;oprinter:textOut("999,999.99",.f.)
      next

      oPrinter:NewLine()
      oPrinter:SetFont(aFonts[25,1])
      oprinter:setpos((00 * oPrinter:Charwidth)) ;oprinter:textOut("-[Observacoes]-----------------------------------------------------------------",.f.)
      oPrinter:NewLine()
      oprinter:setpos((59 * oPrinter:Charwidth)) ;oprinter:textOut("!Mer.:",.f.)
      oprinter:setpos((65 * oPrinter:Charwidth)) ;oprinter:textOut("9,999,999.99",.f.)
      oPrinter:NewLine()
      oprinter:setpos((59 * oPrinter:Charwidth)) ;oprinter:textOut("!Des.:",.f.)
      oprinter:setpos((65 * oPrinter:Charwidth)) ;oprinter:textOut("9,999,999.99",.f.)
      oPrinter:NewLine()
      oprinter:setpos((59 * oPrinter:Charwidth)) ;oprinter:textOut("!Tot.:",.f.)
      oprinter:setpos((65 * oPrinter:Charwidth)) ;oprinter:textOut("9,999,999.99",.f.)
      oPrinter:NewLine()
      oprinter:setpos((00 * oPrinter:Charwidth)) ;oprinter:textOut("-[L.Entrega:",.f.)
      oprinter:setpos((13 * oPrinter:Charwidth)) ;oprinter:textOut("12345678901234567890123456789012345678901234567890",.f.)
      oprinter:setpos((63 * oPrinter:Charwidth)) ;oprinter:textOut("]---------------",.f.)
      oPrinter:NewLine()
      oprinter:setpos((00 * oPrinter:Charwidth)) ;oprinter:textOut("-[Assinatura:__________________________________________________]---------------",.f.)
      oPrinter:NewLine()
      oprinter:setpos((00 * oPrinter:Charwidth)) ;oprinter:textOut("===[ CONFIRA A MERCADORIA NA ENTREGA, NAO ACEITAMOS RECLAMACOES POSTERIORES ]==",.f.)
      oPrinter:NewLine()
      oPrinter:setprc(60,00)
      oprinter:setpos((00 * oPrinter:Charwidth)) ;oprinter:textOut("Estou na Linha ",.f.)
      oprinter:setpos((16 * oPrinter:Charwidth)) ;oprinter:textOut(str(oPrinter:prow(),4),.f.)
      oPrinter:EndDoc()
      oPrinter:Destroy()
   end

end

RETURN(NIL)
Natanael..


------------------------------------
Nota da Moderação:(Sygecom)
Topico editado para colocar a TAG [ CODE ]
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por sygecom »

Bom, testei aqui, estava eu aqui com uma impressora lx-300 na mesa e fiz um teste com uma rotina minha eu deu certinho usando oPrinter:FormType := 61, agora o que pode esta acontecendo no seu exemplo é que esta ultrapasando o tamanho definido no FormType e ejetando a proxima sem impressão.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
nasouza
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 20 Jul 2009 17:57
Localização: Santa Isabel do Ivai - Pr

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por nasouza »

Utilizei esta rotina que postei, somente mudei o : oPrinter:FormType := 61, e mesmo imprimindo apenas 22 linhas ao terminar ele entende que o formulario tenha 67 linhas e salta para proxima folha, sera que nao tem jeito?
locio
Usuário Nível 2
Usuário Nível 2
Mensagens: 98
Registrado em: 27 Out 2006 14:21

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por locio »

Caro Laudelino,

Estou enviando para você um exemplo de como eu faço para imprimir em matricial conforme a sua necessidade:

Código: Selecionar todos

PROCEDURE EXEMPLO

    LOCAL PRN, NOME_ARQ

    NOME_ARQ = 'TESTE.TXT'

    SET DEVICE TO PRINT
    SET PRINTER TO &NOME_ARQ
    set print on
    set console off

    SETPRC(00,00)
    @ 00,00 SAY ""

    LINHA = 0

    WHILE LINHA < 32

       @ LINHA,01 SAY LINHA
       LINHA = LINHA + 1

    ENDDO

    @ PROW()+1,00 SAY ''
    SETPRC(00,00)
    LINHA = 0

    set device to scre
    SET PRINTER TO
    set console on
    set print off

    PRN:=getdefaultprinter()
    ret:=printfileraw(PRN,NOME_ARQ)

RETURN


Espero ter lhe auxiliado.

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

Re: Win32Prn - Salto de Pagina apos impressao

Mensagem por sygecom »

nasouza escreveu:Utilizei esta rotina que postei, somente mudei o : oPrinter:FormType := 61, e mesmo imprimindo apenas 22 linhas ao terminar ele entende que o formulario tenha 67 linhas e salta para proxima folha, sera que nao tem jeito?
Como é uma impressora matricial, você pode fazer como o colega Locio postou, use o PrintFileRaw() para imprimir como se fosse em clipper, se não funcionar eu arisco a dizer que pode ser problema de configuração na sua impressora.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder