使用不规则线条打印条形码

时间:2016-08-04 21:04:12

标签: c# printing barcode barcode-printing

客户要求我为他们建立库存解决方案,他们会为所有办公设备打印条形码标签,以便以各种方式跟踪它们。

他们给了我一台Citizen CL-S621打印机(203x203 dpi分辨率)用于测试和之后(梦魇)配置其驱动程序打印并将所有内容装配到他们给我测试的非标准标签上,这是最大的问题我仍然遇到的问题是,打印机在直线上打印一些条形图时出现问题,而是以虚线/点线形式打印出来。

下面的C#代码显示了我如何构建条形码的基础知识using this library

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

有些条纹打印笔直且清晰,而有些条纹边缘不规则,有些条纹只是不规则的点/斜线/曲线图案。所有这些文本都遇到了同样的问题。我尝试了不同的字体大小和所谓的条形码友好字体,问题仍然存在。如果删除文本标签,问题仍然存在。

它让我觉得它是一个图像光栅化问题,但我不完全确定,也不知道如何解决这个问题。

我还不确定扫描仪是否可以读取这些,我明天会收到一个,但任何有关我可能做错的提示都将不胜感激。

3 个答案:

答案 0 :(得分:2)

打印机正在对图像进行抗锯齿处理。这是条形码字体的地方性问题。您必须将打印机设置为不是抗锯齿(尝试设置/打印机/打印首选项/彩色模式/单色),或者必须将图像DPI设置为与打印机DPI(通常为300 DPI)相同。

如果您的打印机渲染为矩形而不是DPI,则必须调整图像大小,使图像像素为同一矩形的打印机像素的整数倍。

很难为您的问题提出解决方案,因为您有太多的活动部件;你开始使用一个字体转到一个文件,该图像转到一个shell命令,该命令转到一个你还没告诉我们的应用程序转到打印机的应用程序。这些步骤中的任何一个都可以对您的图像进行反锯齿。

我的建议是删除这些中间部分。什么叫CreateTheBarcode?你写的一个应用程序?尝试使用.NET System.Drawing.Printing.PrintDocument直接将该应用程序打印到打印机。您不能这样做并且必须使用神秘应用程序UseShellExecute来电?研究应用程序,也许有一些方法可以发送打印机命令,而不是通过所有字体到图像到文件rigamarole;许多标签打印机都可以直接输出像“test 123”这样的文本作为条形码。

编辑:也许你正在尝试的是不可能的。您要打印的标签有哪些尺寸?您的“更多数字”示例超过500像素,您的打印机只有200 DPI。如果标签的宽度小于500 /200≅2.5英寸,即使以203 DPI打印,也无法使条形图适合。

答案 1 :(得分:0)

这些打印机设置应有帮助:

Device and Printers> Printing Preferences> Graphics

中选择打印机

Dithering设置为None

答案 2 :(得分:0)

同样的问题,这很好用。

选项1:调整抖动设置

  1. 单击Windows按钮。
  2. 转到控制面板。
  3. 转到设备和打印机。
  4. 右键单击首选打印机。
  5. 单击“打印机首选项”。
  6. 转到“抖动”选项卡,然后选择“无”。 单击应用。
相关问题