Página 1 de 1

Impressão Acima de 132 colunas

Enviado: 31 Mar 2009 15:30
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

Re: Impressão Acima de 132 colunas

Enviado: 31 Mar 2009 19:47
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

Re: Impressão Acima de 132 colunas

Enviado: 01 Abr 2009 13:34
por asimoes
Olá Luciano,

Obrigado pela sua dica.

:)Pos

Re: Impressão Acima de 132 colunas

Enviado: 02 Abr 2009 12:26
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 


Re: Impressão Acima de 132 colunas

Enviado: 02 Abr 2009 15:03
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

Re: Impressão Acima de 132 colunas

Enviado: 02 Abr 2009 15:31
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