Генерация штрих-кода Aztec произвольной формы в .NET
Категория: Штрих-коды; .NET
3 июня 2020
/// <summary>
/// Generates Aztec barcode as raster image.
/// </summary>
public void GenerateAztecBarcode()
{
// create the barcode writer
Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();
// set barcode writer settings
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.Aztec;
barcodeWriter.Settings.Value = "VintaSoft Barcode .NET SDK is the professional 1D & 2D barcode reader and barcode generator library for .NET, WPF and WEB.";
// get barcode as image
using (System.Drawing.Image barcodeImage = barcodeWriter.GetBarcodeAsBitmap())
{
// save the barcode image to a file
barcodeImage.Save("aztec-barcode.png");
}
}

/// <summary>
/// Recognizes Aztec barcode in image.
/// </summary>
/// <param name="barcodeImageFilePath">A path to a barcode image file.</param>
public void RecognizeAztecBarcode()
{
// create barcode reader
using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
{
// specify that reader must search for Aztec barcodes
reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Aztec;
// specify that reader must search for horizontal barcodes only
reader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal;
// read barcodes from image file
Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes("aztec-barcode.png");
// if barcodes are not detected
if (barcodeInfos.Length == 0)
{
System.Console.WriteLine("Barcodes are not found.");
}
// if barcodes are detected
else
{
// get information about recognized barcodes
System.Console.WriteLine(string.Format("{0} barcode(s) found:", barcodeInfos.Length));
System.Console.WriteLine();
for (int i = 0; i < barcodeInfos.Length; i++)
{
Vintasoft.Barcode.IBarcodeInfo barcodeInfo = barcodeInfos[i];
System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, barcodeInfo.BarcodeType));
System.Console.WriteLine(string.Format("Value: {0}", barcodeInfo.Value));
System.Console.WriteLine(string.Format("Region: {0}", barcodeInfo.Region));
System.Console.WriteLine();
}
}
}
}
1 barcode(s) found: [1:Aztec] Value: VintaSoft Barcode .NET SDK is the professional 1D & 2D barcode reader and barcode generator library for .NET, WPF and WEB.
/// <summary>
/// Generates several Aztec barcodes with structure append information and aligns barcodes horizontally.
/// </summary>
public void GenerateAztecBarcodesWithStructureAppendAndAlignBarcodeHorizontally()
{
// source text
string text = "VintaSoft Barcode .NET SDK is the professional 1D & 2D barcode reader and barcode generator library for .NET, WPF and WEB.";
// count of text blocks
int textBlockCount = 4;
// maximum length of text block
int textBlockLen = text.Length / textBlockCount;
if ((text.Length % textBlockCount) != 0)
textBlockLen++;
// array with barcode images
System.Drawing.Image[] barcodeImages = new System.Drawing.Image[textBlockCount];
// for each text block
for (int i = 0; i < textBlockCount; i++)
{
// calculate text block string
string textBlock = text.Substring(0, textBlockLen);
text = text.Substring(textBlockLen);
// generate barcode image with text block
barcodeImages[i] = GenerateImageOfAztecBarcodeWithStructureAppendInformation(textBlock, i + 1, textBlockCount);
}
// width of image with merged barcodes
int mergedBarcodeWidth = 0;
// for each barcode image
for (int i = 0; i < barcodeImages.Length; i++)
{
// increase width of image with merged barcodes
mergedBarcodeWidth += barcodeImages[i].Width;
}
// calculate height of image with merged barcodes
int mergedBarcodeHeight = barcodeImages[0].Height;
// create image with merged barcodes
using (System.Drawing.Image mergedBarcodesImage = new System.Drawing.Bitmap(mergedBarcodeWidth, mergedBarcodeHeight))
{
// create Graphics for drawing on image with merged barcodes
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(mergedBarcodesImage))
{
// fill image with merged barcodes using white color
g.FillRectangle(System.Drawing.Brushes.White, new System.Drawing.RectangleF(0, 0, mergedBarcodesImage.Width, mergedBarcodesImage.Height));
// the horizontal position of barcode image on image with merged barcodes
int barcodeXPosition = 0;
// for each barcode image
for (int i = 0; i < barcodeImages.Length; i++)
{
// draw barcode image on image with merged barcodes
g.DrawImage(barcodeImages[i], new System.Drawing.PointF(barcodeXPosition, 0));
// change the horizontal position of barcode image on image with merged barcodes
barcodeXPosition += barcodeImages[i].Width;
}
}
// save image with merged barcodes to a file
mergedBarcodesImage.Save("aztec-barcodes-with-structure-append-and-aligned-horizontally.png");
}
// for each barcode image
for (int i = 0; i < barcodeImages.Length; i++)
{
// dispose barcode image
barcodeImages[i].Dispose();
}
}
/// <summary>
/// Generates an image of Aztec barcode, which contains information about the structure append.
/// </summary>
/// <param name="barcodeValue">Barcode value.</param>
/// <param name="symbolPosition">Value position in structure append. Value from 1 to <i>symbolCount</i>.</param>
/// <param name="symbolCount">Count of values in structure append.</param>
/// <returns>An image of Aztec barcode, which contains information about the structure append.</returns>
public System.Drawing.Image GenerateImageOfAztecBarcodeWithStructureAppendInformation(string barcodeValue, int symbolPosition, int symbolCount)
{
// create the barcode writer
Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();
// specify that Aztec barcode must be created
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.Aztec;
// specify that created Aztec barcode should not have padding
barcodeWriter.Settings.Padding = 0;
// specify the barcode values
barcodeWriter.Settings.ValueItems = new Vintasoft.Barcode.BarcodeInfo.ValueItemBase[] {
// create the non-data flag that contains information about structure append
Vintasoft.Barcode.BarcodeInfo.NonDataFlags.CreateAztecStructuredAppendCharacter(symbolPosition, symbolCount, null),
// create a text value item
new Vintasoft.Barcode.BarcodeInfo.TextValueItem(barcodeValue)
};
// return generated barcode image
return barcodeWriter.GetBarcodeAsBitmap();
}

/// <summary>
/// Recognizes Aztec barcodes with structure append information.
/// </summary>
/// <param name="barcodeImageFilePath">A path to a barcode image file.</param>
public void RecognizeAztecBarcodesWithStructureAppend()
{
// create barcode reader
using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
{
// specify that reader must search for Aztec barcodes
reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Aztec;
// specify that reader must search for horizontal barcodes only
reader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal;
// read barcodes from image file
Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes("aztec-barcodes-with-structure-append-and-aligned-horizontally.png");
// if barcodes are not detected
if (barcodeInfos.Length == 0)
{
System.Console.WriteLine("Barcodes are not found.");
}
// if barcodes are detected
else
{
// reconstruct barcode info from barcode infos with structure append information
Vintasoft.Barcode.BarcodeInfo.StructuredAppendBarcodeInfo[] reconstructedBarcodeInfos =
Vintasoft.Barcode.BarcodeInfo.StructuredAppendBarcodeInfo.ReconstructFrom(barcodeInfos);
// get information about recognized barcodes
System.Console.WriteLine(string.Format("{0} reconstructed barcode(s) found:", reconstructedBarcodeInfos.Length));
System.Console.WriteLine();
for (int i = 0; i < reconstructedBarcodeInfos.Length; i++)
{
Vintasoft.Barcode.BarcodeInfo.StructuredAppendBarcodeInfo reconstructedBarcodeInfo = reconstructedBarcodeInfos[i];
System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, reconstructedBarcodeInfo.BarcodeType));
System.Console.WriteLine(string.Format("Value: {0}", reconstructedBarcodeInfo.Value));
System.Console.WriteLine();
}
}
}
}
1 reconstructed barcode(s) found: [1:Aztec] Value: VintaSoft Barcode .NET SDK is the professional 1D & 2D barcode reader and barcode generator library for .NET, WPF and WEB.