2016-09-01 3 views
-1

Оригинальный вопрос, который я задал, был в C# Saving a form to image without anti aliasing , который я пытаюсь распечатать Code128 на принтере. Поскольку захват экрана ухудшает качество печати, я решил написать код непосредственно для печати. Все изображения и текст могут быть распечатаны правильно, кроме Code128Код C# 128 не распечатывается

Ниже приведены мои коды для печати Code128. Содержимое уже было создано правильно.

 SizeF sizeLoginID128 = e.Graphics.MeasureString(this.strUserID128, font1DText); 
     e.Graphics.DrawString(this.strUserID128, font1DText, Brushes.Black, fInfoStartX + TEXT_LEFT_MARGIN_OFFSET, fInfoStartY + TEXT_TOP_MARGIN_OFFSET); 

Шрифт можно найти в каталоге FONTS, и это шрифт истинного шрифта. На этапе проектирования графического интерфейса шрифт также отображается правильно. Однако, когда он распечатывается, в принтере отсутствует код 128.

ли кто-нибудь имеет ни малейшего представления, почему или я не делать вещи правильно снова

EDIT

По желанию здесь есть снимок экрана шрифта в папке FONT enter image description here

The декларация шрифта равна

Font font1DText = new Font("Code 128", 12); 

Содержание strUserID is ÌMac hine8Î

+0

__Code128__ - это имя штрих-кода шрифт. Если это не то, о чем вы говорите, пожалуйста, исправьте вопрос и бирку! Также скажите нам, какой шрифт, который вы используете __are__ и показываете, является объявлением переменной 'strUserID128'! – TaW

+1

Привет, TaW, я обновил вопрос. Пожалуйста, смотрите. Не знаете, какой тег неверен – ishtarsg

+0

А, так это __is__ штрих-код, который вы пытаетесь напечатать? В этом случае тег правильный! [Я видел проблему (или примерно такую ​​же) до] (http://stackoverflow.com/questions/35229541/barcode-128-space/35243321?s=1|3.5530#35243321), а затем смена шрифта была лучшее решение .. Символом 'Î' может быть проблема; Шрифты штрих-кода действительно просто для цифр, заглавной буквы и нескольких специальных кодов. – TaW

ответ

1

Глядя на довольно исчерпывающее Wikipedia статьи о Code 128 вы можете увидеть, что на самом деле есть три набора символов в нем, называется Code A, B и C.

128A (код Set A) - ASCII 00-95 (0-9, A-Z и коды управления), специальные символы и FNC 1-4

128B (код B) - ASCII 32-127 (0-9, A-Z, a -z), специальные символы и FNC 1-4

128C (код C) - 00-99 (кодирует две цифры с одной кодовой точкой) и FNC 1

Вы хотите закодировать смешанный случай строку, так что вы хотите использовать код B.

Использование регулярного Start Code B сигнал: Î (0xCC 204 ASCII) в качестве префикса и регулярного Стоп КодÓ (0xCE 206 ASCII) в качестве постфикса:

char StartCodeB = (char)204; 
char StopCode = (char)206; 

Вы можете построить закодированную строку как:

string stringToPrintAsBarCode = StartCodeB + "King Kong" + checkSum + StopCode; 

Btw: I found some bar code fonts to work better than others, например. когда дело доходит до печатных мест.

отметить также, что в дополнение к Start & Stop кодирует Code128 строка в кодировке также должна включать символ контрольной суммы а .. Если вы выходите из любой или все из этих трех символов напечатанный штрих-код не может быть сканируется !

В вашем примере символ «8» является символом контрольной суммы.

Вот процедура для вычисления контрольной суммы для данного текста и заданный начального кода:

static char checkSum128(string data, int startcode) 
{ 
    int sum = startcode; 
    for (int i = 0; i < data.Length; i++) 
    { 
     sum += (i + 1) * ((byte)(data[i]) - 32); 
    } 
    return (char)((sum % 103)+32); 
} 

А вот рабочая рутина, которая кодирует данный текст с заданным начальным кодом символом:

string EncodeToCode128(string text, char CodeABC) 
{ 
    char Stop = (char)206; 
    char StartCode = CodeABC == 'A' ? (char)203 : 
      CodeABC == 'C' ? (char)205 : (char)204; 

    char check = checkSum128(text, (byte)StartCode - 100); 

    return StartCode + text + (char)check + Stop; 

} 

Используйте это так:

label_barCodeFont.Text = EncodeToCode128("Hello 2017", 'B'); 

Это результат:

enter image description here

Обратите внимание, что это довольно просто и опирается на персонажей все, чтобы быть в том же заданном наборе кода; если это не так, вам придется развернуть его, чтобы проверить символы и вставить подходящий код сдвига до тех, которые находятся в другом коде (возможно, код A).

+0

Я обновил и расширил ответ, включив в него простое кодирование строки. Он протестирован для нескольких простых строк кода Code B. Я также удалил замечания о вас с использованием неправильных стартовых кодов. Должно быть, я неправильно понял персонажей, которые вы отправили, или, может быть, вы их исправили? -) – TaW

Смежные вопросы