C#Code 128无法打印

时间:2016-09-01 05:19:59

标签: c# printing code128

我问过的原始问题是 C# Saving a form to image without anti aliasing 我试图打印Code128到打印机。由于屏幕捕获降低了打印质量,我决定直接编写代码进行打印。 除Code128

外,所有图像和文字都可以正确打印出来

以下是我打印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目录中找到,它是真正的字体。在GUI设计阶段,字体也正确显示。但是,当打印出来时,打印中缺少code128。

有没有人知道为什么或我没有再做正确的事情

修改

根据请求,此处是FONT文件夹enter image description here

中字体的屏幕截图

字体声明为

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

strUserID的内容是ÌMachine8Î

1 个答案:

答案 0 :(得分:1)

查看关于Code 128的相当详尽的Wikipedia文章,您可以看到其中有三组字符,称为代码A,B和C.

  

128A(代码集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(用单个代码点编码两位数字)和FNC1

您希望对混合大小写字符串进行编码,以便使用代码B.

使用常规开始代码B 信号:Î(0xCC ascii 204)作为前缀和常规停止代码 Ó(0xCE ascii 206)作为后缀:

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

您可以将编码的字符串构建为:

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

顺便说一下:I found some bar code fonts to work better than others,例如当谈到印刷空间时。

另请注意,除开始和停止代码外,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)之前插入一个合适的移位代码