[英]C# Code 128 does not print out
我曾问过的最初问题是在C#中将表单保存到图像中而没有抗锯齿 ,我试图将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设计阶段,字体也会正确显示。 但是,当打印出来时,打印中缺少代码128。
有谁知道为什么或者我又做错了吗
编辑
字体的声明为
Font font1DText = new Font("Code 128", 12);
strUserID的内容是ÌMachine8Î
查看有关Code 128的详尽的Wikipedia文章,您会发现其中确实包含三组字符,分别称为Code A,B和C。
128A(代码集A)– ASCII 00-95(0-9,AZ和控制代码),特殊字符和FNC 1-4
128B(代码集B)– ASCII 32-127(0-9,AZ,AZ),特殊字符和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;
顺便说一句: 我发现某些条形码字体要比其他条形码字体更好 ,例如在打印空间时。
还要注意,除了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');
结果如下:
注意,这非常简单,并且依赖于所有字符都在相同的给定代码集中。 如果不是这种情况,则必须将其扩展以测试字符,并在另一个代码集中的代码(可能是代码A)之前插入合适的移位代码 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.