1
我正在尝试使用CreateFont加载Code 128字体,因此我可以在纸条上输出条形码。 CreateFont不返回NULL,但似乎无法找到正确的字体,并加载其他内容,因为我将代码打印为纯文本。在POS打印机上打印条形码字体
这是条码功能。
void EpicSlipPrinter::addBarcode (const QString& text)
{
HFONT tempFont = CreateFont (60 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , L"Code 128");
oFont = (HFONT)SelectObject (mPrinterHandle , tempFont);
INT ixPosition = iPaperWidth/2;
SIZE sz = getTextDimensions (text , 3 , 3 , 600 , 0 , 0);
SetTextAlign (mPrinterHandle , TA_CENTER);
TextOut (mPrinterHandle , ixPosition , iyPosition , text , text.length());
SelectObject (mPrinterHandle , oFont);
DeleteObject(tempFont);
}
文本参数是绝对正确的所以我认为正在发生的是的CreateFont找不到指定的字体和默认到别的东西。字体被正确加载,并且可以从Windows应用程序中选择,如果我在Word中输入代码,那么我会得到一个可以从扫描仪读取的条形码。
我的问题是没有人知道为什么CreateFont不加载代码128或如果有另一个问题,我失踪了?
只要我活着,我永远不会理解微软的字体映射器。字体名称应该是最重要的输入,但它不是。 –
@Mark Ransom:始终使用字体名称的问题在于,尝试在其他脚本中打印文本时,您不会获得字体链接。较新的API,如DirectWrite,似乎完全避免了这个charset遗留问题。 –
虽然它与文档不太一致,但我认为你总是可以使用DEFAULT_CHARSET,这似乎给了字体名称的先例。 (它适用于Marlett和我试过的其他特殊符号字体。 我没有Code 128.) –