Generate and recognize barcodes in AWS Lambda
May 22, 2020






// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: Amazon.Lambda.Core.LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda1
{
public class Function
{
/// <summary>
/// Default constructor. This constructor is used by Lambda to construct the instance. When invoked in a Lambda environment
/// the AWS credentials will come from the IAM role associated with the function and the AWS region will be set to the
/// region the Lambda function is executed in.
/// </summary>
public Function()
{
}
/// <summary>
/// This method is called for every Lambda invocation. This method takes in an SQS event object and can be used
/// to respond to SQS messages.
/// </summary>
public async System.Threading.Tasks.Task FunctionHandler(Amazon.Lambda.SQSEvents.SQSEvent evnt, Amazon.Lambda.Core.ILambdaContext context)
{
foreach (var message in evnt.Records)
{
await ProcessMessageAsync(message, context);
}
}
private async System.Threading.Tasks.Task ProcessMessageAsync(Amazon.Lambda.SQSEvents.SQSEvent.SQSMessage message, Amazon.Lambda.Core.ILambdaContext context)
{
context.Logger.LogLine($"Processed message {message.Body}");
try
{
// create memory stream, where image with barcode will be stored
using (System.IO.MemoryStream mem = new System.IO.MemoryStream())
{
// create the barcode writer
Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter();
// specify that DataMatrix barcode must be created
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.DataMatrix;
// specify the barcode value
barcodeWriter.Settings.Value = "1234567890987654321";
// generate barcode image and save to the memory stream as PNG file
barcodeWriter.SaveBarcodeAsImage(mem, Vintasoft.Barcode.BarcodeImageFormat.Png);
// create the barcode reader
using (Vintasoft.Barcode.BarcodeReader barcodeReader = new Vintasoft.Barcode.BarcodeReader())
{
// specify that reader must search for DataMatrix barcodes
barcodeReader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.DataMatrix;
// specify that reader must search horizontal barcodes only
barcodeReader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal;
// read barcodes from image
Vintasoft.Barcode.IBarcodeInfo[] infos = barcodeReader.ReadBarcodes(mem);
// if barcodes are not detected
if (infos.Length == 0)
{
context.Logger.LogLine($"No barcodes found.");
}
// if barcodes are detected
else
{
// get information about searched barcodes
for (int i = 0; i < infos.Length; i++)
{
Vintasoft.Barcode.IBarcodeInfo info = infos[i];
context.Logger.LogLine(string.Format("Barcode: Type={0}, Value={1}", info.BarcodeType, info.Value));
}
}
}
}
}
catch (System.Exception ex)
{
context.Logger.LogLine(string.Format("Error: {0}", ex.Message));
}
await System.Threading.Tasks.Task.CompletedTask;
}
}
}


