Imprimir condensado usando WIN_PRN

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

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

asimoes escreveu: Essas linhas duplicadas é assim mesmo? ou a idéia é destacar na impressão?
é isso que estou tentando dizer há muito tempo...
essas linhas não são duplicadas, elas são assim, por exemplo:

VENDAS POR CLIENTE>>>>>>>>>>>>>>>>>>>>>VENDAS POR CLIENTE
CLIENTE: 0001 WAL>>>>>>>>>>>>>>>>>>>>>>>CLIENTE: 0001 WAL
END.: RUA FIEFJIEFJAEIFJEFJFIEJEFIJEFIJ>>>>>END.: RUA FIEFJIEFJAEIFJEFJFIEJEFIJEFIJ
===================================>>>> ===================================

Ou seja, deveria ser assim, mas, está imprimindo como se houvesse uma quebra de linha (estou falando da forma como se trabalhasse como set printer to) e aí quando chega a exatos 80 caracteres na linha, há um tipo de ENTER e a impressão continua na próxima linha, dando essa impressão de duplicação.
No exemplo acima, ficando assim:
VENDAS POR CLIENTE>>>>>>>>>>>>>>>>>>>>>VENDAS
POR CLIENTE
CLIENTE: 0001 WAL>>>>>>>>>>>>>>>>>>>>>>>CLIENTE:
0001 WAL
END.: RUA FIEFJIEFJAEIFJEFJFIEJEFIJEFIJ>>>>>END.: RUA
FIEFJIEFJAEIFJEFJFIEJEFIJEFIJ
===================================>>>>> ===================================
(obs.: substitua o cactere ">" por espassos)
Agora consegui explicar o que está acontecendo? Por isso que disse que talvez exista algo que limita em 80 caracteres (isso transformado em pixels). Eu estive lendo em inglês o guia de referências da WIN32PRN do xharbour (não achei nada da WinPrn do harbour) e tentei desde ontem, madrugada afora, até hoje na parte da manhã traduzir (meia boca, me perdoem), que está na minha mensagem anterior e no meu "site", mas, percebi que "alguém" pode estar enganado ou um pouco equivocado, ao pensar que winprn não tem nada a ver com set printer to, pois existe sim, nos MÉTODOS alguma coisa que seja semelhante ao SET PRINTER TO.

Mas, quanto a este ENTER ou quebra de linha quando completa 80 caracteres, não consegui entender.

obrigado "asimoes"!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Imprimir condensado usando WIN_PRN

Mensagem por asimoes »

Mostra o código da impressão.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Imprimir condensado usando WIN_PRN

Mensagem por Jairo Maia »

Olá microvolution,

Isso está ocorrendo porque o tamanho da linha está excedendo o tamanho limite de impressão. Acho que você precisa ajustar o tamnho da fonte. Tente alterar essa linha que está assim:

Código: Selecionar todos

oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
Para:

Código: Selecionar todos

oPrn:SetFont('courier new' , 12, { 1, 20 }, 0, .F., .F.)
E veja como fica.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Imprimir condensado usando WIN_PRN

Mensagem por asimoes »

Outra sugestão pra você não ficar gerando papel com teste.

Instala uma impressora pdf (cutepdf writer ou Pdf Architect) e define como padrão.

Vai gerar o pdf e você vê como está saindo a impressão.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

asimoes escreveu:Mostra o código da impressão.
oimmm pra não ficar enchendo muito este tópico com o código repetidas vezes, V.Sa. não se importa de voltar uma ou 2 páginas e rever o código? Na verdade, é o mesmo desde o início do tópico que foi criado pelo nosso professor Jairo.
asimoes escreveu: Instala uma impressora pdf (cutepdf writer ou Pdf Architect) e define como padrão.
bacana, sempre fico me perguntando sobre a sua assinatura eletrônica a despeito "responsabilidade com meio ambiente..."
bom, nunca usei esse treco de cutPDF mas sempre fiquei curioso. Aliás já está instalado junto com as opções e impressora.
Eu preciso economizar tinta, papel e impressora... agora vou usar só esse treco "cutepdf".
Bom, eu mandei pra ele, que aqui no meu cpu, chama-se "cutPDF writer"... mas, quando direciono pra ele, apresenta a seguinte mensagem:
CutePDF Writer must be used with PS2PDF converter.
Please follow the instructions in Readme to download a free converter.
E agora, José, ou melhor "asimoes"?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Jairo Maia escreveu:E veja como fica.
"asimoes"consegui fazer o CutePDF funcionar... que joia maravilhosa né?
opa... :? ficou do mesmo jeito. vejam a imagem do pdf:
15-1212 - erro winprn 80 colunas2.png
agora deu pra vcs ver pra entender melhor o que está acontecendo?
só pra reprisar: parece que não importa o tamanho da fonte, quando completa 80 caracteres, há uma quebra de linha (CR) e dá um ENTER (sozinho) e parte pra próxima linha. Por isso que dá esta impressão de "impressão duplicada".

???? :% :(
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Imprimir condensado usando WIN_PRN

Mensagem por Jairo Maia »

microvolution, seu código postado anteriormente sofreu bastante alteração até agora. Poste novamente sua função PrintWinPrn( cArq, cPrint ), que é sua função que lê o arquivo linha a linha e envia a impressora.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

eis o código atual. Por favor, não entendam mau o "tanto de comentário" que existem nele, pois podia ter tirado, mas, deixei de propósito pra ver as alterações que fui fazendo:

Código: Selecionar todos

Function PrintWinPrn( cArq, cPrint)
 Local oPrn, aPrn := WIN_PrinterGetDefault(), n := 0
 // Local oPrn, aPrn := GetPrinters(), n := 0

 oPrn:=Win_Prn():New(cPrint)

 oPrn:SetColor( HB_WIN_RGB_GREEN ) // não funciona com HBMK2
 // oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 oPrn:CharSet(255)
 oPrn:Copies    := 1
 oPrn:Landscape := .F.
 oPrn:formType  := WIN_DMPAPER_A4
 // oPrn:pageWidth:= 160
 if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   // oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   // oPrn :SetFont( "Courier New", 12, { 1, 20 }, 0, .F., .F. )
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensad // oPrn :SetColor( HB_WIN_RGB_RED )
 oPrn:Create()
 oPrn:StartDoc("Impressão USB")
 // ?'após o create/startDoc'
 // wait
/* mudei lá pra baixo ///// 10/12/15w 
 oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_RED )
 oPrn:Copies := 1
 oPrn:CharSet(255)
 if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   // oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
 // ? 'após o oPrn - dentro de PrintWinPrn'
 // wait
 // mudei lá pra baixo 10/12/15w  ==============*/
 If !oPrn:Create()
  Alert("Nao foi criado o documento de Impressao")
  Return nil
 EndIf

 If !oPrn:StartDoc("Imprimindo Documento")
  Alert("Erro na Impressora")
  Return nil
  // else // acrescentado para mostrar na tela que a impressão foi p/USB 7/12/15w
  // Alert("Imprimindo na Impressora (multifuncional/laser) USB") // acrescentado para mostrar na tela que a impressão foi p/USB 7/12/15w
 EndIf

 // HB_CDPSelect("PT850")

 SetPrc(0,0)
 cText := MemoRead( cArq ) 
 nLinh := MlCount( cText )
 nCor  := nil
 mCor  := {}
 aadd (mCOR,{'Preta','Azul','Verde','Vermelha'})
 ********** acrescentado p/o usuário escolher a cor da impressão 10/12/15w ***********
/* ******** ELIMINADO TEMPORARIAMENTE 1/12/15W
 While nCor != 0
  @ 1, 0 SAY "Selecione a cor da impressão:"
  @ 2, 0 TO MaxRow(), MaxCol()
  nCor := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, mCor, .T.,, nCor )
  IF nCor != 0
    if nCOR =1
      // oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLACK )
      exit
    endif
    if nCOR =2
      oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
      exit
    endif
    if nCOR =3
      oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_GREEN )
      exit
    endif
    if nCOR =4
      oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_RED )
      exit
    endif
  Endi
 EndDo
 ******** ELIMINADO TEMPORARIAMENTE 1/12/15W */

/* 
 If !oPrn:Create()
  Alert("Nao foi criado o documento de Impressao")
  Return nil
 EndIf
*/ 
 ********** acrescentado p/o usuário escolher a cor da impressão 10/12/15w ***********
/* *** mudei de local p/ ver se imprime corretamente 12/12/15w.
 oPrn:SetColor( HB_WIN_RGB_GREEN ) // não funciona com HBMK2
 // oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 // oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_GREEN )
 oPrn:Copies := 1
 oPrn:CharSet(255)
 if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   // oPrn:pageWidth:= 160
   // oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   // oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
   oPrn :SetFont( "Courier New", 12, { 1, 20 }, 0, .F., .F. )
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
 */ **** mudei de local p/ ver se imprime: 12/12/15w.
 // ? 'após o oPrn - dentro de PrintWinPrn'
 // wait
// oPrn:SetColor( HB_WIN_RGB_RED ) // não funciona com HBMK2
 For n := 1 to nLinh
  oPrn:TextOut(HB_AnsiToOem(MemoLine(cText,,n)),.t.)
  // ? nLinh
  // wait
 Next
 oPrn:EndDoc()
 oPrn:Destroy()

 // HB_CDPSelect( "PTISO")

Return .t.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Imprimir condensado usando WIN_PRN

Mensagem por asimoes »

Anexa o arquivo da impressão.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

Prezados companheiros...
estou eu aqui (como já disse: desde o nascer do sol até o entardecer, anoitecer, madrugar) na frente deste computador, sem fazer mais nada, a não ser isso...
então com meus "butões" comecei a repensar que talvez o problema não esteja na rotina e sim na geração do MemoWrit pela array cCupom.

Pois então, fiz o seguinte:
peguei apenas a Função de impressão (onde funciona o WinPrn), esta mesma que V.Sas. me pediram que eu postasse novamente, peguei também a função que invoca-a, e coloquei as 2 num único arquivo que chamei de TESTE2.PRG, seguindo a orientação do Eolo e de demais, que ficou assim (só pra desencargo de consciência):

Código: Selecionar todos

func main ()
// #include 'gtwvg.ch'
#include 'hbwin.ch'

  public cCupom, nPrn :=1, mUSBPRN, eol := Chr(13) + Chr(10), aPrn := Win_PrinterList(), mUSB := .f. // para imprimir em impressora USB usando WIN_PRN/harbour 6/12/15w // essa linha veio do pci10227 p/que todos os módulos a usem p/ imprimir USB 8/12/15w. outra observação era PRIVATE e mudei p/ PUBLIC
         While nPrn != 0
            @ 1, 0 SAY "Selecione a impressora:"
            @ 2, 0 TO MaxRow(), MaxCol()
            nPrn := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, aPrn, .T.,, nPrn )
            IF nPrn != 0
               // PrintWinPrn( "&vendas", aPrn[ nPrn ] )
               PrintWinPrn( "0001.tmp", aPrn[ nPrn ] )
               // PrintWinPrn( "ARQ_USB", aPrn[ nPrn ] )
               // MsgInfo ('Extrato direcionado com sucesso p/ impressora USB','SiCCA - extrato') // NÃO FUNCIONOU NA GTWVG 11/12/15W.
               // MENSAGEM ('Extrato direcionado com sucesso p/ impressora USB','SiCCA - extrato')
               inkey(3)
               // PrintWinPrn( '&mCDCLIENTE..tmp', aPrn[ nPrn ] )
               // PrintWinPrn( 'mCDCLIENTE.TMP', aPrn[ nPrn ] )
               // PrintWinPrn( VENDAS, aPrn[ nPrn ] )
               // keyboard chr (27)
               exit
            Endi
         EndDo
retu nil
         
Function PrintWinPrn( cArq, cPrint)
 Local oPrn, aPrn := WIN_PrinterGetDefault(), n := 0
 // Local oPrn, aPrn := GetPrinters(), n := 0

 oPrn:=Win_Prn():New(cPrint)

 oPrn:SetColor( HB_WIN_RGB_GREEN ) // não funciona com HBMK2
 // oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 oPrn:CharSet(255)
 oPrn:Copies    := 1
 oPrn:Landscape := .F.
 oPrn:formType  := WIN_DMPAPER_A4
 // oPrn:pageWidth:= 160
 // if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   // oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   oPrn :SetFont( "Courier New", 12, { 1, 20 }, 0, .F., .F. )
   // oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 // else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   // oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 // endif // acrescentado p/imprimir condensad // oPrn :SetColor( HB_WIN_RGB_RED )
 oPrn:Create()
 oPrn:StartDoc("Impressão USB")
 // ?'após o create/startDoc'
 // wait
/* mudei lá pra baixo ///// 10/12/15w 
 oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_RED )
 oPrn:Copies := 1
 oPrn:CharSet(255)
 if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   // oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
 // ? 'após o oPrn - dentro de PrintWinPrn'
 // wait
 // mudei lá pra baixo 10/12/15w  ==============*/
 If !oPrn:Create()
  Alert("Nao foi criado o documento de Impressao")
  Return nil
 EndIf

 If !oPrn:StartDoc("Imprimindo Documento")
  Alert("Erro na Impressora")
  Return nil
  // else // acrescentado para mostrar na tela que a impressão foi p/USB 7/12/15w
  // Alert("Imprimindo na Impressora (multifuncional/laser) USB") // acrescentado para mostrar na tela que a impressão foi p/USB 7/12/15w
 EndIf

 // HB_CDPSelect("PT850")

 SetPrc(0,0)
 cText := MemoRead( cArq ) 
 nLinh := MlCount( cText )
 nCor  := nil
 mCor  := {}
 aadd (mCOR,{'Preta','Azul','Verde','Vermelha'})
 ********** acrescentado p/o usuário escolher a cor da impressão 10/12/15w ***********
/* ******** ELIMINADO TEMPORARIAMENTE 1/12/15W
 While nCor != 0
  @ 1, 0 SAY "Selecione a cor da impressão:"
  @ 2, 0 TO MaxRow(), MaxCol()
  nCor := AChoice( 3, 1, MaxRow() - 1, MaxCol() - 1, mCor, .T.,, nCor )
  IF nCor != 0
    if nCOR =1
      // oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLACK )
      exit
    endif
    if nCOR =2
      oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
      exit
    endif
    if nCOR =3
      oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_GREEN )
      exit
    endif
    if nCOR =4
      oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_RED )
      exit
    endif
  Endi
 EndDo
 ******** ELIMINADO TEMPORARIAMENTE 1/12/15W */

/* 
 If !oPrn:Create()
  Alert("Nao foi criado o documento de Impressao")
  Return nil
 EndIf
*/ 
 ********** acrescentado p/o usuário escolher a cor da impressão 10/12/15w ***********
/* *** mudei de local p/ ver se imprime corretamente 12/12/15w.
 oPrn:SetColor( HB_WIN_RGB_GREEN ) // não funciona com HBMK2
 // oPrn:SetColor( HB_WIN_RGB_YELLOW, HB_WIN_RGB_BLUE )
 // oPrn:SetPen( WIN_PS_SOLID, 1, HB_WIN_RGB_GREEN )
 oPrn:Copies := 1
 oPrn:CharSet(255)
 if DCI10999->TP_RECIBO=1 .or. DCI10999->TP_RECIBO=2 // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 1 ou 2 ->',DCI10999->TP_RECIBO
   // wait
   // oPrn:pageWidth:= 160
   // oPrn:SetFont('courier new' , 17, { 1, 17 }, 0, .F., .F.)
   // oPrn :SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
   oPrn :SetFont( "Courier New", 12, { 1, 20 }, 0, .F., .F. )
 else // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
   // ?'recibo 3 ou outro ->',DCI10999->TP_RECIBO
   // wait
   oPrn:SetFont( "Lucida Console", 8, { 3, -50 } )
 endif // acrescentado p/imprimir condensado ou não, depende do tipo de recibo 7/12/15w
 */ **** mudei de local p/ ver se imprime: 12/12/15w.
 // ? 'após o oPrn - dentro de PrintWinPrn'
 // wait
// oPrn:SetColor( HB_WIN_RGB_RED ) // não funciona com HBMK2
 For n := 1 to nLinh
  oPrn:TextOut(HB_AnsiToOem(MemoLine(cText,,n)),.t.)
  // ? nLinh
  // wait
 Next
 oPrn:EndDoc()
 oPrn:Destroy()

 // HB_CDPSelect( "PTISO")
Return .t.
Daí compilei tudo usando o seguinte (.HBP):

Código: Selecionar todos

-oTESTE2
teste2.prg
ERRORSYSGT.PRG

gtwvg.hbc
HBWIN.HBC
XHB.HBC
HBCT.HBC

-m
-quiet
Pelo TESTE2.BAT abaixo:

Código: Selecionar todos

HBMK2 TESTE2.hbp > COMPLOG.TXT 2>&1
Após, executei e, advinhem?
Não é "o que você está pensando"... não funcionou como esperado. Imprimiu no CutePDF a mesma coisa da última imagem postada.
Então, será que o problema não está relacionado ao ARRAY cCupom que só aceita (por linha) 80 colunas?
Sei lá, nesta altura do campeonato, qualquer chute pra tentar acertar o gol tá valendo...

Se puderem, compilem, executem e tirem suas próprias conclusões!
Ah!, não criei a ARRAY novamente (como podem observar) usei o arquivo "0001.TMP" criado pelo meu programa. Isso é que está me fazendo acreditar que o problema esteja nele.
0001.zip
FAVOR RENOMEAR A EXTENSÃO DE .ZIP PARA .TMP
(1.05 KiB) Baixado 267 vezes
O arquivo acima não é .ZIP, só a extensão para que este fórum o aceitasse o modifiquei. Favor mudar de .zip para .TMP.

alguém tem mais alguma ideia?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Imprimir condensado usando WIN_PRN

Mensagem por asimoes »

A rotina que gera o arquivo de impressão tem alguma coisa estranha:

São 2 colunas??
Screen Shot 12-12-15 at 08.07 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Imprimir condensado usando WIN_PRN

Mensagem por asimoes »

Até no ultraedit aparece da mesma forma, tenho pra mim que o erro está na criação do arquivo de impressão.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Imprimir condensado usando WIN_PRN

Mensagem por microvolution »

asimoes escreveu:A rotina que gera o arquivo de impressão tem alguma coisa estranha:
prezado professor, não tem nada de estranho.
Eu vou ajudar-lhe a me ajudar.
Tenho no meu sistema (desde os tempos do clipper e para o SET PRINTER TO), um menu de configurações. Neste menu, tem "parâmetros gerais" do sistema. Um deles é sobre o tipo de impressão (condensado, normal, em colunas, etc). Então neste caso é assim com a variável TP_RECIBO que está aí no código:
se ela conter 1 := todo os relatórios de (orçamento, baixar, extrato) imprimirá condensado (tamanho 80 colunas). Este tipo é para o cliente que possui impressora matricial e usa bobina 2 vias.
se 2 := o relatório será duplicado lado a lado (como V.Sa. está vendo). Neste caso é para o cliente que não quer usar bobina 2 vias e usa papel picotado (tamanho carta). Com esta opção, ele (o cliente meu) rasga ao meio o (recibo, extrato ou orçamento) e fica com uma via e passa a outra para o cliente. Neste caso a impressão é um pouco mais que 160 colunas, ou seja, duas impressões de 80 colunas na mesma linha, mais o space(xx) para dar espaço pra cortar.
já a opção 3:= é semelhante a primeira, só que no lugar de chr(15) é impressão draft normal.

Ok?
Consegui esclarecer mais essa dúvida?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Imprimir condensado usando WIN_PRN

Mensagem por Jairo Maia »

Olá Alexandre e Microvolution, veja:

Microvolution, substitua nesse exemplo que você postou esse bloco:

Código: Selecionar todos

 For n := 1 to nLinh
  oPrn:TextOut(HB_AnsiToOem(MemoLine(cText,,n)),.t.)
  // ? nLinh
  // wait
 Next
Por este:

Código: Selecionar todos

 oPrn:NewLine()
 oPrn:NewLine()
 oPrn:SetFont( "Courier New", 12, { 1, 17 }, 0, .F., .F. )
 For n := 1 to nLinh
  oPrn:TextOut(HB_AnsiToOem(PadC(AllTrim(MemoLine(cText,254,n)),oPrn:MaxCol())),.t.)
 Next
Limpe tudo e faça os ajustes em seu aplicativo.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Imprimir condensado usando WIN_PRN

Mensagem por asimoes »

Ok,

Então segue minha função de teste que funciona:

Para este exemplo tem que usar hbnf.hbc

Código: Selecionar todos

FUNCTION MAIN()
PRIVATE nPagina, i
   PrintWin("0001.txt", , .f., 132)
RETURN Nil

**********************************
FUNCTION PrintWin(cArq, cPrint, lLand, nTam)
**********************************
LOCAL oPrn, aPrn:=WIN_PrinterList(), __nColFixed, cBitMap:=""

   hb_Default(@cArq, "")
   hb_Default(@cPrint, WIN_PrinterGetDefault())
   hb_Default(@lLand, .F.)
   hb_Default(@nTam, 80)

   If Empty(cArq)
      Alert('Arquivo de impressão deve ser informado')
      Return .f.
   Endif
   
   If  Empty(aPrn)
      Alert('Não há impressoras instaladas')
      Return .f.
   Endif
  
   oPrn := win_prn():New(cPrint)
   oPrn :LandScape  := .F.
   oPrn :FormType   := WIN_DMPAPER_A4//LETTER//A4
   oPrn :Copies     :=  1
   //oPrn:AskProperties := .T.
   
   if !oPrn:Create()
      Alert("Não foi criado documento.")
      Return Nil
   EndIf
  
   if !oPrn:StartDoc("ImpWindows"+hb_ntos(nTam))
      Alert("Erro na Impressora.")
      Return Nil
   EndIf

   oPrn:SetColor( HB_WIN_RGB_BLACK )

   Switch nTam
   Case 80
      oPrn:SetFont("Lucida Console",11,0) // 80 Normal
      exit
   Case 90
      oPrn:SetFont("Lucida Console", 8, { 3, -35 } ) //90 colunas
      exit
   Case 100
      oPrn:SetFont("Lucida Console", 8, { 3, -39 } ) //100 colunas
      exit
   Case 132   
      oPrn:SetFont("Lucida Console", 8, { 3, -51 } ) //132 colunas
      exit
   Case 140
      oPrn:SetFont("Lucida Console", 8, { 3, -54 } ) //140 colunas
      exit
   EndSwitch
   
   __nColFixed:= 3 * oPrn:CharWidth //Margem esquerda
  
   nPag:=1
   
   nLin:=1

   lEject     :=.F.

   FT_FUSE( cArq )
   DO WHILE !FT_FEOF()
      cLinha:=FT_FREADLN()
      lEject:=( Chr(12) $ cLinha )
      nEject:=HB_AT(Chr(12), cLinha)
      IF nEject > 0
         cLinha:=Left(cLinha, nEject - 1)
      ENDIF
      If FT_FRECNO() > 1
         cLinha:=If( Empty(cLinha)," ",cLinha )
      Endif
      oPrn:SetPos( __nColFixed )
      oPrn:Textout( cLinha, .T. )
      FT_FSKIP()
      If nEject > 0 .AND. !FT_FEOF()
         nPag ++
         oPrn:NewPage()
      Endif
      If ( oPrn:MaxRow() ) <= oPrn:Prow() // Usa "oPrn:NewPage()" para iniciar nova pagina
         nPag ++
         oPrn:NewPage()
      Endif
  Enddo
  
  FT_FUSE()

  oPrn:EndDoc()

RETURN .T.
Arquivo gerado com este código:
Screen Shot 12-12-15 at 08.36 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder