первый

This commit is contained in:
2024-11-01 12:23:13 +05:00
parent 801d9d33fa
commit 0688c46a7e
226 changed files with 162921 additions and 0 deletions

View File

@ -0,0 +1,192 @@
//Reference: https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=72
#include "ESC_POS_Printer.h"
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
#else
#include <iostream>
#endif
//---------------------------------------------------------------------------
ESC_POS_Printer::ESC_POS_Printer()
{
m_hPrinter = NULL;
m_usb = false;
m_Serial = NULL;
}
//---------------------------------------------------------------------------
ESC_POS_Printer::~ESC_POS_Printer()
{
if (m_Serial != NULL)
{
close();
delete m_Serial;
}
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::openSerial(std::string ComNumber)
{
m_Serial->Open(ComNumber);
return true;
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::openUSB(std::wstring printerName)
{
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
bool result=true;
if (!OpenPrinter((LPWSTR)printerName.c_str(), &m_hPrinter, NULL))
result = false;
m_usb = true;
return result;
#else
std::string str( printerName.begin(), printerName.end() );
return openUSB(str);
#endif
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::openUSB(std::string printerName)
{
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
bool result=true;
if (!OpenPrinter((LPWSTR)printerName.c_str(), &m_hPrinter, NULL))
result = false;
m_usb = true;
return result;
#else
m_hPrinter = fopen(printerName.c_str(), "w");
if(m_hPrinter)
return true;
else
return false;
#endif
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::Start()
{
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
DWORD Level = 1;
std::wstring docName = L"Print ticket";
DOC_INFO_1 pDocInfo;
pDocInfo.pDocName = (LPWSTR)docName.c_str();
pDocInfo.pOutputFile = NULL;
pDocInfo.pDatatype = NULL;
bool result = true;
StartDocPrinter(m_hPrinter, Level, (BYTE*)&pDocInfo);
if (!StartPagePrinter(m_hPrinter))
result = false;
return result;
#else
return true;
#endif
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::End()
{
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
bool result = true;
if (!EndPagePrinter(m_hPrinter))
result = false;
if (!EndDocPrinter(m_hPrinter))
result = false;
return result;
#else
return true;
#endif
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::close()
{
if (m_Serial != NULL)
{
m_Serial->Close();
}
if (m_hPrinter != NULL)
{
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
if (!EndPagePrinter(m_hPrinter))
return false;
if (!EndDocPrinter(m_hPrinter))
return false;
ClosePrinter(m_hPrinter);
#else
if(fclose(m_hPrinter)==0)
return true;
else
return false;
#endif
}
return true;
}
//---------------------------------------------------------------------------
//width - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8)
//height - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//bitArray - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool ESC_POS_Printer::printImage(int width, int height, unsigned char* bitArray)
{
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
DWORD Written = 0;
int arLen = (width * height) / 8;
char bCmdPrint[] = { 0x1d, 0x76, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 };
int w = width;
int h = height;
bCmdPrint[4] = (((w / 8) >> 0) & 0xFF); //xL <20> xL and xH specify the horizontal direction data count for one bit image (xL + xH x 256) in bytes
bCmdPrint[5] = (((w / 8) >> 8) & 0xFF); //xH
bCmdPrint[6] = ((h >> 0) & 0xFF); //yL <20> yL and yH specify the vertical direction data count for one bit image (yL + yH x 256) in dots.
bCmdPrint[7] = ((h >> 8) & 0xFF); //yH
WritePrinter(m_hPrinter, bCmdPrint, sizeof(bCmdPrint), &Written);
WritePrinter(m_hPrinter, bitArray, arLen, &Written);
return arLen == Written;
#else
int Written = 0;
int arLen = (width * height) / 8;
char bCmdPrint[] = { 0x1d, 0x76, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 };
int w = width;
int h = height;
bCmdPrint[4] = (((w / 8) >> 0) & 0xFF); //xL <20> xL and xH specify the horizontal direction data count for one bit image (xL + xH x 256) in bytes
bCmdPrint[5] = (((w / 8) >> 8) & 0xFF); //xH
bCmdPrint[6] = ((h >> 0) & 0xFF); //yL <20> yL and yH specify the vertical direction data count for one bit image (yL + yH x 256) in dots.
bCmdPrint[7] = ((h >> 8) & 0xFF); //yH
Written = fwrite(bCmdPrint, sizeof(char), sizeof(bCmdPrint), m_hPrinter);
Written = fwrite(bitArray, sizeof(char), arLen, m_hPrinter);
return arLen == Written;
#endif
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::Feed()
{
char bCmdFeed[] = { 27, 100, 5 };
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
DWORD Written = 0;
WritePrinter(m_hPrinter, bCmdFeed, sizeof(bCmdFeed), &Written);
return Written == 3;
#else
int Written = 0;
Written = fwrite(bCmdFeed, sizeof(char), sizeof(bCmdFeed), m_hPrinter);
fflush(m_hPrinter);
return Written == 3;
#endif
}
//---------------------------------------------------------------------------
bool ESC_POS_Printer::Cut()
{
char bCmdCut[] = { 0x1B,0x6D };
#if defined(_WIN32) || defined(_WINDOWS) || defined(_BORLAND) || defined(__BORLANDC__)
DWORD Written = 0;
WritePrinter(m_hPrinter, bCmdCut, sizeof(bCmdCut), &Written);
return Written == 2;
#else
int Written = 0;
fwrite(bCmdCut, sizeof(char),sizeof(bCmdCut), m_hPrinter);
fflush(m_hPrinter);
return Written == 2;
#endif
}
//---------------------------------------------------------------------------