在零售业中,条形码标签系统在销售点(POS)软件中扮演着至关重要的角色。尽管尝试了Google搜索和在CodeProject上寻找条形码生成器,但未找到满意的结果。因此,创建了一个使用C#和Crystal Reports的应用程序来生成可打印和可扫描的条形码。本文将涵盖以下内容:
本文将分为以下几个部分:
首先,打开Visual Studio并创建一个带有所需框架的项目。填写详细信息后点击OK。
右键点击项目,导航至 -> 添加 -> 新建项... 选择Crystal Report并为其指定一个名称,比如 'BarcodeReport.rpt'。点击添加。选择空白报告并点击OK。
在Crystal Reports菜单中,导航至 -> 报告 -> 部分专家。选择详细信息并勾选 '使用多列格式化(直到能看到布局标签)'。导航至布局标签并按需填写详细信息。
按下调试(F5)并确保项目在空表单中运行... 如果有错误,则按照下面的步骤操作或跳过下一个步骤:
例如:缺少程序集引用
打开项目的属性。如果目标框架是.NET Framework 4客户端,则将其更改为.NET Framework 4并点击是。按下调试(F5),错误应该会被修正。如果没有,请评论。
对表单进行基本更改。将Crystal Report查看器拖放到表单上。
可能已经注意到有一个单独的列用于条形码和商店详细信息,将在下面的FAQ部分讨论这个问题。
像添加Crystal Report一样打开添加项。选择数据集,给它一个名称,然后按添加。让给它一个名称 'Barcodes'。拖放一个数据表并重命名数据表并添加列。
打开报告中的数据库专家。将创建的数据集添加到报告中。点击OK。现在可以看到数据库字段中的数据集详细信息。
拖放详细信息到报告中。
使详细信息看起来像这样:
在生成条形码之前,应该了解条形码是什么以及如何使用它... 尝试在互联网上搜索更多详细信息。
注意:必须声明条形码的起始点和结束点,以便扫描器知道条形码从哪里开始和结束。在本文中,将使用 'Code39' 字体(IDAutomationHC39M),一个true-type字体。起始和停止可以用 '*(The Value)*' 表示。下面是一个示例。
让要编码的值为ABC123。条形码必须有值 '*ABC123*',其中(*)是起始和停止点。可以在这里获得更多详细信息。
上面有一个链接可以下载字体文件(源代码和演示中也包括了)。将条形码数据字段添加到报告中并按如下所示排列,并选择字体。
保存报告并关闭它。
这个应用程序使用了简单的代码,并且很容易翻译成其他.NET语言。
Barcodes barcodeDetails = new Barcodes();
DataTable dataTable = barcodeDetails._Barcodes;
BarcodeReport Report = new BarcodeReport();
int blank_labels = 0;
int numberofLabel = 6;
for (int i = 0; i < numberofLabel; i++)
{
DataRow drow = dataTable.NewRow();
string P_name = "DETAIL" + i.ToString();
if (blank_labels <= i)
{
drow["Barcode"] = "*";
drow["Barcode"] += P_name;
drow["Barcode"] += "*";
drow["ProductId"] = P_name;
drow["Product Name"] = "Details of " + i.ToString();
drow["Cost"] = "Rs 110" + i.ToString() + "/-";
drow["Code"] = "ABCDE" + i.ToString();
drow["ShopName"] = "Shop Name";
}
dataTable.Rows.Add(drow);
}
Report.Database.Tables["Barcodes"].SetDataSource((DataTable)dataTable);
crystalReportViewer1.ReportSource = Report;
crystalReportViewer1.Refresh();
上述代码易于理解。一个整数用于告诉空白标签的数量,以便可以将详细信息留空。一个整数用于告诉要生成的标签总数。一个for循环用于循环数据。一个数据行使用创建的数据表(数据集)。检查空白标签的数量(标签数量)。向数据行添加详细信息,包括条形码字段的起始和停止。将数据行添加到数据表中。最后,将其添加到报告中并刷新报告查看器。最后会得到类似这样的东西:
为什么在报告查看器中看不到条形码?
通常使用Open Type字体(.otf),改用True Type字体(.ttf)。
为什么在数据集中使用商店名称,而不是像参数一样在报告中使用?
在空白标签的情况下,不能在其中打印任何东西。
得到了一个错误,该怎么办?如果使用的是.NET 4.0,有些人可能会遇到这样的错误。用下面的行替换app.config文件:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
错误应该会被修正。