Impressão Acima de 132 colunas

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Impressão Acima de 132 colunas

Mensagem por asimoes »

Amigos,

Usando win32prn, como faço a configuração para imprimir em papel A4 com mais de 132 colunas.
No meu caso tenho um relatório com 140 colunas.

[]´s
►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
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Impressão Acima de 132 colunas

Mensagem por Luciano Bonfim »

procedure configuraFonte
parameters oPrinter,nomeFonteImpressao
if letraComprimida
if totalColunas > 205
oPrinter:SetFont(nomeFonteImpressao,8,{3,-60})
else
oPrinter:SetFont(nomeFonteImpressao,8,{3,-60})
endif
else
oPrinter:SetFont(nomeFonteImpressao,10, 0)
endif
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Impressão Acima de 132 colunas

Mensagem por asimoes »

Olá Luciano,

Obrigado pela sua dica.

:)Pos
►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)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Re: Impressão Acima de 132 colunas

Mensagem por leandrolinauer »

Bom dia Simoes.

Eu estou com o mesmo problema que vc, tenho relatorios comprimidos para lx-300 com mais de 132 colunas, e qualquer configuração que eu faça na win32prn no setfont continua imprimindo apenas 132 colunas fazendo com que o resto caia para linha debaixo, ja mudei que consegui imprimir pequeno mais ainda mesmo assim não faz mais de 132 colunas.

Vc conseguiu resolver o seu problema? Poderia me dar uma mãozinha?

Grato

Código: Selecionar todos



Function ImpWIN32PRN(cArq,tamrel) // arquivo e tamanho da linha
Local cTexto, nLinhas, nA, cLinha, oPrinter:=win32prn()
oPrinter:New(cPrinter) //pega a escolhida
oPrinter:Landscape:=.F.  //VERTICAL .T. HORIZONTAL
oPrinter:FormType :=1 //9 //1 //9  //9 //12 // letter
oPrinter:Copies   :=1
oPrinter:SetPrintQuality(1) // qualidade da impressÆo 1 rascunho 2 normal 3 media 4melhor
oPrinter:Create() 
oPrinter:StartDoc() 
oPrinter:SetFont("Courier New",12,{3,-55},700,.F.,.F.) //1,18 -50  //7,1,18
nCol:=oPrinter:GetCharWidth() // largura da fonte em pixels
nLin:=oPrinter:GetCharHeight() // altura da fonte em pixels 

//abaixo tudo que ja tentei
//oPrinter:SetFont("Courier New",12,{3,-55},700,.F.,.F.) //1,18 -50
//oPrinter:SetFont("Courier New",8,{3,-60},700,.F.,.F.) //1,18 -50
//oPrinter:SetFont("Arial Narrow",8,{3,-60},700,.F.,.F.) //1,18 -50
//oPrinter:SetFont("Courier New",7,{0,15}) //1,18
//oPrinter:SetFont("Courier New",10,10) //10,10 normal
//oPrinter:SetFont("Courier New",7,14)  //07,14 comprimido
//oPrinter:SetFont("Courier New",7,{0,18}) //1,18
//oPrinter:SetFont('Courier New',7,{3,-50})  // Compressed print //
//oPrinter:SetFont("Courier New",7,{1,18}) //1,18
//oPrinter:SetFont("ARIAL",2,{1,18}) //1,18

//If TamRel>80
//   oPrinter:SetFont('Courier New',7,{1,18})
//   oPrinter:SetFont(,,16,,,,255)
//Else 
//   oPrinter:SetFont('Courier New',7,{1,18}) 
//   oPrinter:SetFont(,,06,,,,255)
//EndIf

oPrinter:TextOut(Space(tamrel),.T.)
cTexto  :=MemoRead(cArq)
nLinhas :=mLCount(cTexto,tamrel,1,.F.)


For nA:= 1 To nLinhas
    cLinha:=MemoLine(cTexto,tamrel,nA,1,.F.)
    If Left(AllTrim(cLinha),1)==Chr(12) //SALTO_PAGINA 
       oPrinter:NewPage() //eject
    ElseIf Left(AllTrim(cLinha),80)==Repl("Ä",80) //se for 196
       oPrinter:TextOut(Repl(hb_oemTOansI("-"),136),.T.)
    Else
       oPrinter:TextOut(hb_oemTOansI(cLinha),.T.)
//       oPrinter:TextOutAt(oPrinter:MM_TO_POSX(nA),oPrinter:MM_TO_POSY(005),cLinha)
//       oPrinter:TextOutAt(0*nCol,nA*nLin,hb_oemTOansI(cLinha))
    EndIf
Next
oPrinter:EndDoc() 
oPrinter:Destroy() 
Return NIL 

Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Impressão Acima de 132 colunas

Mensagem por asimoes »

Olá Leandro,
Eu resolvi usando a dica do Luciano,

Esta configuração atendeu o que eu estava precisando.
oPrinter:SetFont('Courier New',8,{3,-53})

Agora no seu caso seria melhor usar a PrintFileRaw() por estar imprimindo em uma Lx-300.

Coloque todas as sequencias escape para impressão:

Código: Selecionar todos

@ 00,00 SAY CHR(27) + "@"          //inicializa a impressora
@ 00,00 SAY CHR(27)+CHR(120)+CHR(0) // seleciona modo draft
@ 00,00 SAY CHR(27)+CHR(33)+CHR(1)  // 1=seleciona 12 cpp 0=10 cpp
@ 00,00 SAY CHR(27)+CHR(77)+CHR(15) // ativa modo condensado

Ex.: PrintFileRaw

Código: Selecionar todos


PROCEDURE Main()
      LOCAL cPrinter := GetDefaultPrinter()
      LOCAL cFile    := "arquivo.Txt"
      LOCAL nResult  := -1
      LOCAL cMsg     := "PrintFileRaw(): "

      CLS
      IF Empty( cPrinter )
         ? "Não há impressora Instalada."
         QUIT
      ENDIF

      nResult := PrintFileRaw( cPrinter, cFile, "Teste Impressão" )

      SWITCH nResult
      CASE -1
         cMsg += "Invalid parameters passed to function" ; EXIT
      CASE -2
         cMsg += "WinAPI OpenPrinter() call failed"      ; EXIT
      CASE -3
         cMsg += "WinAPI StartDocPrinter() call failed"  ; EXIT
      CASE -4
         cMsg += "WinAPI StartPagePrinter() call failed" ; EXIT
      CASE -5
         cMsg += "WinAPI malloc() of memory failed"      ; EXIT
      CASE -6
         cMsg += "File " + cFile + " not found"          ; EXIT
      DEFAULT
         cMsg += cFile + " Impressão OK!!!"
      END
      ? cMsg
   RETURN
►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)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Re: Impressão Acima de 132 colunas

Mensagem por leandrolinauer »

Boa tarde Simões

Obrigado pela ajuda, eu esqueci de mensionar que uso a lx-300 juntamente e a impressão em DOS esta super correta ainda, mas quando é uma impressora USB (jato de tinta ou laser em A4) não sai correto a impressão.

Exemplo:
Na lx-300 a impressão comprimida em 136 colunas (meus relatorios todos tem 136 colunas) imprime corretamente.
Na laser a impressão comprimida só imprime até 132 colunas e necessito dos dados finais do relatório ou outros 4 caracteres que não saem, conforme o exemplo do luciano teoricamente teria que funcionar, mas usando a configuração "oPrinter:SetFont(nomeFonteImpressao,8,{3,-60})" só muda que o relatorio fica menor em largura, mas se colocar 136 caracteres continuam indo para a linha debaixo.


Grato.
Leandro
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Responder