# Barcode creation using Zend_Barcode class

## Using Zend_Barcode::factory

Zend_Barcode uses a factory method to create an instance of a renderer that extends Zend_Barcode_Renderer_RendererAbstract. The factory method accepts five arguments.

1. The name of the barcode format (e.g., "code39") (required)

2. The name of the renderer (e.g., "image") (required)

3. Options to pass to the barcode object (an array or Zend_Config object) (optional)

4. Options to pass to the renderer object (an array or Zend_Config object) (optional)

5. Boolean to indicate whether or not to automatically render errors. If an exception occurs, the provided barcode object will be replaced with an Error representation (optional default `TRUE`)

Getting a Renderer with Zend_Barcode::factory()

Zend_Barcode::factory() instantiates barcode objects and renderers and ties them together. In this first example, we will use the Code39 barcode type together with the Image renderer.

    // Only the text to draw is required
    $barcodeOptions = array('text' => 'ZEND-FRAMEWORK');

    // No required options
    $rendererOptions = array();
    $renderer = Zend_Barcode::factory(
        'code39', 'image', $barcodeOptions, $rendererOptions
    );

Using Zend_Barcode::factory() with Zend_Config objects

You may pass a Zend_Config object to the factory in order to create the necessary objects. The following example is functionally equivalent to the previous.

    // Using only one Zend_Config object
    $config = new Zend_Config(array(
        'barcode'        => 'code39',
        'barcodeParams'  => array('text' => 'ZEND-FRAMEWORK'),
        'renderer'       => 'image',
        'rendererParams' => array('imageType' => 'gif'),
    ));

    $renderer = Zend_Barcode::factory($config);

## Drawing a barcode

When you draw the barcode, you retrieve the resource in which the barcode is drawn. To draw a barcode, you can call the draw() of the renderer, or simply use the proxy method provided by Zend_Barcode.

Drawing a barcode with the renderer object

    // Only the text to draw is required
    $barcodeOptions = array('text' => 'ZEND-FRAMEWORK');

    // No required options
    $rendererOptions = array();

    // Draw the barcode in a new image,
    $imageResource = Zend_Barcode::factory(
        'code39', 'image', $barcodeOptions, $rendererOptions
    )->draw();

Drawing a barcode with Zend_Barcode::draw()

    // Only the text to draw is required
    $barcodeOptions = array('text' => 'ZEND-FRAMEWORK');

    // No required options
    $rendererOptions = array();

    // Draw the barcode in a new image,
    $imageResource = Zend_Barcode::draw(
        'code39', 'image', $barcodeOptions, $rendererOptions
    );

## Renderering a barcode

When you render a barcode, you draw the barcode, you send the headers and you send the resource (e.g. to a browser). To render a barcode, you can call the render() method of the renderer or simply use the proxy method provided by Zend_Barcode.

Renderering a barcode with the renderer object

    // Only the text to draw is required
    $barcodeOptions = array('text' => 'ZEND-FRAMEWORK');

    // No required options
    $rendererOptions = array();

    // Draw the barcode in a new image,
    // send the headers and the image
    Zend_Barcode::factory(
        'code39', 'image', $barcodeOptions, $rendererOptions
    )->render();

This will generate this barcode:

Renderering a barcode with Zend_Barcode::render()

    // Only the text to draw is required
    $barcodeOptions = array('text' => 'ZEND-FRAMEWORK');

    // No required options
    $rendererOptions = array();

    // Draw the barcode in a new image,
    // send the headers and the image
    Zend_Barcode::render(
        'code39', 'image', $barcodeOptions, $rendererOptions
    );

This will generate the same barcode as the previous example.