打印机

void Print(QPrinterInfo printerInfo)
{
bool bLeft = true;
QPrinter printer(printerInfo);
printer.setOrientation(QPrinter::Landscape);
// 设置打印机参数
printer.setPageSize(QPagedPaintDevice::A4);
QPainter painter(&printer);
POSConfigModal posConfigModal;

        //设置私有数据
NativePrint mainPrintConfig = posConfigModal.getMainPrint();
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setRenderHint(QPainter::TextAntialiasing, true);
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
QFont font = painter.font();
if (!mainPrintConfig.getFontFamily().isEmpty())
{
font.setFamily(mainPrintConfig.getFontFamily());
}
else
{
font.setFamily(GBK2UTF8("思源黑体 CN Light"));
}
if (mainPrintConfig.getFontSize() != 0)
{
font.setPointSizeF(mainPrintConfig.getFontSize());
}
else
{
font.setPointSizeF(8.5);
}
font.setBold(false);
painter.setFont(font);
painter.translate(mainPrintConfig.getOffset(), 0);
QRect rectPageLeft =  printer.pageRect();
QRect rectPageRight =  printer.pageRect();
QRect rectPage = rectPageLeft;


int width = rectPageLeft.width();
int height = rectPageLeft.height();
int nLeftMagin = 45;//width *0.04319;
int nTopMagin = 160;// height *0.2444;
int nRightMain = 140; //width *0.1262;
int nBottonMagin = 200;//height *0.2055;
rectPageLeft.setLeft(nLeftMagin);
rectPageLeft.setTop(nTopMagin);
rectPageLeft.setBottom(rectPageLeft.bottom() - nBottonMagin);
rectPageLeft.setRight(width/2 - nRightMain);


rectPageRight.setTop(nTopMagin);
rectPageRight.setBottom(rectPageRight.bottom() - nBottonMagin);
rectPageRight.setLeft(width/2 + nLeftMagin);
rectPageRight.setRight(width - nRightMain);


//drawFooter(printer, painter, true, pos_template.hasQrcodeImageUrl() && pos_template.getQrcodeImageUrl().length() > 0 );
QString strTemp;
QRect rect = rectPageLeft;
rectPage = rectPageLeft;
QRect reactNumber, rectName, rectListPrice, rectUnitPrice, rectDiscount, rectCount, rectAmount;
int nRowHeight = 30;
int top = 260;
int nSize = m_vec_NativeOrderLineCreateRequest.size();
qDebug()<< m_NativeOrderHeadCreateRequest.getJsonObj();

for (int i = 0; i <= nSize/7; i++)
{
//主要为了卡控正好是7的倍数,如商品有7个
if ((i+1)*7-6 >nSize)
{
break;
}
rect = rectPageLeft;
rectPage = rectPageLeft;
bLeft = true;
for (int iTemp=0; iTemp<2; iTemp++)
{


{
QFont sfont = painter.font();
sfont.setBold(true);
sfont.setPointSizeF(10);
sfont.setFamily(GBK2UTF8("Avenir LT 65 Medium"));
painter.setFont(sfont);
strTemp = QString(GBK2UTF8("NO.%1")).arg( m_NativeOrderHeadCreateRequest.getReferenceNumber()) ;//GBK2UTF8("销售单号:20180313000022");
painter.drawText(rectPage.left(), rect.top() + 5,  rectPage.width(), rectPage.height(), 0, strTemp, &rect);
sfont.setBold(false);
sfont.setPointSizeF(8.5);
painter.setFont(sfont);


}


{
QFont sfont = painter.font();
sfont.setFamily(GBK2UTF8("Avenir LT 65 Medium"));
painter.setFont(sfont);
QString strTime = m_NativeOrderHeadCreateRequest.getOrderTime();
strTime = strTime.left(10);
QDateTime dt = QDateTime::fromTime_t (strTime.toInt());
QDateTime time = QDateTime::fromTime_t(strTime.toInt()); 
QString ss = time.toString("yyyy/MM/dd hh:mm");
strTemp = QString(GBK2UTF8("DATE:%1")).arg(ss);// ;//m_NativeOrderHeadCreateRequest.getDateId()
qDebug()<<m_NativeOrderHeadCreateRequest.getDateId()<<strTime;
painter.drawText(rectPage.left(), rect.bottom() + 25,  rectPage.width(), rectPage.height(), 0, strTemp, &rect);


}




{


strTemp = QString(GBK2UTF8("VIP:%1")).arg(filterPhone(m_NativeMember.getCardNumber())) ;//;
painter.drawText(rectPage.left(), rect.bottom()+5,  rectPage.width(), rectPage.height(), 0, strTemp, &rect);
}


{


strTemp = QString(GBK2UTF8("SALES:%1")).arg(m_NativeOrderHeadCreateRequest.getSalesPersonName()) ;//;
painter.drawText(rectPage.left(), rect.bottom()+5,  rectPage.width(), rectPage.height(), 0, strTemp, &rect);
}


rect.setBottom(rect.bottom() + 20);

reactNumber.setRect(rectPage.left(), rect.bottom(), rectPage.width()* 2.5 / 10.0 , rectPage.height());
rectName.setRect(reactNumber.right()+5, rect.bottom(), rectPage.width()  * 2.5/ 10.0 , rectPage.height());
//rectListPrice.setRect(rectName.right(), rect.bottom(), rectPage.width() * 1 / 10.0, rectPage.height());
rectUnitPrice.setRect(rectName.right()+10, rect.bottom(), rectPage.width()* 1.5 / 10.0 , rectPage.height());
rectDiscount.setRect(rectUnitPrice.right()+8, rect.bottom(), rectPage.width()  * 1.5/ 10.0 , rectPage.height());
rectCount.setRect(rectDiscount.right()+8, rect.bottom(), rectPage.width() * 1 / 10.0, rectPage.height());
rectAmount.setRect(rectCount.right()+8, rect.bottom(), rectPage.width() * 1 / 10.0, rectPage.height());


QFont sfont = painter.font();
sfont.setFamily(GBK2UTF8("Avenir LT 45 Book"));
painter.setFont(sfont);
painter.drawText(reactNumber, 0, GBK2UTF8("Item No."), &rect);
painter.drawText(rectName, 0, GBK2UTF8("Description"), &rect);
//painter.drawText(rectListPrice, 0, GBK2UTF8("零售价"), &rect);
painter.drawText(rectUnitPrice, 0, GBK2UTF8("Unit-price"), &rect);
painter.drawText(rectDiscount, 0, GBK2UTF8("Discount"), &rect);
painter.drawText(rectCount, 0, GBK2UTF8("QTY."), &rect);
painter.drawText(rectAmount, 0, GBK2UTF8("Cost"), &rect);


rect = rectPageRight;
rectPage = rectPageRight;
bLeft = false;
//painter.drawLine(rectPage.left(),rect.bottom() + 5, rectPage.left()+ rectPage.width(), rect.bottom() + 5);
}



for (int j = 0; j < 7; j++)
{
int len = 7*i + j;


if (len > nSize-1)
{
continue;
}
rect = rectPageLeft;
rectPage = rectPageLeft;
bLeft = true;

for (int iTemp = 0; iTemp < 2; iTemp++)
{
//top = rect.bottom();
NativeOrderLineCreateRequest ol = m_vec_NativeOrderLineCreateRequest.at(j);


{


int bottom = 0;

rect.setBottom(top + nRowHeight*(j+1));
if (bLeft == true)
{
reactNumber.setRect(rectPageLeft.left(), rect.bottom(), rectPageLeft.width()* 2.5 / 10.0 , rectPageLeft.height());
}
else
{
reactNumber.setRect(rectPageRight.left(), rect.bottom(), rectPageLeft.width()* 2.5 / 10.0 , rectPageLeft.height());
}


rectName.setRect(reactNumber.right()+5, rect.bottom(), rectPageLeft.width()  * 2.5/ 10.0 , rectPageLeft.height());
//rectListPrice.setRect(rectName.right(), rect.bottom(), rectPageLeft.width() * 1 / 10.0, rectPageLeft.height());
rectUnitPrice.setRect(rectName.right()+10, rect.bottom(), rectPageLeft.width()* 1.5 / 10.0 , rectPageLeft.height());
rectDiscount.setRect(rectUnitPrice.right()+8, rect.bottom(), rectPageLeft.width()  * 1.5/ 10.0 , rectPageLeft.height());
rectCount.setRect(rectDiscount.right()+8, rect.bottom(), rectPageLeft.width() * 1 / 10.0, rectPageLeft.height());
rectAmount.setRect(rectCount.right()+8, rect.bottom(), rectPageLeft.width() * 1 / 10.0, rectPageLeft.height());


//
QRect rectTemp;
strTemp = ol.getItemNumber();
rectTemp = painter.boundingRect(reactNumber, Qt::TextWrapAnywhere, strTemp);
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;


strTemp = ol.getItemName();;//GBK2UTF8("五色水彩笔套装超长测试测试测试测试测试");
rectTemp = painter.boundingRect(rectName, Qt::TextFlag::TextWrapAnywhere, strTemp);
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;


rectTemp = painter.boundingRect(rectListPrice, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getListPrice()));
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;


rectTemp = painter.boundingRect(rectUnitPrice, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getUnitPrice()));
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;
//ol.getDiscountRate()


rectTemp = painter.boundingRect(rectDiscount, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getDiscountRate()));//GBK2UTF8("0.7")
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;


rectTemp = painter.boundingRect(rectCount, Qt::TextFlag::TextWrapAnywhere, QString("%1").arg(doubleToInt(ol.getQuantity())));
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;




rectTemp = painter.boundingRect(rectAmount, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getAmount()));
bottom = rectTemp.bottom() > bottom? rectTemp.bottom(): bottom;


qDebug()<<ol.getJsonObj();
strTemp = ol.getBarCode();
QFont sfont = painter.font();
bool b = strTemp.contains(QRegExp("[\\x4e00-\\x9fa5]+")); 
if(b)
{
sfont.setFamily(GBK2UTF8("思源黑体 CN Light"));
}
else
{
sfont.setFamily(GBK2UTF8("Avenir LT 45 Book"));
}
painter.setFont(sfont);
painter.drawText(reactNumber, Qt::TextFlag::TextWrapAnywhere, strTemp, &rect);
//QFont sfont = painter.font();
//QFont sOldFont = painter.font();
strTemp = ol.getItemName();
b = strTemp.contains(QRegExp("[\\x4e00-\\x9fa5]+")); 
if(b)
{
sfont.setFamily(GBK2UTF8("思源黑体 CN Light"));
}
else
{
sfont.setFamily(GBK2UTF8("Avenir LT 45 Book"));
}
painter.setFont(sfont);
painter.drawText(rectName, Qt::TextFlag::TextWordWrap, strTemp, &rect);
QFont soldFont = painter.font();
soldFont.setFamily(GBK2UTF8("Avenir LT 45 Book"));
painter.setFont(soldFont);

//top = rect.bottom() > top? rect.bottom(): top;


//painter.drawText(rectListPrice, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getListPrice()), &rect);
//top = rect.bottom() > top? rect.bottom(): top;


painter.drawText(rectUnitPrice, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getListPrice()), &rect);
//top = rect.bottom() > top? rect.bottom(): top;
int nDiscount = ol.getDiscountRate()*100;
painter.drawText(rectDiscount, Qt::TextFlag::TextWrapAnywhere, QString("%1%").arg(nDiscount), &rect);
//top = rect.bottom() > top? rect.bottom(): top;


painter.drawText(rectCount, Qt::TextFlag::TextWrapAnywhere, QString("%1").arg(doubleToInt(ol.getQuantity())), &rect);
//top = rect.bottom() > top? rect.bottom(): top;




painter.drawText(rectAmount, Qt::TextFlag::TextWrapAnywhere, amountToString(ol.getAmount()), &rect);
//top = rect.bottom() > top? rect.bottom(): top;


}


rect = rectPageRight;
rectPage = rectPageRight;
bLeft = false;


}


}


if (7*(i+1) < nSize)//i != nSize/7
{
printer.newPage();
top = 280;//rectPageLeft.top();
}
}
rect = rectPageLeft;
rectPage = rectPageLeft;
bLeft = true;
if (nSize > 7)
{
top = 280 +(nSize%7)*nRowHeight;
}
else
{
top = 300 +(nSize%7)*nRowHeight;
}
top = 600;

for (int k = 0; k < 2; k++)
{
rect.setBottom(top + 30);
if (bLeft == true)
{
reactNumber.setRect(rectPageLeft.left(), rect.bottom(), rectPageLeft.width()* 2.5 / 10.0 , rectPageLeft.height());
}
else
{
reactNumber.setRect(rectPageRight.left(), rect.bottom(), rectPageLeft.width()* 2.5 / 10.0 , rectPageLeft.height());
}


rectName.setRect(reactNumber.right()+5, rect.bottom(), rectPageLeft.width()  * 2.5/ 10.0 , rectPageLeft.height());
//rectListPrice.setRect(rectName.right(), rect.bottom(), rectPageLeft.width() * 1 / 10.0, rectPageLeft.height());
rectUnitPrice.setRect(rectName.right()+10, rect.bottom(), rectPageLeft.width()* 1.5 / 10.0 , rectPageLeft.height());
rectDiscount.setRect(rectUnitPrice.right()+8, rect.bottom(), rectPageLeft.width()  * 1.5/ 10.0 , rectPageLeft.height());
rectCount.setRect(rectDiscount.right()+8, rect.bottom(), rectPageLeft.width() * 1 / 10.0, rectPageLeft.height());
rectAmount.setRect(rectCount.right()+8, rect.bottom(), rectPageLeft.width() * 1 / 10.0, rectPageLeft.height());




{
strTemp = QString(GBK2UTF8("TOTAL"));
QFont sfont = painter.font();
sfont.setBold(true);
sfont.setPointSizeF(10);
painter.setFont(sfont);
qDebug()<<rect.bottom();
painter.drawText(rectDiscount.left(), 575,  rectPage.width(), rectPage.height(), 0, strTemp);
sfont.setBold(false);
sfont.setPointSizeF(8.5);
painter.setFont(sfont);


qDebug()<<rect.top();
strTemp = QString("%1").arg(m_NativeOrderHeadCreateRequest.getTotalCount()); // GBK2UTF8("7");
painter.drawText(rectCount.left(), 575,  rectPage.width(), rectPage.height(), 0, strTemp);
qDebug()<<rect.top();
QTextCodec *codec = QTextCodec::codecForName("UTF-8");//情况1
QTextCodec::setCodecForLocale(codec);
QString sTest = QString("¥");
strTemp = QString( GBK2UTF8("¥%1")).arg(amountToString(m_NativeOrderHeadCreateRequest.getRevenueAmount()));//GBK2UTF8("¥111.70");
painter.drawText(rectAmount.left(),575,  rectPage.width(), rectPage.height(), 0, strTemp);

}
qDebug()<<rect.bottom();
painter.drawLine(rectDiscount.left(),595, rectAmount.right(), 595);
QString stringPayMethod;
double oddAmount = 0;
if (m_vecPaymentLineCreateRequest.size() > 1)
{
stringPayMethod += QString(GBK2UTF8(" Others"));
}
else if(m_vecPaymentLineCreateRequest.size() == 1)
{
PaymentLineCreateRequest paymentLineCreateRequest = m_vecPaymentLineCreateRequest[0];
if (paymentLineCreateRequest.hasReturnTransactionId() ||  getFENAmount(paymentLineCreateRequest.getAmount()) == 0)
{
continue;
}
if (paymentLineCreateRequest.getType() == "CASH")
{
oddAmount = (paymentLineCreateRequest.getOddAmount());
/*dPayActualCashAmount = paymentLineCreateRequest.getActualPayAmount();
dOddAmount = paymentLineCreateRequest.getOddAmount();*/


//if (getFENAmount(dOddAmount) != 0)
//{
// strTemp = QString(GBK2UTF8("找零金额:%1")).arg(amountToString(dOddAmount));
// painter.drawText(0,  rect.bottom() +5,  rectPage.width(), rectPage.height(), Qt::AlignRight, strTemp);
//}


stringPayMethod += QString(GBK2UTF8(" Cash"));




}
else if (paymentLineCreateRequest.getType() == "CARD")
{


stringPayMethod += QString(GBK2UTF8(" Others"));


}
else if (paymentLineCreateRequest.getType() == "BANK")
{
stringPayMethod += QString(GBK2UTF8( " Pos"));
}
else if (paymentLineCreateRequest.getType() == "THIRD_PAY")
{
if (paymentLineCreateRequest.getPaymentMethod() == "ALIPAY")
{
stringPayMethod +=  QString(GBK2UTF8(" Alipay"));
}
else if (paymentLineCreateRequest.getPaymentMethod() == "WECHAT")
{
stringPayMethod +=  QString(GBK2UTF8(" Wechat"));
}



}
else if (paymentLineCreateRequest.getType() == "MALL" && paymentLineCreateRequest.getPaymentMethod() == "MALL" )
{
stringPayMethod += QString(GBK2UTF8(" Others"));
}
else if (paymentLineCreateRequest.getPaymentMethod() == "QCARD" && paymentLineCreateRequest.getType() == "MALL")
{
stringPayMethod += QString(GBK2UTF8(" Others"));




}
else if (paymentLineCreateRequest.getType() == "TAKEOUT")
{
stringPayMethod += QString(GBK2UTF8(" Others"));
//continue;
}
else if (paymentLineCreateRequest.getType() == "OTHER")
{
stringPayMethod += QString(GBK2UTF8(" Others"));
//continue;
}
else if (paymentLineCreateRequest.getType() == "PRE_PAID_CARD")
{
stringPayMethod += QString(GBK2UTF8(" Others"));
//continue;
}

}

painter.drawText(rectDiscount.left(), 600,  rectPage.width(), rectPage.height(), 0, stringPayMethod);



rect = rectPageRight;
rectPage = rectPageRight;
bLeft = false;
}
 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值