条码打印不规则线条
Posted
技术标签:
【中文标题】条码打印不规则线条【英文标题】:Barcodes printing with irregular lines 【发布时间】:2016-12-11 04:04:52 【问题描述】:一位客户要求我为他们构建一个库存解决方案,他们会为所有办公设备打印条形码标签,以便以各种方式对其进行跟踪。
他们给了我一台 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();
硬编码的宽度和高度是我发现的最佳近似值,即打印机可以接受并准确打印到标签上的良好图像尺寸,因为我必须用尺子测量它们的尺寸,并在打印机偏移和眼睛测量精度问题之间获得工作的大小被证明是麻烦的。
无论如何,我生成了一些条码,图像清晰、清晰,看起来还不错:
线条笔直清晰,文字清晰,一切看起来都很好; 但是当我去打印它们时,我得到:
有些条形打印出笔直清晰,而有些则边缘不规则,有些只是不规则的点/斜线/曲线图案。所有这些文本中的文本都存在相同的问题。我尝试了不同的字体大小和所谓的条形码友好字体,但问题仍然存在。如果我删除文本标签,问题仍然存在。
我觉得这是一个图像光栅化问题,但我不完全确定,也不知道如何解决。
我还不确定扫描仪是否可以读取这些内容,我明天会收到一份,但如果我提供任何关于我可能做错的提示,我们将不胜感激。
【问题讨论】:
您是否尝试过使用现有软件打印条形码? 我使用 Seagull Scientific 的“BarTender”进行了一次成功的测试,线条清晰清晰,文字也清晰。 BT 只允许商业许可证,而对于打印条形码这样基本的东西来说,那是一个昂贵的许可证...... 【参考方案1】:这些打印机设置应该会有所帮助:
在Device and Printers
> Printing Preferences
> Graphics
中选择打印机
将Dithering
设置为None
【讨论】:
【参考方案2】:打印机正在对您的图像进行抗锯齿处理。这是条码字体的一个地方性问题。您必须将打印机设置为非抗锯齿(尝试设置/打印机/打印首选项/颜色模式/单色),或者您必须将图像 DPI 设置为与打印机 DPI 相同(通常为 300 DPI)。
如果您的打印机渲染为矩形而不是 DPI,则您必须调整图像大小,使图像像素是同一矩形的打印机像素的整数倍。
很难为您的问题提出解决方案,因为您的活动部件太多;您从一个字体开始,该字体转到一个图像,该文件转到一个外壳命令,该命令转到一个您没有告诉我们的应用程序,该命令转到打印机。这些步骤中的任何一个都可以为您的图像消除锯齿。
我的建议是删除这些中间部分。什么叫CreateTheBarcode
?你写的应用程序?尝试使用 .NET System.Drawing.Printing.PrintDocument
直接将该应用程序打印到打印机。你不能这样做并且必须使用神秘的应用程序UseShellExecute
来电?研究那个应用程序,也许有一些方法可以发送打印机命令,而不是通过所有字体到图像到文件 rigamarole;许多标签打印机都有办法将“test 123”等文本直接输出为条形码。
编辑:也许你正在尝试的是完全不可能的。您要打印的标签尺寸是多少?您的“更多数字”示例超过 500 像素,而您的打印机只有 200 DPI。如果标签窄于 500/200 ≅ 2.5 英寸,则即使以 203 DPI 打印,条形也无法适应。
【讨论】:
我尝试了单色设置,但没有帮助。我还尝试不使用文本标签(仅条形码)进行打印,但问题仍然存在,因此抗锯齿不太可能出现问题。打印机的DPI为203x203;我使用在线 dpi-ppi 计算器来估算在该打印分辨率下标签测量所需的适当像素宽度x长度值,并通过反复试验来调整这些值以改善结果,但问题从未得到改善。 @Connor,条形码字体将条形码(那些垂直线)渲染为字符,因此删除文本标签将无效。大多数打印机使用抗锯齿渲染字体,这就是您的垂直条发生的情况。大多数打印机还使用抗锯齿以不同的 DPI 渲染图像,如果没有访问您的打印机,我无法分辨什么是对条形码进行抗锯齿处理。你不能“近似”这个,你必须以打印机 DPI 的精确倍数打印。 @Doug 哦!我不明白。我知道我的打印机的 DPI 是 203;我如何使用它来知道用于图像分辨率的确切倍数?【参考方案3】:同样的问题,但效果很好。
选项 1:调整抖动设置
-
单击 Windows 按钮。
转到控制面板。
转到设备和打印机。
右键单击首选打印机。
点击“打印机首选项”。
转到“抖动”选项卡并选择“无”。
点击应用。
【讨论】:
以上是关于条码打印不规则线条的主要内容,如果未能解决你的问题,请参考以下文章