条形码打印出现不规则线条问题

4
一个客户让我为他们建立一个库存解决方案,他们将打印条形码标签以跟踪各种办公设备的情况。他们给了我一台 Citizen CL-S621 打印机(203x203 dpi 分辨率)进行测试,然后(噩梦般的)配置其驱动程序和适应非标准标签,最大的问题仍然是打印机很难将某些条形码直线打印,而是以虚线/点线形式打印。以下 C# 代码显示了我如何使用此库构建条形码的基础知识 (使用此库)
public void CreateTheBarcode(string StringToEncode)
{
    Barcode b = new Barcode();
    b.LabelFont = new Font("Sample Bar Code Font", 24, FontStyle.Bold);
    b.IncludeLabel = true;
    b.Encode(BarcodeLib.TYPE.CODE128, StringToEncode, Color.Black, Color.White, 730, 140);
    b.SaveImage(@"C:\temp\Barcodes\"+StringToEncode+".png",SaveTypes.PNG);
    Print(@"C:\temp\Barcodes\"+StringToEncode+".png");
}

public static void Print(string FilePath)
{
    Process printJob = new Process();
    printJob.StartInfo.FileName = FilePath;
    printJob.StartInfo.UseShellExecute = true;
    printJob.StartInfo.Verb = "printto";
    printJob.StartInfo.CreateNoWindow = false;
    printJob.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    printJob.StartInfo.Arguments = "\"" + "Citizen CL-S621" + "\"";
    printJob.StartInfo.WorkingDirectory = Path.GetDirectoryName(FilePath);
    printJob.Start();
}

硬编码的宽度和高度是我发现的最佳图像尺寸的近似值,打印机可以接受并准确地打印到标签上,因为我不得不用尺子测量它们的大小,并且由于打印机偏移和眼睛测量精度问题,获得可行的大小证明很棘手。
无论如何,我生成了一些条形码,图像清晰、清晰,看起来相当不错:

All images are to scale. I joined them into a single file for ease. I'm not sure why some barcodes are narrower than others

这些线条直且清晰,文本也很锐利,看起来一切都很好;但是当我想打印它们时,出现了以下问题:

They print out of order for some reason, I suspect the printer has some sort of optimizer that arranges them so

一些条形码打印得很直,很清晰,而有些则具有不规则的边缘和点/斜杠/曲线图案。所有条形码的文本都存在相同的问题。我尝试了不同的字体大小和专为条形码设计的字体,但问题仍然存在。即使我删除文本标签,问题仍然存在。这似乎是图像光栅化问题,但我并不确定,也不知道如何解决。明天我会收到一个扫描仪,我还不确定它是否能读取这些条形码,但如果您有任何关于我可能做错的提示,我将不胜感激。

你尝试过使用现有的软件打印条形码吗? - Bradley Moorfield
我使用Seagull Scientific的“BarTender”进行了一次成功的测试,打印出来的线条清晰明了,文字也很清晰。然而,BT只允许商业许可证,而且对于像仅仅打印条形码这样基本的功能来说,价格昂贵。 - ConnorU
3个回答

6
这些打印机设置应该有所帮助:
在“设备和打印机”>“打印首选项”>“图形”中选择打印机。
将“抖动”设置为“无”。

3
打印机正在反锯齿您的图像。这是条形码字体的普遍问题。您必须将打印机设置为不反锯齿(尝试“设置/打印机/打印偏好/彩色模式/单色”),或者将图像DPI设置为与打印机DPI相同(通常为300 DPI)。
如果您的打印机呈矩形渲染而不是DPI,则必须调整图像大小,使图像像素是相同矩形的打印机像素的整数倍。
很难为您的问题提出解决方案,因为您有太多的可变部分;您从一个字体开始,它变成一个图像,再变成一个文件,然后变成一个shell命令,最后连接到一个我们不知道的应用程序并连接到打印机。其中任何一个步骤都可能会导致您的图像反锯齿。
我的建议是删除这些中间部分。“CreateTheBarcode”是由什么调用的?您编写的应用程序吗?尝试使用.NET的“System.Drawing.Printing.PrintDocument”直接将该应用程序打印到打印机。您不能这样做,并且必须使用神秘的应用程序“UseShellExecute”调用吗?研究一下该应用程序,也许有一种方法可以发送打印机命令,而不是通过字体到图像再到文件的复杂过程;许多标签打印机有将文本直接输出为条形码的方法。
编辑:也许您正在尝试的根本不可能实现。您要打印的标签尺寸是多少?您的“More numbers”示例超过500个像素,并且您的打印机只有200 DPI。即使您以203 DPI打印,如果标签比500/200 ≅ 2.5英寸窄,则无法容纳条形码。

我尝试了单色设置,但没有帮助。我还尝试了仅打印条形码而不是文本标签,问题仍然存在,因此抗锯齿不太可能是问题所在。打印机的DPI为203x203;我使用在线dpi-ppi计算器来近似计算在该打印分辨率下我需要的标签尺寸的像素宽度和长度值,并通过试错进行微调以改善结果,但问题从未得到改善。 - ConnorU
1
@Connor,条形码字体将条形码(垂直线)呈现为字符,因此删除文本标签不会产生影响。大多数打印机使用反锯齿技术来呈现字体,这也是您的垂直条形码发生的情况。大多数打印机还使用反锯齿技术以不同的DPI呈现图像,而我无法确定是什么在使用反锯齿技术处理您的条形码而没有访问您的打印机。您不能“近似”此操作,必须按照打印机DPI的精确倍数进行打印。 - Dour High Arch
@Doug 哦!我不明白。我知道我的打印机DPI是203;我如何使用它来确定图像分辨率的确切倍数? - ConnorU

1

同样的问题,这个方法完美解决。

选项1:调整抖动设置

  1. 点击Windows按钮。
  2. 进入控制面板。
  3. 进入设备和打印机。
  4. 右键点击首选打印机。
  5. 点击“打印机首选项”。
  6. 进入“抖动”选项卡并选择“无”。点击应用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接