admin 管理员组文章数量: 887021
手头有一个佳博 GP-L80180 热敏打印机,该打印机有USB口 ,串口,还有一个接口,不是RJ45网口,应该是用来连接钱箱的。
开发包 80开发包\POSDLL+V1.40\POSDLL演示例程\POSDLLDemo_VC\PosdllDemo.exe
界面如下:
该软件,用串口的方式 可以打印成功,需要仔细看附带的说明书
用USB口的方式,没有通信成功。
用驱动程序的方式,可以打印成功,前提是正确安装了驱动。
安装驱动的方法:
80开发包\GP80DRVCN V12\GP80DRVCN V12.exe
安装过程和说明书保持一致:
主要是注意:
不要安装 USB 虚拟串口端口 驱动
要选择 GP-L80180 Series
选择对应端口的时候,选择USB001 Virtual Printer Port for USB,不要选别的LPT或者COM端口
驱动安装成功之后,在win7 64位系统的开始菜单,点击 设备和打印机
会看到如下界面:
测试一下 能够是否正常打印,
给GP-L80180 打印机上电,然后通过USB线 连接到 PC。
打印出来的小票的样式为:
这样表明 驱动安装成功了。
PosdllDemo 使用驱动方式打印
80开发包\POSDLL+V1.40\POSDLL演示例程\POSDLLDemo_VC\PosdllDemo.exe
使用POSDLL.dll 库 驱动方式打印的代码
驱动方式打印 和串口 等其他方式打印,其中一个不同点,就是
需要VC_POS_StartDoc 和VC_POS_EndDoc
基本流程如下:
VC_POS_Open
VC_POS_StartDoc
print
VC_POS_EndDoc
BOOL GPL801_OpenDev_USB(void)
{
BOOL bRet ;
int ret ;
g_hComm = VC_POS_Open(_T("GP-L80180 Series"),0,0,0,0,POS_OPEN_PRINTNAME);
if (g_hComm != INVALID_HANDLE_VALUE) //判断打开端口函数返回值
{
printf("GPL801_OpenDev_USB Open OK\r\n");
//return true;
}
else
{
printf("GPL801_OpenDev_USB Open Fail\r\n");
return false;
}
bRet = VC_POS_StartDoc();
if(bRet == TRUE){
printf("VC_POS_StartDoc Success \r\n");
}else{
return false;
}
ret = VC_POS_Reset();
printf("VC_POS_Reset ret = %d\r\n",ret);
if(ret != POS_SUCCESS){
printf("VC_POS_Reset Fail\n");
return false;
}
int nRet = VC_POS_SetMotionUnit(180, 180);
if(POS_SUCCESS != nRet)
{
printf("VC_POS_SetMotionUnit Error %d\r\n",nRet);
return false;
}
VC_POS_SetMode(POS_PRINT_MODE_STANDARD);
VC_POS_SetRightSpacing(0);
VC_POS_SetLineSpacing(100);
VC_POS_S_TextOut("GP POS Printer", 50, 2, 3, POS_FONT_TYPE_STANDARD,
POS_FONT_STYLE_NORMAL);
VC_POS_SetLineSpacing(35);
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
VC_POS_FeedLine();
// 切纸
VC_POS_CutPaper(POS_CUT_MODE_FULL, 0);
VC_POS_EndDoc();
VC_POS_Close();
return true;
}
输出的log:
GPL801_OpenDev_USB Open OK
VC_POS_StartDoc Success
VC_POS_Reset ret = 1001
Open OK
使用Win32 API打印原始数据(强烈建议)。
这可是微软的方法啊,不用在系统添加任何文件,同时又能保证打印机的正常使用,所以强烈建议。
参照:http://support.microsoft/kb/138594
下载下来:rawprn.exe
解压出来:rawprint 工程:
运行如下指令:
RawPrint.exe GP-L80180 123.txt
GP-L80180 是打印机 共享出来的 名字
输出:
Attempting to send file [123.txt] to printer [GP-L80180].
Data sent to printer.
123.txt中的内容为:
\x0D\x1B\x40
OK打印完成
\x1D\x56\x41\x00
代码如下:RawPrint.cpp
#include <Windows.h>
#include <StdIO.h>
// **********************************************************************
// PrintError - uses printf() to display error code information
//
// Params:
// dwError - the error code, usually from GetLastError()
// lpString - some caller-defined text to print with the error info
//
// Returns: void
//
void PrintError( DWORD dwError, LPCTSTR lpString )
{
#define MAX_MSG_BUF_SIZE 512
TCHAR *msgBuf;
DWORD cMsgLen;
cMsgLen = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, dwError,
MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) &msgBuf,
MAX_MSG_BUF_SIZE, NULL );
printf( TEXT("%s Error [%d]:: %s\n"), lpString, dwError, msgBuf );
LocalFree( msgBuf );
#undef MAX_MSG_BUF_SIZE
}
// end PrintError
// **********************************************************************
// **********************************************************************
// ReadFileWithAlloc - allocates memory for and reads contents of a file
//
// Params:
// szFileName - NULL terminated string specifying file name
// pdwSize - address of variable to receive file bytes size
// ppBytes - address of pointer which will be allocated and contain file bytes
//
// Returns: TRUE for success, FALSE for failure.
//
// Notes: Caller is responsible for freeing the memory using GlobalFree()
//
BOOL ReadFileWithAlloc( LPTSTR szFileName, LPDWORD pdwSize, LPBYTE *ppBytes )
{
HANDLE hFile;
DWORD dwBytes;
BOOL bSuccess = FALSE;
// Validate pointer parameters
if( ( pdwSize == NULL ) || ( ppBytes == NULL ) )
return FALSE;
// Open the file for reading
hFile = CreateFile( szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
PrintError( GetLastError(), TEXT("CreateFile()") );
return FALSE;
}
// How big is the file?
*pdwSize = GetFileSize( hFile, NULL );
if( *pdwSize == (DWORD)-1 )
PrintError( GetLastError(), TEXT("GetFileSize()") );
else
{
// Allocate the memory
*ppBytes = (LPBYTE)GlobalAlloc( GPTR, *pdwSize );
if( *ppBytes == NULL )
PrintError( GetLastError(), TEXT("Failed to allocate memory\n") );
else
{
// Read the file into the newly allocated memory
bSuccess = ReadFile( hFile, *ppBytes, *pdwSize, &dwBytes, NULL );
if( ! bSuccess )
PrintError( GetLastError(), TEXT("ReadFile()") );
}
}
// Clean up
CloseHandle( hFile );
return bSuccess;
}
// End ReadFileWithAlloc
// **********************************************************************
// **********************************************************************
// RawDataToPrinter - sends binary data directly to a printer
//
// Params:
// szPrinterName - NULL terminated string specifying printer name
// lpData - Pointer to raw data bytes
// dwCount - Length of lpData in bytes
//
// Returns: TRUE for success, FALSE for failure.
//
BOOL RawDataToPrinter( LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount )
{
HANDLE hPrinter;
DOC_INFO_1 DocInfo;
DWORD dwJob;
DWORD dwBytesWritten;
// Need a handle to the printer.
if( ! OpenPrinter( szPrinterName, &hPrinter, NULL ) )
{
PrintError( GetLastError(), TEXT("OpenPrinter") );
return FALSE;
}
// Fill in the structure with info about this "document."
DocInfo.pDocName = TEXT("My Document");
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = TEXT("RAW");
// Inform the spooler the document is beginning.
if( (dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo )) == 0 )
{
PrintError( GetLastError(), TEXT("StartDocPrinter") );
ClosePrinter( hPrinter );
return FALSE;
}
// Start a page.
if( ! StartPagePrinter( hPrinter ) )
{
PrintError( GetLastError(), TEXT("StartPagePrinter") );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
return FALSE;
}
// Send the data to the printer.
if( ! WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten ) )
{
PrintError( GetLastError(), TEXT("WritePrinter") );
EndPagePrinter( hPrinter );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
return FALSE;
}
// End the page.
if( ! EndPagePrinter( hPrinter ) )
{
PrintError( GetLastError(), TEXT("EndPagePrinter") );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
return FALSE;
}
// Inform the spooler that the document is ending.
if( ! EndDocPrinter( hPrinter ) )
{
PrintError( GetLastError(), TEXT("EndDocPrinter") );
ClosePrinter( hPrinter );
return FALSE;
}
// Tidy up the printer handle.
ClosePrinter( hPrinter );
// Check to see if correct number of bytes were written.
if( dwBytesWritten != dwCount )
{
printf( TEXT("Wrote %d bytes instead of requested %d bytes.\n"), dwBytesWritten, dwCount );
return FALSE;
}
return TRUE;
}
// End RawDataToPrinter
// **********************************************************************
// **********************************************************************
// main - entry point for this console application
//
// Params:
// argc - count of command line arguments
// argv - array of NULL terminated command line arguments
//
// Returns: 0 for success, non-zero for failure.
//
// Command line: c:\>RawPrint PrinterName FileName
// sends raw data file to printer using spooler APIs
// written nov 1999 jmh
//
int main( int argc, char* argv[] )
{
LPBYTE pBytes = NULL;
DWORD dwSize = 0;
if( argc != 3 )
return printf( TEXT("Syntax: %s <PrinterName> <FileName>\n"), argv[0] );
printf( TEXT("Attempting to send file [%s] to printer [%s].\n"), argv[2], argv[1] );
if( ! ReadFileWithAlloc( argv[2], &dwSize, &pBytes ) )
return printf( TEXT("Failed to allocate memory for and read file [%s].\n"), argv[2] );
if( ! RawDataToPrinter( argv[1], pBytes, dwSize ) )
printf( TEXT("Failed to send data to printer.\n") );
else
printf( TEXT("Data sent to printer.\n") );
GlobalFree( (HGLOBAL)pBytes );
return 0;
}
// end main
// **********************************************************************
版权声明:本文标题:佳博GP-L80180 打印机 win7下 驱动方式 打印 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729151468h1324258.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论