经过网上一番搜查,基本实现了汉字的打印。大概的方法是使用FNTHEX32.DLL封装的函数GETFONTHEX将汉字转换为图形代码;将该代码下载到打印机,并使用^XG调用图形即可打印出汉字。VC2008代码如下:存在个问题,如何能够分配足够而不浪费的空间来保存转换后的数据。 即char chBufferChineseZPL[1024]; //最大能保存1K的内容。如果汉字较多可能会溢出,除了分配很大的空间不知道还有什么办法。HINSTANCE DLLInst =LoadLibrary(_T("fnthex32.dll"));//dll下载http://download.csdn.net/source/982328
if (DLLInst == NULL)// 加载是否成功
{
int iResult = GetLastError();
strMessageBuffer.Format(_T("Load Dll error/n%d"), iResult);
AfxMessageBox(strMessageBuffer);
return FALSE;
}
char chBufferChineseZPL[1024]; //最大能保存1K的内容。如果汉字较多可能会溢出,除了分配很大的空间不知道还有什么办法。
GETFONTHEX pDLLAddress;
pDLLAddress=(GETFONTHEX)(GetProcAddress(DLLInst,"GETFONTHEX"));
if(pDLLAddress == NULL)//得到入口是否正确
{
int iResult = GetLastError();
strMessageBuffer.Format(_T("Get Dll address error/n%d"), iResult);
AfxMessageBox(strMessageBuffer);
}
pDLLAddress(lptSource,lptChineseFont,lptZPLFont,0,iHeight,iWidth,0,0,chBufferChineseZPL);
//pDLLAddress("汉字","宋体","hz",0,40,30,0,0,chBufferChineseZPL);
//函数参数依次为:要转换的汉字;汉字字体;转换后的字体名称;字体方向;字体高度;字体宽度;是否加粗;是否斜体;转换后的数据接收缓冲
CString strChineseZPL = (CString)chBufferChineseZPL;
FreeLibrary(DLLInst);
if (DLLInst == NULL)// 加载是否成功
{
int iResult = GetLastError();
strMessageBuffer.Format(_T("Load Dll error/n%d"), iResult);
AfxMessageBox(strMessageBuffer);
return FALSE;
}
char chBufferChineseZPL[1024]; //最大能保存1K的内容。如果汉字较多可能会溢出,除了分配很大的空间不知道还有什么办法。
GETFONTHEX pDLLAddress;
pDLLAddress=(GETFONTHEX)(GetProcAddress(DLLInst,"GETFONTHEX"));
if(pDLLAddress == NULL)//得到入口是否正确
{
int iResult = GetLastError();
strMessageBuffer.Format(_T("Get Dll address error/n%d"), iResult);
AfxMessageBox(strMessageBuffer);
}
pDLLAddress(lptSource,lptChineseFont,lptZPLFont,0,iHeight,iWidth,0,0,chBufferChineseZPL);
//pDLLAddress("汉字","宋体","hz",0,40,30,0,0,chBufferChineseZPL);
//函数参数依次为:要转换的汉字;汉字字体;转换后的字体名称;字体方向;字体高度;字体宽度;是否加粗;是否斜体;转换后的数据接收缓冲
CString strChineseZPL = (CString)chBufferChineseZPL;
FreeLibrary(DLLInst);
//的长度?如果是这样的话,就用
char *chBuferChinese;
chBufferChinese = new char[n]; //n为求出的长度。
.....
delete []chBufferChinese;
有没有办法做得跟CString一样,不在乎长度?