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.) –