在本文中,我将演示如何使用 C++ 以编程方式生成条形码。您还将学习如何在您的 C++ 应用程序中实现条码扫描器或阅读器。

在 C++ 中生成条形码

条形码用于以机器可读的形式直观地表示数据。上述技术已被证明是有用的,特别是在商店和超市中部署的自动结账系统中。现在市场上几乎所有的产品都包含条形码。条形码的这种广泛流行已将其用例扩展到各个领域。关注条形码的重要性,几年前,Aspose 推出了适用于各种平台的条形码生成器和阅读器 API。本文旨在展示如何在 C++ 应用程序中实现条码生成器和读取器以动态生成和读取条码。

C++ 条码生成器和读取器 API

Aspose.BarCode for C++ 是一个功能丰富的 C++ API,用于生成和读取大量一维和二维条码。它使您可以生成、自定义条形码并将其导出为高质量图像。您可以从 下载 部分下载库文件。可下载的软件包还包含一个演示 C++ 应用程序供您使用。

以下是您可以使用 Aspose.BarCode for C++ 生成的条形码符号列表:

  • 代码128
  • Code39 标准
  • Code39 扩展
  • Code93 标准
  • Code93 扩展
  • 代码 11
  • 科达巴
  • BooklandEAN
  • EAN13
  • EAN8
  • EAN128
  • Interleaved2of5
  • 标准2of5
  • 微星
  • 邮政网
  • 行星
  • UPCA
  • UPCE
  • EAN14(SCC14)
  • SSCC18
  • ITF14
  • 条码补充
  • PDF417
  • 二维码
  • 数据矩阵
  • 矩阵 2 的 5
  • PZN(Pharma Zentral Nummer,Pharmazentralnummer 条形码)
  • 德国邮政识别码
  • 阿兹台克人
  • 澳大利亚邮政

使用 C++ 生成条形码

使用 Aspose.BarCode 生成条形码可以在几行代码内完成。以下是执行此操作的步骤。

以下代码示例展示了如何使用 C++ 生成条形码。

const System::String codeText = u"1234567";
const System::String fileName = u"code39_barcode.jpg";
// 创建条码生成器
System::SharedPtr<BarcodeGenerator> barcodeGenerator = System::MakeObject<BarcodeGenerator>(EncodeTypes::Code39Standard, codeText);
barcodeGenerator->get_Parameters()->set_Resolution(300);
// 生成条形码并保存为图像
barcodeGenerator->Save(fileName);

以下是我们使用上述代码生成的条形码。

使用 C++ 生成二维条码(QR 或其他)

在前面的示例中,我们创建了一个一维条形码。现在让我们创建一个二维条码,例如 QR 码。以下是创建 QR 条码的步骤。

以下代码示例展示了如何使用 C++ 生成 QR 条码。

const System::String codeText = u"1234567";
const System::String fileName = u"QR_Code.jpg";
// 创建条码生成器
System::SharedPtr<BarcodeGenerator> barcodeGenerator = System::MakeObject<BarcodeGenerator>(EncodeTypes::QR, codeText);
barcodeGenerator->get_Parameters()->set_Resolution(300);
// 生成条形码并保存为图像
barcodeGenerator->Save(fileName);

下面的二维码将使用上面的代码生成。

使用 C++ 生成自定义条码

您还可以自定义条码的外观。例如,您可以设置前景色、背景色、大小、边框样式等。以下是使用 Aspose.BarCode for C++ 自定义条码的步骤。

以下代码示例展示了如何使用 C++ 生成自定义条形码。

System::SharedPtr<BarcodeGenerator> barcodeGenerator = [&] { auto tmp_0 = System::MakeObject<BarcodeGenerator>(EncodeTypes::Aztec, System::String(u"1234567890"));
// 设置布罗德风格
tmp_0->get_Parameters()->get_Border()->set_DashStyle(Aspose::BarCode::BorderDashStyle::Solid);
// 设置宽度
tmp_0->get_Parameters()->get_Border()->get_Width()->set_Millimeters(1.0f);
// 设置边框可见性
tmp_0->get_Parameters()->get_Border()->set_Visible(true);
// 设置背景颜色
tmp_0->get_Parameters()->set_BackColor(System::Drawing::Color::get_Black());
// 设置条形码的条形颜色
tmp_0->get_Parameters()->get_Barcode()->set_ForeColor(System::Drawing::Color::get_Orange());
// 设置边框颜色
tmp_0->get_Parameters()->get_Border()->set_Color(System::Drawing::Color::get_Black());
// 设置文本颜色
tmp_0->get_Parameters()->get_Barcode()->get_CodeTextParameters()->set_Color(System::Drawing::Color::get_Orange());
// 设置图像分辨率
tmp_0->get_Parameters()->set_Resolution(400);
return tmp_0; }();	
 
barcodeGenerator->Save(System::String(u"custom_barcode.jpg"));

以下是我们生成的自定义 Aztec 条码。

使用 C++ 生成带有标题的条形码

条码也可能包含条码下方或上方的标题。您可以设置标题的文本及其在条形码图像中的可见性。以下代码示例展示了如何使用 C++ 生成带有标题的条形码。

System::SharedPtr<BarcodeGenerator> generator = [&] { auto tmp_0 = System::MakeObject<BarcodeGenerator>(EncodeTypes::Code39Standard, System::String(u"1234567890"));
// 在上面设置标题
tmp_0->get_Parameters()->get_CaptionAbove()->set_Text(u"Caption Above");
// 设置可见性
tmp_0->get_Parameters()->get_CaptionAbove()->set_Visible(true);
// 在下面设置标题
tmp_0->get_Parameters()->get_CaptionBelow()->set_Text(u"Caption Below");
// 设置可见性
tmp_0->get_Parameters()->get_CaptionBelow()->set_Visible(true);
// 设置分辨率
tmp_0->get_Parameters()->set_Resolution(300);
return tmp_0; }();
generator->Save(System::String(u"barcode_caption.jpg"));

以下是带有上方和下方标题的条形码。

使用 C++ 扫描和读取条形码

现在让我们看看如何使用 Aspose.BarCode for C++ 扫描和读取条形码。以下是执行此功能的步骤。

  • 创建 BarCodeReader 类的实例。
  • 使用条形码的图像文件及其符号系统初始化 BarCodeReader 实例。
  • 使用 BarCodeReader->Read() 方法检索条形码的文本和类型。

以下代码示例展示了如何使用 C++ 扫描和读取条形码。

// 创建 BarcodeGenerator 类的实例 
System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"Code128.png", DecodeType::Code128);
while (reader->Read())
{
	// 显示代码文本和符号系统类型
	System::Console::WriteLine(System::String(u"CodeText: ") + reader->GetCodeText());
	System::Console::Write(System::String(u"Symbology Type: ") + reader->GetCodeType());
}
reader->Close();

使用 C++ 读取具有多种符号的条形码

大多数情况下,图像仅包含一个条形码符号系统。但是,在某些情况下,图像可能同时包含多个符号的条形码。在这种情况下,您可以提供要扫描和读取的条形码符号列表。

以下代码示例显示了如何使用 C++ 扫描具有多个条形码符号的图像。

// 设置条码符号
System::ArrayPtr<System::SharedPtr<BaseDecodeType>> objArray = System::MakeArray<System::SharedPtr<Aspose::BarCode::BarCodeRecognition::BaseDecodeType>>({ DecodeType::Code39Standard, DecodeType::Pdf417 });

// 初始化 BarCodeReader,循环调用 Read() 方法并显示代码文本和符号类型
System::SharedPtr<BarCodeReader> reader = System::MakeObject<BarCodeReader>(u"RecognizingMultipleSymbologies.png", objArray);
while (reader->Read())
{
	System::Console::WriteLine(System::String(u"Codetext: ") + reader->GetCodeText());
	System::Console::WriteLine(System::String(u"Symbology type: ") + reader->GetCodeType());
}
reader->Close();

结论

在本文中,您学习了如何使用 C++ 生成具有不同符号的条形码。此外,还结合 C++ 代码示例讨论了扫描和读取条码的过程。您可以使用 文档 探索有关 API 的更多信息。

也可以看看