MemoryStream is a class in the .NET Framework that provides a way to read from and write to a stream that is stored in memory. It is a type of stream that can be used to manipulate data that is not stored in a physical file, but rather in memory.

Apart from reading barcodes from image files or PDF files, IronBarcode also excels in reading barcodes from streams. Being a great API in an application, IronBarcode is able to accept PDF document or image stream as an input and output the read result of the barcodes inside the stream. Now let us see how we can achieve this.

Read barcodes from Image stream

In this section, we will show you how to use IronBarcode to read an image stream, as well as multiple image streams stored in a List<MemoryStream>. Below is the corrected block of code with comments to help you understand the process:

using IronBarCode;
using System;
using System.Collections.Generic;
using System.IO;

class BarcodeFromImageStream
{
    static void Main(string[] args)
    {
        // Create a list of MemoryStreams to store image streams
        List<MemoryStream> imageStreams = new List<MemoryStream>
        {
            // Example of adding an existing MemoryStream object to the list
            new MemoryStream(File.ReadAllBytes("example1.png")),
            new MemoryStream(File.ReadAllBytes("example2.png"))
        };

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-streams-1.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.IO;

class BarcodeFromImageStream
{
    static void Main(string[] args)
    {
        // Create a list of MemoryStreams to store image streams
        List<MemoryStream> imageStreams = new List<MemoryStream>
        {
            // Example of adding an existing MemoryStream object to the list
            new MemoryStream(File.ReadAllBytes("example1.png")),
            new MemoryStream(File.ReadAllBytes("example2.png"))
        };

// Import necessary namespaces
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;
using System.IO;

// Create a new list to hold images loaded as MemoryStreams
List<MemoryStream> list = new List<MemoryStream>();

try
{
    // Load images from files and add their streams to the list
    list.Add(AnyBitmap.FromFile("image1.jpg").ToStream());
    list.Add(AnyBitmap.FromFile("image2.jpg").ToStream());
    list.Add(AnyBitmap.FromFile("image3.png").ToStream());
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"An error occurred while loading image files: {ex.Message}");
    return;
}

try
{
    // Use IronBarCode to read barcodes from the list of image streams
    var myBarcodes = BarcodeReader.Read(list);

    // Iterate through each detected barcode and output its information
    foreach (var barcode in myBarcodes)
    {
        // Print the barcode details to the console
        Console.WriteLine(barcode.ToString());
    }
}
catch (Exception ex)
{
    Console.WriteLine($"An error occurred while reading barcodes: {ex.Message}");
}
finally
{
    // It's good practice to ensure resources are properly disposed
    foreach (var stream in list)
    {
        stream.Dispose();
    }
}
Imports IronBarCode

Imports System

Imports System.Collections.Generic

Imports System.IO



Friend Class BarcodeFromImageStream

	Shared Sub Main(ByVal args() As String)

		' Create a list of MemoryStreams to store image streams

		Dim imageStreams As New List(Of MemoryStream) From {

			New MemoryStream(File.ReadAllBytes("example1.png")),

			New MemoryStream(File.ReadAllBytes("example2.png"))

		}



' Import necessary namespaces

Dim IronBarCode As using

Using IronSoftware.Drawing

	Dim System As using

	Using System.Collections.Generic

		Using System.IO

			

			' Create a new list to hold images loaded as MemoryStreams

			Dim list As New List(Of MemoryStream)()

			

			Try

				' Load images from files and add their streams to the list

				list.Add(AnyBitmap.FromFile("image1.jpg").ToStream())

				list.Add(AnyBitmap.FromFile("image2.jpg").ToStream())

				list.Add(AnyBitmap.FromFile("image3.png").ToStream())

			Catch ex As FileNotFoundException

				Console.WriteLine($"An error occurred while loading image files: {ex.Message}")

				Return

			End Try

			

			Try

				' Use IronBarCode to read barcodes from the list of image streams

				Dim myBarcodes = BarcodeReader.Read(list)

			

				' Iterate through each detected barcode and output its information

				For Each barcode In myBarcodes

					' Print the barcode details to the console

					Console.WriteLine(barcode.ToString())

				Next barcode

			Catch ex As Exception

				Console.WriteLine($"An error occurred while reading barcodes: {ex.Message}")

			Finally

				' It's good practice to ensure resources are properly disposed

				For Each stream In list

					stream.Dispose()

				Next stream

			End Try

		End Using

	End Using

End Using
$vbLabelText   $csharpLabel

From the code snippet above, IronBarcode can accept an object or a list of MemoryStream objects into the BarcodeReader.Read() method and read the stream objects as input. The example shows how to convert an image file into a MemoryStream object and read the barcodes present in the stream directly.

Read barcodes from PDF document stream

In this section, we will show you how to use IronBarcode to read a PDF document file as a MemoryStream object or a MemoryStream list of PDF documents. Here is the improved block of code:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-streams-2.cs
using IronBarCode;
using IronPdf;
using System;
using System.IO;

// Make sure the file path is set correctly to the location of your PDF file.
string filePath = @"file_path.pdf";

// Check if the file exists at the given path, if not, display an error message and exit.
if (!File.Exists(filePath))
{
    Console.WriteLine("The specified file does not exist.");
    return;
}

// Load the PDF document into a MemoryStream
// 'PdfDocument.FromFile' loads a PDF into the IronPdf API, and 'Stream' accesses its MemoryStream.
MemoryStream document = PdfDocument.FromFile(filePath).Stream;

// Read barcodes from the PDF document using IronBarCode
// 'BarcodeReader.ReadPdf' function reads all the barcodes in the provided PDF stream.
var barcodes = BarcodeReader.ReadPdf(document);

// Check if any barcodes were found in the document
if (barcodes.Count == 0)
{
    Console.WriteLine("No barcodes found in the document.");
}
else
{
    // Iterate through each barcode found in the document
    foreach (var barcode in barcodes)
    {
        // Output the textual value of each barcode to the console.
        Console.WriteLine(barcode.ToString());
    }
}
Imports IronBarCode

Imports IronPdf

Imports System

Imports System.IO



' Make sure the file path is set correctly to the location of your PDF file.

Private filePath As String = "file_path.pdf"



' Check if the file exists at the given path, if not, display an error message and exit.

If Not File.Exists(filePath) Then

	Console.WriteLine("The specified file does not exist.")

	Return

End If



' Load the PDF document into a MemoryStream

' 'PdfDocument.FromFile' loads a PDF into the IronPdf API, and 'Stream' accesses its MemoryStream.

Dim document As MemoryStream = PdfDocument.FromFile(filePath).Stream



' Read barcodes from the PDF document using IronBarCode

' 'BarcodeReader.ReadPdf' function reads all the barcodes in the provided PDF stream.

Dim barcodes = BarcodeReader.ReadPdf(document)



' Check if any barcodes were found in the document

If barcodes.Count = 0 Then

	Console.WriteLine("No barcodes found in the document.")

Else

	' Iterate through each barcode found in the document

	For Each barcode In barcodes

		' Output the textual value of each barcode to the console.

		Console.WriteLine(barcode.ToString())

	Next barcode

End If
$vbLabelText   $csharpLabel

As seen in the code snippet above, reading barcodes from a PDF document as a MemoryStream object is quite similar to reading barcodes from images. The primary difference is the method used: BarcodeReader.ReadPdf() is specifically used for PDF documents. In the example, we use the IronPDF library as a helper to convert a PDF document to a MemoryStream object. If there are multiple PDF documents that you want IronBarcode to read, it is recommended to merge all the PDF documents into one PDF document stream and feed it to the BarcodeReader.ReadPdf() method. Feel free to experiment and make the library work for your specific needs!

Frequently Asked Questions

How can I read barcodes from an image stream using IronBarcode?

To read barcodes from an image stream using IronBarcode, you can create a list of MemoryStreams containing your image data and use the BarcodeReader.Read() method to decode the barcodes from each stream.

What is the purpose of MemoryStream in .NET?

MemoryStream is a class in the .NET Framework that allows you to read from and write to a stream stored in memory, rather than a physical file. It's useful for manipulating in-memory data.

Can IronBarcode read barcodes from PDF streams?

Yes, IronBarcode can read barcodes from a PDF document stream. You can convert the PDF file to a MemoryStream and use the BarcodeReader.ReadPdf() method to decode the barcodes.

What is the difference between reading barcodes from image streams and PDF streams?

The primary difference is the method used: BarcodeReader.Read() is used for image streams, while BarcodeReader.ReadPdf() is used for PDF document streams.

How do I convert an image file to a MemoryStream?

You can convert an image file to a MemoryStream by reading the file bytes using File.ReadAllBytes() and passing the byte array to the MemoryStream constructor.

Is it possible to read multiple barcodes from a single PDF stream?

Yes, it is possible. The BarcodeReader.ReadPdf() method can return an array of BarcodeResult objects, one for each barcode found in the PDF stream.

Can I use IronBarcode with a list of MemoryStream objects?

Yes, IronBarcode can accept a list of MemoryStream objects, allowing you to read barcodes from multiple image or PDF streams.

What should I do if I have multiple PDF documents to read?

If you have multiple PDF documents, it is recommended to merge them into one PDF document stream before using the BarcodeReader.ReadPdf() method.

Do I need IronPDF to read PDF streams with IronBarcode?

While IronPDF can assist in converting PDF documents to MemoryStreams, you can read PDF streams directly with IronBarcode using the BarcodeReader.ReadPdf() method.

Is there a sample code for reading barcodes from image and PDF streams?

Yes, the tutorial provides sample code that demonstrates how to read barcodes from both image and PDF streams using IronBarcode.

Hairil Hasyimi Bin Omar
Hairil Hasyimi Bin Omar
Software Engineer
Like all great engineers, Hairil is an avid learner. He’s refining his knowledge of C#, Python, and Java, using that knowledge to add value to team members across Iron Software. Hairil joined the Iron Software team from Universiti Teknologi MARA in Malaysia, where he graduated with a Bachelor's degree in Chemical and Process Engineering.