方法说明:

1.s2w(string &content, int
length):将string类型的变量转换为wchar_t*类型,用于调用TextOut()方法时传参,其中length为需要转换的string的长度;


2.printTicket():打印主方法,在该方法内,我直接打印了一个strign,如果要打印很多的内容,需要组装一个string的数组,然后循环打印每一行。其中可以更改LOGFONT的属性来调节字体,左边距和上边距也可以在TextOut方法中赋不同的值来调节。
/** * 功能描述: 将string 转换为wchar_t* * @param string * @param int * @return
wchar_t* */ wchar_t* s2w(string &content, int length) { const char *str =
content.c_str(); length = strlen(str) + 1; wchar_t *t =
(wchar_t*)malloc(sizeof(wchar_t)*length); memset(t, 0, length*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, str, strlen(str), t, length); return t; } /** *
功能描述: 调用win32 API实现驱动打印 * @return bool */ bool printTicket() { //定义一个设备环境句柄 HDC
hdcprint; //定义一个打印作业 static DOCINFO di = { sizeof(DOCINFO),
(LPTSTR)TEXT("printer"), NULL }; //打印机名称 string name = "printerName";
//你的打印机驱动名称 //打开打印机驱动 if ((hdcprint = CreateDC(NULL, s2w(name, 0), NULL, NULL))
!= 0) { //开始执行一个打印作业 if (StartDoc(hdcprint, &di) > 0) { StartPage(hdcprint);
//打印机走纸,开始打印 SaveDC(hdcprint); //保存打印机设备句柄 int xDistance = 20; //左边距 //设置字体
LOGFONT logfont; ZeroMemory(&logfont, sizeof(LOGFONT)); logfont.lfCharSet =
DEFAULT_CHARSET; logfont.lfPitchAndFamily = DEFAULT_PITCH; logfont.lfWeight =
FW_NORMAL; //字体重量,正常 logfont.lfHeight = 20; //字体高度 logfont.lfWidth = 12; //字体宽度
//字体生效 HFONT hFont = CreateFontIndirect(&logfont); SelectObject(hdcprint,
hFont); //获取打印内容并进行类型转换 string content = "This is print content"; int length =
content.length(); wchar_t *t = s2w(content, length); //打印 TextOut(hdcprint,
xDistance, orgy, t, length); //恢复打印机设备句柄 RestoreDC(hdcprint, -1); //打印机停纸,停止打印
EndPage(hdcprint); //结束一个打印作业 EndDoc(hdcprint); } else { cout << "StartDoc
failed!" << endl; //输入errorCode string errorCode = to_string(GetLastError());
cout << "Error code is :" << errorCode << endl; return false; }
//用API函数DeleteDC销毁一个打印机设备句柄 DeleteDC(hdcprint); } else{
//MessageBox("没有默认打印机,或者没有安装打印机!"); cout << "CreateDC failed!" << endl;
//输入errorCode string errorCode = to_string(GetLastError()); cout << "Error code
is :" << errorCode << endl; return false; } return true; }
附:Windows API参考 <http://www.office-cn.net/t/api/api_content.htm>
在这里可以查看具体API的方法说明。

备注:该打印方法题主在佳博品牌的热敏打印机上实现没有问题,不保证针对所有打印机适用。


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信