diff options
Diffstat (limited to 'bin/reportlab/graphics/barcode/__init__.py')
| -rw-r--r-- | bin/reportlab/graphics/barcode/__init__.py | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/bin/reportlab/graphics/barcode/__init__.py b/bin/reportlab/graphics/barcode/__init__.py new file mode 100644 index 00000000000..bde067f504a --- /dev/null +++ b/bin/reportlab/graphics/barcode/__init__.py @@ -0,0 +1,126 @@ +# +# Copyright (c) 1996-2000 Tyler C. Sarna <tsarna@sarna.org> +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Tyler C. Sarna. +# 4. Neither the name of the author nor the names of contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +__version__ = '0.9' + +def getCodes(): + """Returns a dict mapping code names to widgets""" + + from widgets import (BarcodeI2of5, + BarcodeCode128, + BarcodeStandard93, + BarcodeExtended93, + BarcodeStandard39, + BarcodeExtended39, + BarcodeMSI, + BarcodeCodabar, + BarcodeCode11, + BarcodeFIM, + BarcodePOSTNET) + + #newer codes will typically get their own module + from eanbc import Ean13BarcodeWidget, Ean8BarcodeWidget + + + #the module exports a dictionary of names to widgets, to make it easy for + #apps and doc tools to display information about them. + codes = {} + for widget in ( + BarcodeI2of5, + BarcodeCode128, + BarcodeStandard93, + BarcodeExtended93, + BarcodeStandard39, + BarcodeExtended39, + BarcodeMSI, + BarcodeCodabar, + BarcodeCode11, + BarcodeFIM, + BarcodePOSTNET, + Ean13BarcodeWidget, + Ean8BarcodeWidget, + ): + codeName = widget.codeName + codes[codeName] = widget + + return codes + +def getCodeNames(): + """Returns sorted list of supported bar code names""" + return sorted(getCodes().keys()) + +def createBarcodeDrawing(codeName, **options): + """This creates and returns a drawing with a barcode. + """ + from reportlab.graphics.shapes import Drawing, Group + + codes = getCodes() + bcc = codes[codeName] + width = options.pop('width',None) + height = options.pop('height',None) + isoScale = options.pop('isoScale',0) + kw = {} + for k,v in options.iteritems(): + if k.startswith('_') or k in bcc._attrMap: kw[k] = v + bc = bcc(**kw) + + #size it after setting the data + x1, y1, x2, y2 = bc.getBounds() + w = float(x2 - x1) + h = float(y2 - y1) + sx = width not in ('auto',None) + sy = height not in ('auto',None) + if sx or sy: + sx = sx and width/w or 1.0 + sy = sy and height/h or 1.0 + if isoScale: + if sx<1.0 and sy<1.0: + sx = sy = max(sx,sy) + else: + sx = sy = min(sx,sy) + + w *= sx + h *= sy + else: + sx = sy = 1 + + #bc.x = -sx*x1 + #bc.y = -sy*y1 + d = Drawing(width=w,height=h,transform=[sx,0,0,sy,-sx*x1,-sy*y1]) + d.add(bc, "_bc") + return d + +def createBarcodeImageInMemory(codeName, **options): + """This creates and returns barcode as an image in memory. + """ + d = createBarcodeDrawing(codeName, **options) + return d.asString(format) |
