Page 1 of 1

Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 9:48 am
by JimTheo
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.

Re: Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 10:16 am
by Marc Vanzegbroeck
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

Re: Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 4:10 pm
by JimTheo
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.

Re: Send EPL Command to a USB printer

Posted: Mon Jul 01, 2013 4:15 pm
by Marc Vanzegbroeck
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?

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 6:17 am
by JimTheo
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.

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 6:19 am
by JimTheo
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?

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 11:16 am
by fafi

Code: Select all

#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

Re: Send EPL Command to a USB printer

Posted: Thu Jul 04, 2013 1:37 pm
by JimTheo
Where may I find PrintFileRaw() code?

Re: Send EPL Command to a USB printer

Posted: Fri Jul 05, 2013 11:29 pm
by fafi

Code: Select all


#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

 

Re: Send EPL Command to a USB printer

Posted: Tue Jul 09, 2013 7:00 am
by JimTheo
Fafi thanks a lot for help.
I'll try the code.
I must compile it with bcc? (I'm not so familiar to C)

Re: Send EPL Command to a USB printer

Posted: Tue Jul 09, 2013 7:25 am
by cnavarro
Add all that code at the end of your fichero.prg and compile as you normally
Regards

Re: Send EPL Command to a USB printer

Posted: Tue Jul 09, 2013 1:58 pm
by fafi
cnavarro wrote:Add all that code at the end of your fichero.prg and compile as you normally
Regards
Yes like this :

Code: Select all


#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

 
 
 

Re: Send EPL Command to a USB printer

Posted: Wed Jul 10, 2013 7:27 am
by JimTheo
Thanks a lot.
I'll Try it.

Re: Send EPL Command to a USB printer

Posted: Sun Jul 14, 2013 10:24 am
by Jack
Hi,

Could you post some code using USB Zebra Printer .

How to fix the size of labels ?

How to use a Isbt128 Font .

Thanks .

Re: Send EPL Command to a USB printer

Posted: Sun Jul 14, 2013 8:11 pm
by fafi
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,