summaryrefslogtreecommitdiff
path: root/bin/reportlab/graphics/barcode/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/reportlab/graphics/barcode/test.py')
-rw-r--r--bin/reportlab/graphics/barcode/test.py185
1 files changed, 185 insertions, 0 deletions
diff --git a/bin/reportlab/graphics/barcode/test.py b/bin/reportlab/graphics/barcode/test.py
new file mode 100644
index 00000000000..3342947672e
--- /dev/null
+++ b/bin/reportlab/graphics/barcode/test.py
@@ -0,0 +1,185 @@
+#!/usr/pkg/bin/python
+
+import os, sys, time
+
+from reportlab.graphics.barcode.common import *
+from reportlab.graphics.barcode.code39 import *
+from reportlab.graphics.barcode.code93 import *
+from reportlab.graphics.barcode.code128 import *
+from reportlab.graphics.barcode.usps import *
+
+
+from reportlab.test import unittest
+from reportlab.test.utils import makeSuiteForClasses, outputfile, printLocation
+from reportlab.platypus import Spacer, SimpleDocTemplate, Table, TableStyle, Preformatted, PageBreak
+from reportlab.lib.units import inch, cm
+from reportlab.lib import colors
+
+from reportlab.pdfgen.canvas import Canvas
+from reportlab.lib.styles import getSampleStyleSheet
+from reportlab.platypus.paragraph import Paragraph
+from reportlab.platypus.frames import Frame
+from reportlab.platypus.flowables import XBox, KeepTogether
+from reportlab.graphics.shapes import Drawing
+
+from reportlab.graphics.barcode import getCodes, getCodeNames, createBarcodeDrawing
+def run():
+ styles = getSampleStyleSheet()
+ styleN = styles['Normal']
+ styleH = styles['Heading1']
+ story = []
+
+ #for codeNames in code
+ story.append(Paragraph('I2of5', styleN))
+ story.append(I2of5(1234, barWidth = inch*0.02, checksum=0))
+ story.append(Paragraph('MSI', styleN))
+ story.append(MSI(1234))
+ story.append(Paragraph('Codabar', styleN))
+ story.append(Codabar("A012345B", barWidth = inch*0.02))
+ story.append(Paragraph('Code 11', styleN))
+ story.append(Code11("01234545634563"))
+ story.append(Paragraph('Code 39', styleN))
+ story.append(Standard39("A012345B%R"))
+ story.append(Paragraph('Extended Code 39', styleN))
+ story.append(Extended39("A012345B}"))
+ story.append(Paragraph('Code93', styleN))
+ story.append(Standard93("CODE 93"))
+ story.append(Paragraph('Extended Code93', styleN))
+ story.append(Extended93("L@@K! Code 93 :-)")) #, barWidth=0.005 * inch))
+ story.append(Paragraph('Code 128', styleN))
+ c=Code128("AB-12345678") #, barWidth=0.005 * inch)
+ #print 'WIDTH =', (c.width / inch), 'barWidth =', (c.barWidth / inch)
+ #print 'LQ =', (c.lquiet / inch), 'RQ =', (c.rquiet / inch)
+ story.append(c)
+ story.append(Paragraph('USPS FIM', styleN))
+ story.append(FIM("A"))
+ story.append(Paragraph('USPS POSTNET', styleN))
+ story.append(POSTNET('78247-1043'))
+
+ from reportlab.graphics.barcode import createBarcodeDrawing
+ story.append(Paragraph('EAN13', styleN))
+ bcd = createBarcodeDrawing('EAN13', value='123456789012')
+ story.append(bcd)
+ story.append(Paragraph('EAN8', styleN))
+ bcd = createBarcodeDrawing('EAN8', value='1234567')
+ story.append(bcd)
+
+ story.append(Paragraph('Label Size', styleN))
+ story.append(XBox((2.0 + 5.0/8.0)*inch, 1 * inch, '1x2-5/8"'))
+ story.append(Paragraph('Label Size', styleN))
+ story.append(XBox((1.75)*inch, .5 * inch, '1/2x1-3/4"'))
+ c = Canvas('out.pdf')
+ f = Frame(inch, inch, 6*inch, 9*inch, showBoundary=1)
+ f.addFromList(story, c)
+ c.save()
+ print 'saved out.pdf'
+
+def fullTest(fileName="test_full.pdf"):
+ """Creates large-ish test document with a variety of parameters"""
+
+ story = []
+
+ styles = getSampleStyleSheet()
+ styleN = styles['Normal']
+ styleH = styles['Heading1']
+ styleH2 = styles['Heading2']
+ story = []
+
+ story.append(Paragraph('ReportLab Barcode Test Suite - full output', styleH))
+ story.append(Paragraph('Generated on %s' % time.ctime(time.time()), styleN))
+
+ story.append(Paragraph('', styleN))
+ story.append(Paragraph('Repository information for this build:', styleN))
+ #see if we can figure out where it was built, if we're running in source
+ if os.path.split(os.getcwd())[-1] == 'barcode' and os.path.isdir('.svn'):
+ #runnning in a filesystem svn copy
+ infoLines = os.popen('svn info').read()
+ story.append(Preformatted(infoLines, styles["Code"]))
+
+ story.append(Paragraph('About this document', styleH2))
+ story.append(Paragraph('History and Status', styleH2))
+
+ story.append(Paragraph("""
+ This is the test suite and docoumentation for the ReportLab open source barcode API,
+ being re-released as part of the forthcoming ReportLab 2.0 release.
+ """, styleN))
+
+ story.append(Paragraph("""
+ Several years ago Ty Sarna contributed a barcode module to the ReportLab community.
+ Several of the codes were used by him in hiw work and to the best of our knowledge
+ this was correct. These were written as flowable objects and were available in PDFs,
+ but not in our graphics framework. However, we had no knowledge of barcodes ourselves
+ and did not advertise or extend the package.
+ """, styleN))
+
+ story.append(Paragraph("""
+ We "wrapped" the barcodes to be usable within our graphics framework; they are now available
+ as Drawing objects which can be rendered to EPS files or bitmaps. For the last 2 years this
+ has been available in our Diagra and Report Markup Language products. However, we did not
+ charge separately and use was on an "as is" basis.
+ """, styleN))
+
+ story.append(Paragraph("""
+ A major licensee of our technology has kindly agreed to part-fund proper productisation
+ of this code on an open source basis in Q1 2006. This has involved addition of EAN codes
+ as well as a proper testing program. Henceforth we intend to publicise the code more widely,
+ gather feedback, accept contributions of code and treat it as "supported".
+ """, styleN))
+
+ story.append(Paragraph("""
+ This involved making available both downloads and testing resources. This PDF document
+ is the output of the current test suite. It contains codes you can scan (if you use a nice sharp
+ laser printer!), and will be extended over coming weeks to include usage examples and notes on
+ each barcode and how widely tested they are. This is being done through documentation strings in
+ the barcode objects themselves so should always be up to date.
+ """, styleN))
+
+ story.append(Paragraph('Usage examples', styleH2))
+ story.append(Paragraph("""
+ To be completed
+ """, styleN))
+
+ story.append(Paragraph('The codes', styleH2))
+ story.append(Paragraph("""
+ Below we show a scannable code from each barcode, with and without human-readable text.
+ These are magnified about 2x from the natural size done by the original author to aid
+ inspection. This will be expanded to include several test cases per code, and to add
+ explanations of checksums. Be aware that (a) if you enter numeric codes which are too
+ short they may be prefixed for you (e.g. "123" for an 8-digit code becomes "00000123"),
+ and that the scanned results and readable text will generally include extra checksums
+ at the end.
+ """, styleN))
+
+ codeNames = getCodeNames()
+ from reportlab.lib.utils import flatten
+ width = [float(x[8:]) for x in sys.argv if x.startswith('--width=')]
+ height = [float(x[9:]) for x in sys.argv if x.startswith('--height=')]
+ isoScale = [int(x[11:]) for x in sys.argv if x.startswith('--isoscale=')]
+ options = {}
+ if width: options['width'] = width[0]
+ if height: options['height'] = height[0]
+ if isoScale: options['isoScale'] = isoScale[0]
+ scales = [x[8:].split(',') for x in sys.argv if x.startswith('--scale=')]
+ scales = map(float,scales and flatten(scales) or [1])
+ scales = map(float,scales and flatten(scales) or [1])
+ for scale in scales:
+ story.append(PageBreak())
+ story.append(Paragraph('Scale = %.1f'%scale, styleH2))
+ story.append(Spacer(36, 12))
+ for codeName in codeNames:
+ s = [Paragraph('Code: ' + codeName, styleH2)]
+ for hr in (0,1):
+ s.append(Spacer(36, 12))
+ dr = createBarcodeDrawing(codeName, humanReadable=hr,**options)
+ dr.renderScale = scale
+ s.append(dr)
+ s.append(Spacer(36, 12))
+ s.append(Paragraph('Barcode should say: ' + dr._bc.value, styleN))
+ story.append(KeepTogether(s))
+
+ SimpleDocTemplate(fileName).build(story)
+ print 'created', fileName
+
+if __name__=='__main__':
+ run()
+ fullTest()