|
|
@@ -952,11 +952,51 @@ void CPosPrinter::PrintWaimaiOrderBiaoqian(CWaimaiOrder& order)
|
|
|
std::string printer_usb = CSetting::GetParam("setting_biaoqian_printer_usb");
|
|
|
std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
|
|
|
|
|
|
+ //读取标签纸的规格和方向
|
|
|
+ int biaoqian_width, biaoqian_height;
|
|
|
+ std::string printer_guige = CSetting::GetParam("setting_biaoqian_printer_guige");
|
|
|
+ if (printer_guige == "40*30mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 40;
|
|
|
+ biaoqian_height = 30;
|
|
|
+ }
|
|
|
+ else if (printer_guige == "35*25mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 35;
|
|
|
+ biaoqian_height = 25;
|
|
|
+ }
|
|
|
+ else if (printer_guige == "30*25mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 30;
|
|
|
+ biaoqian_height = 25;
|
|
|
+ }
|
|
|
+ else if (printer_guige == "30*20mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 30;
|
|
|
+ biaoqian_height = 20;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ biaoqian_width = 40;
|
|
|
+ biaoqian_height = 30;
|
|
|
+ }
|
|
|
+
|
|
|
+ int nDIRECTION;
|
|
|
+ std::string printer_fangxiang = CSetting::GetParam("setting_biaoqian_printer_fangxiang");
|
|
|
+ if (printer_fangxiang == "1")
|
|
|
+ {
|
|
|
+ nDIRECTION = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ nDIRECTION = 0;
|
|
|
+ }
|
|
|
+
|
|
|
//连接usb端口
|
|
|
InitOneUsb(ws_printer_usb);
|
|
|
|
|
|
//初始化标签打印机
|
|
|
- BIAOQIAN_Reset();
|
|
|
+ BIAOQIAN_Reset(biaoqian_width, biaoqian_height, nDIRECTION);
|
|
|
|
|
|
std::vector<CWaimaiOrderItem> cur_printer_use = order.m_order_items;
|
|
|
|
|
|
@@ -987,55 +1027,80 @@ void CPosPrinter::PrintWaimaiOrderBiaoqian(CWaimaiOrder& order)
|
|
|
std::string textData = "";
|
|
|
|
|
|
curFoodNum++;
|
|
|
+
|
|
|
+ //打印小票自定义名称
|
|
|
+ string printer_tip_name = CLewaimaiString::UTF8ToANSI(order.m_printer_tip_name);
|
|
|
+ if (printer_tip_name.length() == 0)
|
|
|
+ {
|
|
|
+ printer_tip_name = "外卖";
|
|
|
+ }
|
|
|
|
|
|
std::string restaurant_number = order.m_restaurant_number;
|
|
|
- std::string order_num_info = "外卖 #" + CLewaimaiString::UTF8ToANSI(restaurant_number);
|
|
|
- textData += BIAOQIAN_TEXTGet(order_num_info, 16, 24, 1, 1);
|
|
|
+ std::string order_num_info = printer_tip_name + " #" + CLewaimaiString::UTF8ToANSI(restaurant_number);
|
|
|
+
|
|
|
+ //纸张宽度40mm的,是 320个点位(每mm8个),刚好可以放13个汉字,每个汉字宽度差不多是24,商品换行显示的时候,
|
|
|
+ //每行最多12个汉字,也就是空24个,因此这里设置12,刚好左右各空一半
|
|
|
+ textData += BIAOQIAN_TEXTGet(order_num_info, 12, 6, 1, 1);
|
|
|
|
|
|
//打印份数
|
|
|
std::string numInfo = to_string(curFoodNum) + "/" + to_string(foodNum);
|
|
|
- textData += BIAOQIAN_TEXTGet(numInfo, 160, 24, 1, 1);
|
|
|
+ textData += BIAOQIAN_TEXTGet(numInfo, 180, 6, 1, 1);
|
|
|
|
|
|
//每行最多显示12个汉字,这里要计算一下换行(要先转成ANSI格式)
|
|
|
std::string handle_food_name = CLewaimaiString::UTF8ToANSI(food_name);
|
|
|
- std::vector<std::string> foodNameVector = HandleBiaoqianFoodname(handle_food_name);
|
|
|
+ std::vector<std::string> foodNameVector = HandleBiaoqianFoodname(handle_food_name, biaoqian_width);
|
|
|
|
|
|
int nRow = 0;
|
|
|
|
|
|
//考虑是否用大号字体
|
|
|
bool is_big_name = false;
|
|
|
|
|
|
+ /*暂时全部打印小字,这里注释掉
|
|
|
if(foodNameVector.size() <= 2)
|
|
|
{
|
|
|
//不超过2行,可以用大的字体
|
|
|
is_big_name = true;
|
|
|
- }
|
|
|
-
|
|
|
- LOG_INFO("foodNameVector size:" << foodNameVector.size());
|
|
|
+ }*/
|
|
|
|
|
|
+ //LOG_INFO("foodNameVector size:" << foodNameVector.size());
|
|
|
+
|
|
|
for(std::vector<std::string>::iterator it = foodNameVector.begin(); it != foodNameVector.end(); it++)
|
|
|
{
|
|
|
LOG_INFO("nRow:" << nRow << ", 准备打印商品名字:" << (*it).c_str());
|
|
|
|
|
|
if(is_big_name)
|
|
|
{
|
|
|
- textData += BIAOQIAN_TEXTGet(*it, 16, 64 + 64 * nRow, 1, 2);
|
|
|
+ textData += BIAOQIAN_TEXTGet(*it, 12, 42 + 60 * nRow, 1, 2);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- textData += BIAOQIAN_TEXTGet(*it, 16, 64 + 32 * nRow, 1, 1);
|
|
|
+ textData += BIAOQIAN_TEXTGet(*it, 12, 42 + 30 * nRow, 1, 1);
|
|
|
}
|
|
|
|
|
|
nRow++;
|
|
|
}
|
|
|
|
|
|
+ int nPriceY;
|
|
|
+ if (biaoqian_height == 30)
|
|
|
+ {
|
|
|
+ nPriceY = 180;
|
|
|
+ }
|
|
|
+ else if (biaoqian_height == 25)
|
|
|
+ {
|
|
|
+ nPriceY = 140;
|
|
|
+ }
|
|
|
+ else if (biaoqian_height == 20)
|
|
|
+ {
|
|
|
+ nPriceY = 100;
|
|
|
+ }
|
|
|
+
|
|
|
//打印价格
|
|
|
std::string priceInfo = CLewaimaiString::UTF8ToANSI(food_price) + "元";
|
|
|
- textData += BIAOQIAN_TEXTGet(priceInfo, 16, 188, 1, 1);
|
|
|
+ textData += BIAOQIAN_TEXTGet(priceInfo, 12, nPriceY, 1, 1);
|
|
|
|
|
|
//打印订单号
|
|
|
std::string order_num = "订单号:" + CLewaimaiString::UTF8ToANSI(order.m_order_num);
|
|
|
- textData += BIAOQIAN_TEXTGet(order_num, 16, 218, 1, 1);
|
|
|
+ textData += BIAOQIAN_TEXTGet(order_num, 12, nPriceY + 30, 1, 1);
|
|
|
|
|
|
WriteData(textData);
|
|
|
|
|
|
@@ -1805,11 +1870,11 @@ void CPosPrinter::POS_OutBmp(std::wstring ImagePath)
|
|
|
delete[] dataTmp;
|
|
|
}
|
|
|
|
|
|
-void CPosPrinter::BIAOQIAN_Reset()
|
|
|
+void CPosPrinter::BIAOQIAN_Reset(int nWidth, int nHeight, int nDirection)
|
|
|
{
|
|
|
char endTag[3] = {0x0d, 0x0a, 0x00};
|
|
|
|
|
|
- std::string size = "SIZE 40 mm, 30 mm";
|
|
|
+ std::string size = "SIZE " + to_string(nWidth) + " mm," + to_string(nHeight) + " mm";
|
|
|
size += endTag;
|
|
|
|
|
|
std::string gap = "GAP 2 mm,0 mm";
|
|
|
@@ -1821,6 +1886,9 @@ void CPosPrinter::BIAOQIAN_Reset()
|
|
|
std::string density = "DENSITY 12";
|
|
|
density += endTag;
|
|
|
|
|
|
+ std::string DIRECTION = "DIRECTION " + to_string(nDirection);
|
|
|
+ DIRECTION += endTag;
|
|
|
+
|
|
|
std::string REFERENCE = "REFERENCE 0,0";
|
|
|
REFERENCE += endTag;
|
|
|
|
|
|
@@ -1833,7 +1901,7 @@ void CPosPrinter::BIAOQIAN_Reset()
|
|
|
std::string cls = "CLS";
|
|
|
cls += endTag;
|
|
|
|
|
|
- std::string data = size + gap + speed + density + REFERENCE + PEER + TEAR + cls;
|
|
|
+ std::string data = size + gap + speed + density + DIRECTION + REFERENCE + PEER + TEAR + cls;
|
|
|
|
|
|
WriteData(data);
|
|
|
}
|
|
|
@@ -2172,16 +2240,33 @@ std::string CPosPrinter::HandleFoodTotalPrice(std::string oldprice, int guige)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-std::vector<std::string> CPosPrinter::HandleBiaoqianFoodname(std::string oldname)
|
|
|
+std::vector<std::string> CPosPrinter::HandleBiaoqianFoodname(std::string oldname, int nBiaoqianWidth)
|
|
|
{
|
|
|
std::vector<std::string> newnameArray;
|
|
|
int nHanzi, nZimu;
|
|
|
CalWord(oldname, nHanzi, nZimu);
|
|
|
|
|
|
+ //文字内容的实际宽度,1个汉字算2个宽度,1个英文或者数字、标点算1个(40mm宽度最多打印12个汉字 )
|
|
|
int nWidth = nHanzi * 2 + nZimu;
|
|
|
|
|
|
//40 *30mmm的标签,宽度最大24
|
|
|
- int maxWidth = 24;
|
|
|
+ int maxWidth;
|
|
|
+ if (nBiaoqianWidth == 40)
|
|
|
+ {
|
|
|
+ maxWidth = 24;
|
|
|
+ }
|
|
|
+ else if (nBiaoqianWidth == 35)
|
|
|
+ {
|
|
|
+ maxWidth = 21;
|
|
|
+ }
|
|
|
+ else if (nBiaoqianWidth == 30)
|
|
|
+ {
|
|
|
+ maxWidth = 18;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ maxWidth = 24;
|
|
|
+ }
|
|
|
|
|
|
if(nWidth <= maxWidth)
|
|
|
{
|