C# 用不规则线条打印条形码

C# 用不规则线条打印条形码,c#,printing,barcode,barcode-printing,C#,Printing,Barcode,Barcode Printing,一位客户要求我为他们建立一个库存解决方案,他们可以打印所有办公设备的条形码标签,以各种方式跟踪他们 他们给了我一台Citizen CL-S621打印机(分辨率为203x203 dpi)用于测试,在(噩梦般的)配置其驱动程序以打印并将所有内容安装到他们给我测试的非标准标签之后,我仍然遇到的最大问题是,打印机无法以直线打印某些条,而是以虚线/虚线形式打印 下面的C代码显示了我如何构建条形码的基础知识: 硬编码的宽度和高度是我发现的打印机可以接受并准确打印到标签上的良好图像尺寸的最佳近似值,因为我必须

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

他们给了我一台Citizen CL-S621打印机(分辨率为203x203 dpi)用于测试,在(噩梦般的)配置其驱动程序以打印并将所有内容安装到他们给我测试的非标准标签之后,我仍然遇到的最大问题是,打印机无法以直线打印某些条,而是以虚线/虚线形式打印

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

硬编码的宽度和高度是我发现的打印机可以接受并准确打印到标签上的良好图像尺寸的最佳近似值,因为我必须用直尺测量标签的尺寸,以及打印机偏移量和眼睛测量精度之间的问题。得到一个工作正常的尺寸证明很麻烦

无论如何,我生成了一些条形码,图像清晰、清晰,看起来相当不错:

线条笔直清晰,文字清晰,一切看起来都很好; 但当我打印它们时,我得到:

有些条形图笔直清晰,有些边缘不规则,有些只是不规则的点/斜线/曲线图案。它们的文本都有相同的问题。我尝试过不同的字体大小和条形码友好型字体,但问题依然存在。如果删除文本标签,问题仍然存在

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


我还不确定扫描仪是否能读取这些图像,明天我会收到一份,但如果有任何关于我可能做错了什么的提示,我将不胜感激。

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

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

很难为你的问题提出解决方案,因为你有太多的活动部件;从一个字体开始,它指向一个图像,它指向一个文件,它指向一个shell命令,这个shell命令指向一个你没有告诉我们的应用程序,它指向一个打印机。这些步骤中的任何一个都可能会对图像进行反别名处理

我的建议是拆除这些中间部件。什么叫创建条形码?你写的申请书?尝试使用.NET
System.Drawing.Printing.PrintDocument
将该应用程序直接打印到打印机上。您不能这样做,必须使用神秘应用程序
UseShellExecute
调用?研究一下这个应用程序,也许有一种方法可以让你发送打印机命令,而不是把所有的字体转换成图像再转换成文件;许多标签打印机都有将“test123”等文本直接作为条形码输出的方法


编辑:也许你正在尝试的是完全不可能的。您要打印的标签的尺寸是多少?您的“更多数字”示例的分辨率超过500像素,而打印机的分辨率仅为200 DPI。如果标签的宽度小于500/200≅ 2.5英寸即使以203 DPI的速度打印,也无法安装这些条。

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

设备和打印机中选择打印机
打印首选项
图形


将抖动设置为无,同样的问题,效果很好

选项1:调整抖动设置

  • 单击Windows按钮
  • 转到控制面板
  • 转到设备和打印机
  • 右键单击首选打印机
  • 单击“打印机首选项”
  • 转到“抖动”选项卡并选择“无”。 单击应用

  • 你试过用现有的软件打印条形码吗?我用海鸥科技公司的“调酒师”做了一次成功的测试,结果打印的线条清晰,文字也清晰。BT只允许商业许可证和昂贵的许可证,比如打印条形码……我尝试了单色设置,但没有任何帮助。我还尝试了不使用文本标签(仅使用条形码)的打印,但问题仍然存在,因此抗锯齿不太可能出现。打印机的DPI为203x203;我使用在线dpi ppi计算器来近似计算在该打印分辨率下标签测量所需的适当像素宽度X长度值,并通过反复试验来调整这些值,以改进结果,但问题从未得到改善。@Connor,条形码字体将条形码、垂直线呈现为字符,因此,删除文本标签将无效。大多数打印机都使用抗锯齿来呈现字体,这就是垂直条的情况。大多数打印机也使用反锯齿功能以不同的DPI渲染图像,如果不访问打印机,我就无法判断条形码的反锯齿功能。您不能“近似”这一点,您必须以打印机DPI的精确倍数打印。@Doug Oh!我不明白。我知道我的打印机的DPI是203;我如何使用它来知道用于图像分辨率的确切倍数?
    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();
    }