FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Send EPL Command to a USB printer
Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 09:48 AM

I try to send EPL commands to a USB Zebra Printer but I cannot.
How may I Use the tPrinter class to send only commands (raw data?)

With lpt printer i send data to lpt1. With usb I cannot do this.

Posts: 1195
Joined: Mon Oct 17, 2005 05:41 AM

Re: Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 10:16 AM

With the USB Zebra Printer, you don't need to send EPL-commands.
Normaly there is a windows-driver, and you can use that printer with FWH, like a normal printer

Regards,

Marc



FWH32+xHarbour | FWH64+Harbour | BCC | DBF | ADO+MySQL | ADO+MariaDB | ADO+SQLite
Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Re: Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 04:10 PM
Marc Vanzegbroeck wrote:With the USB Zebra Printer, you don't need to send EPL-commands.
Normaly there is a windows-driver, and you can use that printer with FWH, like a normal printer


Marc Thanks for your reply.
I allready use the Zebra Driver to print Labels. But now I need to print to "too small" labels and special printouts :
a. Small Barcode 129
b. Vertical Description
and some other that i must use EPL commands to do it.
Posts: 1195
Joined: Mon Oct 17, 2005 05:41 AM

Re: Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 04:15 PM

JimTheo,

You can also print barcode and vertical text using the windows printer-driver.

I don't know what you mean with 'too small'. Is it a small font?

Regards,

Marc



FWH32+xHarbour | FWH64+Harbour | BCC | DBF | ADO+MySQL | ADO+MariaDB | ADO+SQLite
Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 06:17 AM

I Finally, used the Zebra Designer Driver Pass-through Mode and it works nice.
Here is the link https://km.zebra.com/kb/index?page=content&id=SO8099 with more information.

EPL2 is usefull when you need to print i.e. vertical Barcode and Horizontal description an price to a Label.

Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 06:19 AM

I found code to .net for send raw data to a printer driver.
It uses winspool.drv functions.
My problem is how to declare the DOCINFO type

 Private Declare Function StartDocPrinter Lib "winspool.drv" Alias _
     "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
     pDocInfo As DOCINFO) As Long

Is there any idea?

Posts: 169
Joined: Mon Feb 25, 2008 02:42 AM

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 11:16 AM
Code (fw): Select all Collapse
#include "fivewin.ch"

#define FONT_BESAR    chr(27)+chr(33)+chr(16)
#define FONT_KECIL_1  chr(27)+chr(33)+chr(4)
#define FONT_KECIL_2  chr(27)+chr(33)+chr(5)

function Main()

   local cNext := "",i,cFile,nHandle
   local cPrinter := "Epson LX-300+" // this printer connected to USB port
   
   cFile := "printer.prn"
   
   if file(cFile)
      DeleteFile(cFile)
   endif
   
   nHandle := fcreate(cFile)
   
   
   if nHandle <= 0
      ?"Error Create File "+cFile
      return .f.
   endif   
           cNext += FONT_KECIL_1+"----------------------------------------------------------------"+CRLF                     
           cNext += ""+CRLF
           cNext += FONT_BESAR+"BIG FONT"+FONT_KECIL_1+" SMALL FONT"+CRLF
           cNext += ""+CRLF
           cNext += FONT_KECIL_1+"----------------------------------------------------------------"+CRLF                     
           
               fwrite(nHandle,cNext)
               fClose( nHandle )
               nHasil := PrintFileRaw(cPrinter,cFile)
               
               ferase(cFile)
               
               if nHasil < 0
                  ?"Error to print "+cFile
                  return .f.
               endif   
   
RETURN .t.


Best Regards
Fafi
Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 01:37 PM

Where may I find PrintFileRaw() code?

Posts: 169
Joined: Mon Feb 25, 2008 02:42 AM

Re: Send EPL Command to a USB printer

Posted: Fri Jul 05, 2013 11:29 PM
Code (fw): Select all Collapse
#pragma BEGINDUMP

#undef UNICODE

#include <windows.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"

#ifndef __XHARBOUR__
   #define ISCHAR( n )           HB_ISCHAR( n )
#endif

#define MAX_FILE_NAME 1024
#define BIG_BUFFER (1024*32)

HB_FUNC ( ENUMPRINTERS )
{
  UCHAR *Result ;
  DWORD x, Flags = PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS ;
  LPSTR Name = NULL ;
  DWORD Level = 5 ;
  PRINTER_INFO_5 *pPrinterEnum, *pFree;
  PRINTER_INFO_4 *pPrinterEnum4, *pFree4;
  DWORD cbBuf  ;
  DWORD BytesNeeded=0 ;
  DWORD NumOfPrinters=0 ;
  OSVERSIONINFO osvi ;  //  altered to check Windows Version
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx (&osvi);
  if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
  {
    Level = 4 ;
    EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum4,0,&BytesNeeded,&NumOfPrinters) ;
    if (BytesNeeded > 0)
    {
      Result = (UCHAR *) hb_xgrab(BytesNeeded) ;
      *Result = '\0' ;
      pFree4 = pPrinterEnum4 = (PRINTER_INFO_4 *)  hb_xgrab(BytesNeeded) ;
      cbBuf = BytesNeeded ;
      if (EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum4,cbBuf,&BytesNeeded,&NumOfPrinters))
      {
        for (x=0 ; x < NumOfPrinters ; x++, pPrinterEnum4++ )
        {
          strcat(Result,pPrinterEnum4->pPrinterName) ;
          strcat(Result,";") ;
        }
      }
      hb_retc(Result) ;
      hb_xfree(Result) ;
      hb_xfree(pFree4) ;
    }
    else
      hb_retc("") ;
  }
  else
   {
    EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum,0,&BytesNeeded,&NumOfPrinters) ;
    if (BytesNeeded > 0)
    {
      Result = (UCHAR *) hb_xgrab(BytesNeeded) ;
      *Result = '\0' ;
      pFree = pPrinterEnum = (PRINTER_INFO_5 *)  hb_xgrab(BytesNeeded) ;
      cbBuf = BytesNeeded ;
      if (EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum,cbBuf,&BytesNeeded,&NumOfPrinters))
      {
        for (x=0 ; x < NumOfPrinters ; x++, pPrinterEnum++ )
        {
          strcat(Result,pPrinterEnum->pPrinterName) ;
          strcat(Result,";") ;
        }
      }
      hb_retc(Result) ;
      hb_xfree(Result) ;
      hb_xfree(pFree) ;
    }
    else
      hb_retc("") ;
  }
}

HB_FUNC( WINDEFAULTPRINTER )
{
  DWORD x, y ;
  UCHAR lpReturnedString[MAX_FILE_NAME] ;
  x = GetProfileString("windows","device","",lpReturnedString,MAX_FILE_NAME-1);
  y = 0 ;
  while ( y < x && lpReturnedString[y] != ',' )
    y++ ;
  hb_retclen(lpReturnedString,y) ;
}

HB_FUNC( PRINTFILERAW )
{
  UCHAR  printBuffer[BIG_BUFFER], *cPrinterName, *cFileName, *cDocName ;
  HANDLE  hPrinter, hFile ;
  DOC_INFO_1 DocInfo ;
  DWORD nRead, nWritten, rVal = -1 ;
  if (ISCHAR(1) && ISCHAR(2))
  {
    cPrinterName= (UCHAR*)hb_parc(1) ;
    cFileName= (UCHAR*)hb_parc(2) ;
    if ( OpenPrinter(cPrinterName, &hPrinter, NULL) != 0 )
    {
      DocInfo.pDocName = (UCHAR*)hb_parc(3) ;
      DocInfo.pOutputFile = NULL ;
      DocInfo.pDatatype = "RAW" ;
      if ( StartDocPrinter(hPrinter,1,(char *) &DocInfo) != 0 )
      {
        if ( StartPagePrinter(hPrinter) != 0 )
        {
          hFile = CreateFile(cFileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)   ;
          if (hFile != INVALID_HANDLE_VALUE )
           {
            while (ReadFile(hFile, printBuffer, BIG_BUFFER, &nRead, NULL) && (nRead > 0))
            {
              if (printBuffer[nRead-1] == 26 )
                nRead-- ; // Skip the EOF() character
              WritePrinter(hPrinter, printBuffer, nRead, &nWritten) ;
            }
            rVal = 1 ;
            CloseHandle(hFile) ;
          }
          else
            rVal= -6 ;
          EndPagePrinter(hPrinter) ;  // 28/11/2001 10:16
        }
        else
          rVal = -4 ;
        EndDocPrinter(hPrinter);
      }
      else
        rVal= -3 ;
      ClosePrinter(hPrinter) ;
    }
    else
      rVal= -2 ;
  }
  hb_retnl(rVal) ;
}

#pragma ENDUMP
Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Re: Send EPL Command to a USB printer

Posted: Tue Jul 09, 2013 07:00 AM

Fafi thanks a lot for help.
I'll try the code.
I must compile it with bcc? (I'm not so familiar to C)

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Send EPL Command to a USB printer

Posted: Tue Jul 09, 2013 07:25 AM

Add all that code at the end of your fichero.prg and compile as you normally
Regards

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 169
Joined: Mon Feb 25, 2008 02:42 AM

Re: Send EPL Command to a USB printer

Posted: Tue Jul 09, 2013 01:58 PM
cnavarro wrote:Add all that code at the end of your fichero.prg and compile as you normally
Regards


Yes like this :

Code (fw): Select all Collapse
#include "fivewin.ch"

#define FONT_BESAR    chr(27)+chr(33)+chr(16)
#define FONT_KECIL_1  chr(27)+chr(33)+chr(4)
#define FONT_KECIL_2  chr(27)+chr(33)+chr(5)

function Main()

   local cNext := "",i,cFile,nHandle
   local cPrinter := "Epson LX-300+" // this printer connected to USB port
   
   cFile := "printer.prn"
   
   if file(cFile)
      DeleteFile(cFile)
   endif
   
   nHandle := fcreate(cFile)
   
   
   if nHandle <= 0
      ?"Error Create File "+cFile
      return .f.
   endif   
           cNext += FONT_KECIL_1+"----------------------------------------------------------------"+CRLF                     
           cNext += ""+CRLF
           cNext += FONT_BESAR+"BIG FONT"+FONT_KECIL_1+" SMALL FONT"+CRLF
           cNext += ""+CRLF
           cNext += FONT_KECIL_1+"----------------------------------------------------------------"+CRLF                     
           
               fwrite(nHandle,cNext)
               fClose( nHandle )
               nHasil := PrintFileRaw(cPrinter,cFile)
               
               ferase(cFile)
               
               if nHasil < 0
                  ?"Error to print "+cFile
                  return .f.
               endif   
   
RETURN .t.



#pragma BEGINDUMP

#undef UNICODE

#include <windows.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"

#ifndef __XHARBOUR__
   #define ISCHAR( n )           HB_ISCHAR( n )
#endif

#define MAX_FILE_NAME 1024
#define BIG_BUFFER (1024*32)

HB_FUNC ( ENUMPRINTERS )
{
  UCHAR *Result ;
  DWORD x, Flags = PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS ;
  LPSTR Name = NULL ;
  DWORD Level = 5 ;
  PRINTER_INFO_5 *pPrinterEnum, *pFree;
  PRINTER_INFO_4 *pPrinterEnum4, *pFree4;
  DWORD cbBuf  ;
  DWORD BytesNeeded=0 ;
  DWORD NumOfPrinters=0 ;
  OSVERSIONINFO osvi ;  //  altered to check Windows Version
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx (&osvi);
  if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
  {
    Level = 4 ;
    EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum4,0,&BytesNeeded,&NumOfPrinters) ;
    if (BytesNeeded > 0)
    {
      Result = (UCHAR *) hb_xgrab(BytesNeeded) ;
      *Result = '\0' ;
      pFree4 = pPrinterEnum4 = (PRINTER_INFO_4 *)  hb_xgrab(BytesNeeded) ;
      cbBuf = BytesNeeded ;
      if (EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum4,cbBuf,&BytesNeeded,&NumOfPrinters))
      {
        for (x=0 ; x < NumOfPrinters ; x++, pPrinterEnum4++ )
        {
          strcat(Result,pPrinterEnum4->pPrinterName) ;
          strcat(Result,";") ;
        }
      }
      hb_retc(Result) ;
      hb_xfree(Result) ;
      hb_xfree(pFree4) ;
    }
    else
      hb_retc("") ;
  }
  else
   {
    EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum,0,&BytesNeeded,&NumOfPrinters) ;
    if (BytesNeeded > 0)
    {
      Result = (UCHAR *) hb_xgrab(BytesNeeded) ;
      *Result = '\0' ;
      pFree = pPrinterEnum = (PRINTER_INFO_5 *)  hb_xgrab(BytesNeeded) ;
      cbBuf = BytesNeeded ;
      if (EnumPrinters(Flags,Name,Level,(LPBYTE) pPrinterEnum,cbBuf,&BytesNeeded,&NumOfPrinters))
      {
        for (x=0 ; x < NumOfPrinters ; x++, pPrinterEnum++ )
        {
          strcat(Result,pPrinterEnum->pPrinterName) ;
          strcat(Result,";") ;
        }
      }
      hb_retc(Result) ;
      hb_xfree(Result) ;
      hb_xfree(pFree) ;
    }
    else
      hb_retc("") ;
  }
}

HB_FUNC( WINDEFAULTPRINTER )
{
  DWORD x, y ;
  UCHAR lpReturnedString[MAX_FILE_NAME] ;
  x = GetProfileString("windows","device","",lpReturnedString,MAX_FILE_NAME-1);
  y = 0 ;
  while ( y < x && lpReturnedString[y] != ',' )
    y++ ;
  hb_retclen(lpReturnedString,y) ;
}

HB_FUNC( PRINTFILERAW )
{
  UCHAR  printBuffer[BIG_BUFFER], *cPrinterName, *cFileName, *cDocName ;
  HANDLE  hPrinter, hFile ;
  DOC_INFO_1 DocInfo ;
  DWORD nRead, nWritten, rVal = -1 ;
  if (ISCHAR(1) && ISCHAR(2))
  {
    cPrinterName= (UCHAR*)hb_parc(1) ;
    cFileName= (UCHAR*)hb_parc(2) ;
    if ( OpenPrinter(cPrinterName, &hPrinter, NULL) != 0 )
    {
      DocInfo.pDocName = (UCHAR*)hb_parc(3) ;
      DocInfo.pOutputFile = NULL ;
      DocInfo.pDatatype = "RAW" ;
      if ( StartDocPrinter(hPrinter,1,(char *) &DocInfo) != 0 )
      {
        if ( StartPagePrinter(hPrinter) != 0 )
        {
          hFile = CreateFile(cFileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)   ;
          if (hFile != INVALID_HANDLE_VALUE )
           {
            while (ReadFile(hFile, printBuffer, BIG_BUFFER, &nRead, NULL) && (nRead > 0))
            {
              if (printBuffer[nRead-1] == 26 )
                nRead-- ; // Skip the EOF() character
              WritePrinter(hPrinter, printBuffer, nRead, &nWritten) ;
            }
            rVal = 1 ;
            CloseHandle(hFile) ;
          }
          else
            rVal= -6 ;
          EndPagePrinter(hPrinter) ;  // 28/11/2001 10:16
        }
        else
          rVal = -4 ;
        EndDocPrinter(hPrinter);
      }
      else
        rVal= -3 ;
      ClosePrinter(hPrinter) ;
    }
    else
      rVal= -2 ;
  }
  hb_retnl(rVal) ;
}

#pragma ENDUMP
Posts: 15
Joined: Thu Sep 21, 2006 05:01 PM

Re: Send EPL Command to a USB printer

Posted: Wed Jul 10, 2013 07:27 AM

Thanks a lot.
I'll Try it.

Posts: 300
Joined: Wed Jul 11, 2007 11:06 AM

Re: Send EPL Command to a USB printer

Posted: Sun Jul 14, 2013 10:24 AM

Hi,

Could you post some code using USB Zebra Printer .

How to fix the size of labels ?

How to use a Isbt128 Font .

Thanks .

Posts: 169
Joined: Mon Feb 25, 2008 02:42 AM

Re: Send EPL Command to a USB printer

Posted: Sun Jul 14, 2013 08:11 PM
Jack wrote:Hi,

Could you post some code using USB Zebra Printer .

How to fix the size of labels ?

How to use a Isbt128 Font .

Thanks .


Tell me about ESC Command.. for Zebra Printer...
Please post here..thanks

Fafi,

Continue the discussion