2017-03-31 207 views
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或如果有另一個問題,我失蹤了?

回答

1

您已經爲fdwCharSet指定了0,它對應於ANSI_CHARSET,因此字體映射器正在尋找支持當前代碼頁的東西。嘗試使用SYMBOL_CHARSET來處理這些特殊字體。

+0

只要我活着,我永遠不會理解微軟的字體映射器。字體名稱應該是最重要的輸入,但它不是。 –

+0

@Mark Ransom:始終使用字體名稱的問題在於,嘗試在其他腳本中打印文本時,您不會獲得字體鏈接。較新的API,如DirectWrite,似乎完全避免了這個charset遺留問題。 –

+0

雖然它與文檔不太一致,但我認爲你總是可以使用DEFAULT_CHARSET,這似乎給了字體名稱的先例。 (它適用於Marlett和我試過的其他特殊符號字體。 我沒有Code 128.) –