Página 1 de 1

winprn cortando papel na bematech

Enviado: 19 Ago 2019 14:34
por Itamar M. Lins Jr.
Ola!
Eu ainda não resolvi de forma definitiva como fica a configuração na hora de informar o tamanho da página.
Se é papel continuo, como configurar ? No modo raw fica blz.

Saudações,
Itamar M. Lins Jr.

winprn cortando papel na bematech

Enviado: 19 Ago 2019 16:06
por Itamar M. Lins Jr.
Ola!
Eu já tinha postado aqui...Parece que continua na mesma.Imprime blz na impressora virtual do windows, mas na bematech ela corta.

Código: Selecionar todos

**********************************
Function PrintTH(cArq,cPrint)
**********************************
*
*
Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0

hb_default(@cPrint,win_PrinterGetDefault())

if empty(aPrn)
   hwg_Msginfo('Não há impressoras instaladas')
   return .f.
endif
If cPrint == Nil
   cPrint := win_PrinterGetDefault()
EndIf

cText := memoread(cArq)
nLinh := mlcount(cText)
nTL   := (nLinh/5)
oPrn  := win_prn():New(cPrint)
oPrn :LandScape   := .F.
oPrn :FormType    := WIN_DMPAPER_USER
oPrn :PaperLength := 11*25.4*nTL
oPrn :PaperWidth  := 3*25.4*10
oPrn :Copies      := 1

if !oPrn:Create()
    hwg_Msginfo("Não foi criado documento.")
    Return nil
EndIf
if !oPrn:StartDoc("Cozinha: "+cArq)
   hwg_Msginfo("Erro na Impressora.")
   Return nil
EndIf

oPrn:SetColor( HB_WIN_RGB_BLACK )
oPrn:SetFont( "Lucida Console", 15, { 4, -70 } )

  For n := 1 to nLinh
      oPrn:Textout(memoline(cText,,n),.t.)
  Next
  oPrn:NewLine()
  oPrn:NewLine()  
  oPrn:EndDoc()

Return .T.
Saudações,
Itamar M. Lins Jr.

winprn cortando papel na bematech

Enviado: 19 Ago 2019 16:13
por rubens
Corta na qtde de itens ou na largura ?

Rubens

winprn cortando papel na bematech

Enviado: 19 Ago 2019 16:21
por Kapiaba
Veja se ajuda:

Código: Selecionar todos

FUNCTION PrintWin( cPrinter, cArq )

   LOCAL oPrn := Nil, aPrn := Win_PrinterList( .T. , .F. ), __nColFixed, ;
         cLinha, oElemento, lImp := .F.

   cPrinter := hb_DefaultValue( cPrinter, Win_PrinterGetDefault() )
   cArq     := hb_DefaultValue( cArq, "" )
   
   IF Empty( cArq )

      MsgStop( "Arquivo de impressão deve ser informado", "Erro" )
      RETURN .F.

   ENDIF

   IF Empty( aPrn )

      MsgStop( "Não há impressoras instaladas", "Erro" )
      RETURN .F.

   ENDIF
   
   FOR EACH oElemento IN aPrn
      IF Upper( oElemento[1] ) = Upper( cPrinter )
         //oElemento[1] //Nome da impressora
         //oElemento[2] //Porta onde a impressora está ligada
         lImp := .T.
      ENDIF
   NEXT
  
   IF ! lImp

      MsgStop( "Impressora " + cPrinter + " não está instalada." + ;
               hb_Eol() + "Entre em contato com o helpdesk", "Erro" )
      RETURN Nil

   ENDIF
  
   oPrn := Win_Prn():New( cPrinter )

   oPrn:FormType   := WIN_DMPAPER_USER
   
   oPrn:PaperWidth := 3 * 26.4 * 10
   
   oPrn:Copies := 1
 
   IF ! oPrn:Create()

      MsgStop( "Não foi criado documento.", "Erro de Impressão" )

      oPrn:Destroy()

      RETURN Nil

   ENDIF
  
   IF ! oPrn:StartDoc( "DocPrint" )

      MsgStop( "Erro na Impressora.", "Erro de Impressão" )

      oPrn:Destroy()

      RETURN Nil

   ENDIF

   oPrn:SetFont( "Lucida Console", 8, 0 )

   __nColFixed := 0

   PrintCabec( .T. , oPrn, hb_DirBase() + "fazenda.bmp" )
  
   FT_FUSE( cArq )
   
   DO WHILE ! FT_FEOF()

      cLinha := FT_FREADLN()
      cLinha := IF( Empty( cLinha ), " ", cLinha )

      oPrn:SetPos( __nColFixed )
      oPrn:Textout( cLinha, .T. )

      FT_FSKIP()

   ENDDO
  
   FT_FUSE()
   
   PrintCabec()

   oPrn:EndDoc()
   
   oPrn:Destroy()
   
   oPrn := Nil

RETURN .T.

FUNCTION PrintCabec( lInicio, oPrn, cBitFile )

   LOCAL __nLinha := 50, __nColuna := 100, __nHandleFile, _i, I

   STATIC __oBMP
   STATIC __nWidth
   STATIC __nHeight

   lInicio  := hb_DefaultValue( lInicio, .F. )
   cBitFile := hb_DefaultValue( cBitFile, "" )
   
   IF lInicio

      IF ! Empty( cBitFile ) .AND. __oBMP = Nil
         fi_Initialise()
         __nHandleFile := fi_Load( FIF_BMP, cBitFile, BMP_DEFAULT )
         __nWidth      := fi_GetWidth( __nHandleFile )
         __nHeight     := fi_GetHeight( __nHandleFile )
         fi_DeInitialise()
      ENDIF

      oPrn:SetPrc( 0, 0 ) // 1, 0
      
      oPrn:SetPrc( oPrn:pRow(), 4 )

      FOR I := 1 TO 10
         oPrn:Textout( " ", .T. )
      NEXT
      
      IF ! Empty( cBitFile )
         IF hb_vfExists( cBitFile )
            IF __oBMP = Nil
               __oBMP := Win_BMP():New()
               IF !__oBMP:loadFile( cBitFile )
                  RETURN Nil
               ENDIF
               //oBmp:Draw( oPrn, { nColuna, nLinha, nWidth, nHeight } )
               /* Note: Can also use this method to print bitmap */
               //__oBmp:Rect := { __nColuna, __nLinha, __nWidth, __nHeight }
               //oPrn:DrawBitmap( __oBmp )
            ENDIF
            __oBMP:Draw( oPrn, { __nColuna, __nLinha, __nWidth, __nHeight } )
         ENDIF
      ENDIF
   ELSE
      IF __oBMP != Nil
         __oBMP:Destroy()
         __nWidth  := Nil
         __nHeight := Nil
         __oBMP    := Nil
      ENDIF
   ENDIF

RETURN Nil
Saudações.

winprn cortando papel na bematech

Enviado: 19 Ago 2019 16:26
por Itamar M. Lins Jr.
Ola!
É um velho problema. Corta no comprimento do papel. É bobina! tem que imprimir tudo. Quando chega no tamanho da folha A4 corta.
Eu penso que é um erro da classe winprn do Harbour. Pois no ACBR e outros fica ok. Agora pq no XPS (visualizador) fica OK eu também não sei.
Não quero ficar mexendo na impressora Bematech para mudar o papel.

Saudações,
Itamar M. Lins Jr.

winprn cortando papel na bematech

Enviado: 19 Ago 2019 16:36
por Itamar M. Lins Jr.
Ola!
Kapiaba
oPrn:PaperWidth := 3 * 26.4 * 10
Tô mandando um rel. com mais de 80 linhas. Esse seu exemplo, (que eu já tinha visto) multiplica por *10... Tem que entender o código. Ai é que vai ficar menor mesmo.

Saldações,
Itamar M. Lins Jr.