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,