Viivakoodi
==========

`Viivakoodi` (`barcode in Suomi <https://fi.wikipedia.org/wiki/Viivakoodi>`_)
is the fork of `pyBarcode <https://bitbucket.org/whitie/python-barcode/>`_
project.

This library provides a simple way to create barcodes using only the
Python standardlib. The barcodes where created as SVG objects.

Report bugs at https://github.com/kxepal/viivakoodi/issues/


Requirements
------------

    - Setuptools/distribute for installation (new in version 0.7beta4)
    - Python 2.6 or above (including Python 3.x)
    - On Python 2.6, 3.0, 3.1: argparse (for the commandline script)
    - Program to open SVG objects (your browser should do it)
    - Optional: PIL to render barcodes as images (PNG, JPG, ...)


Installation
------------

Make sure you have setuptools/distribute installed.

Unpack the downloaded file, cd into the viivakoodi directory and run
`python setup.py install`. Or just copy the barcode dir somewhere in
your PYTHONPATH.

The best way is to use pip: `pip install viivakoodi`.


Provided Barcodes
-----------------

EAN-8, EAN-13, UPC-A, JAN, ISBN-10, ISBN-13, ISSN, Code 39, Code 128, PZN


Todo
----

    - Add documentation
    - Add more codes
    - Improve Python 3 support
    - Add simple GUI

Usage
-----

Interactive::

    >>> import barcode
    >>> barcode.PROVIDED_BARCODES
    [u'code39', u'code128', u'ean', u'ean13', u'ean8', u'gs1', u'gtin',
     u'isbn', u'isbn10', u'isbn13', u'issn', u'jan', u'pzn', u'upc', u'upca']
    >>> EAN = barcode.get_barcode_class('ean13')
    >>> EAN
    <class 'barcode.ean.EuropeanArticleNumber13'>
    >>> ean = EAN(u'5901234123457')
    >>> ean
    <barcode.ean.EuropeanArticleNumber13 object at 0x00BE98F0>
    >>> fullname = ean.save('ean13_barcode')
    >>> fullname
    u'ean13_barcode.svg'
    # Example with PNG
    >>> from barcode.writer import ImageWriter
    >>> ean = EAN(u'5901234123457', writer=ImageWriter())
    >>> fullname = ean.save('ean13_barcode')
    u'ean13_barcode.png'
    # New in v0.4.2
    >>> from StringIO import StringIO
    >>> fp = StringIO()
    >>> ean.write(fp)
    # or
    >>> f = open('/my/new/file', 'wb')
    >>> ean.write(f) # PIL (ImageWriter) produces RAW format here
    # New in v0.5.0
    >>> from barcode import generate
    >>> name = generate('EAN13', u'5901234123457', output='barcode_svg')
    >>> name
    u'barcode_svg.svg'
    # with file like object
    >>> fp = StringIO()
    >>> generate('EAN13', u'5901234123457', writer=ImageWriter(), output=fp)
    >>>

Now open ean13_barcode.[svg|png] in a graphic app or simply in your browser
and see the created barcode. That's it.

Commandline::

    $ pybarcode{2,3} create "My Text" outfile
    New barcode saved as outfile.svg.
    $ pybarcode{2,3} create -t png "My Text" outfile
    New barcode saved as outfile.png.

    Try `pybarcode -h` for help.

Changelog
---------

:v0.8: Code 128 added. Data for charsets and bars moved to subpackage
       barcode.charsets.

:v0.7: Fixed some issues with fontsize and fontalignment.
       Added Python 3 support. It's not well tested yet, but the tests
       run without errors with Python 3.3. Commandline script added.

:v0.6: Changed save and write methods to take the options as a dict
         not as keyword arguments (fix this in your code). Added option
         to left align the text under the barcode. Fixed bug with EAN13
         generation.

:v0.5.0: Added new generate function to do all generation in one step.
         Moved writer from a subpackage to a module (this breaks some
         existing code). UPC is now rendered as real UPC, not as EAN13
         with the leading "0".

:v0.4.3: Fixed bug in new write method (related to PIL) and updated docs.

:v0.4.2: Added write method to support file like objects as target.

:v0.4.1: Bugfix release. Removed redundancy in input validation.
         EAN8 was broken. It now works as expected.

:v0.4: Removed \*\*options from writers __init__ method. These options never
       had effect. They were always overwritten by default_options.
       New config option available: text_distance (the distance between
       barcode and text).

:v0.4b2: Basic documentation included. The barcode object now has a new
         attribute called `raw` to have the rendered output without saving
         to disk.

:v0.4b1: Support for rendering barcodes as images is implemented.
         PIL is required to use it.

:v0.3: Compression for SVG output now works.

:v0.3b1: Writer API has changed for simple adding new (own) writers.
         SVG output is now generated with xml.dom module instead of
         stringformatting (makes it more robust).

:v0.2.1: API of render changed. Now render takes keyword arguments
         instead of a dict.

:v0.2: More tests added.

:v0.1: First release.

