def transformAndFlatten(A,p): ''' transform an flatten a list of points A transformation matrix p points [(x0,y0),....(xk,yk).....] ''' if tuple(A)!=(1,0,0,1,0,0): iA = inverse(A) p = transformPoints(iA,p) return tuple(flatten(p))
def transformAndFlatten(A, p): ''' transform an flatten a list of points A transformation matrix p points [(x0,y0),....(xk,yk).....] ''' if tuple(A) != (1, 0, 0, 1, 0, 0): iA = inverse(A) p = transformPoints(iA, p) return tuple(flatten(p))
def pageNumbering(objList): for obj in objList: if isinstance(obj, PmlParagraph): for frag in obj.frags: if frag.pageNumber: frag.text = pagenumber #import pdb; pdb.set_trace() elif isinstance(obj, PmlTable): pageNumbering(flatten(obj._cellvalues))
def pageNumbering(objList): for obj in flatten(objList): if isinstance(obj, PmlParagraph): for frag in obj.frags: if frag.pageNumber: frag.text = str(pagenumber) elif isinstance(obj, PmlTable): # Flatten the cells ([[1,2], [3,4]] becomes [1,2,3,4]) flat_cells = [item for sublist in obj._cellvalues for item in sublist] pageNumbering(flat_cells)
def pageNumbering(objList, canvas): for obj in flatten(objList): if isinstance(obj, PmlParagraph): for frag in obj.frags: if frag.pageNumber: frag.text = str(pagenumber) if frag.pageCount: frag.text = u"##PAGES##" canvas._to_page_count = frag.text elif isinstance(obj, PmlTable): # Flatten the cells ([[1,2], [3,4]] becomes [1,2,3,4]) flat_cells = [item for sublist in obj._cellvalues for item in sublist] pageNumbering(flat_cells, canvas)
def whereFromSeq(v): if v: v = flatten(v) tag0 = next( (_ for _ in v if hasattr(_, '__rml2pdf_tag_annotation__')), None) if not tag0: return tag0 = tag0.__rml2pdf_tag_annotation__[3] if len(v) == 1: return tag0 else: tagn = next((_ for _ in reversed(v) if hasattr(_, '__rml2pdf_tag_annotation__')), None) if not tagn: return tag0 tagn = tagn.__rml2pdf_tag_annotation__[3] if tagn is tag0: return tag0 t0 = (tag0[1] or tag0[2]) if tag0 else None tn = (tagn[2] or tagn[1]) if tagn else None return (tag0[0], t0, tn)
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 = list(map(float, scales and flatten(scales) or [1])) scales = list(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)
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
def makeLines(self): g = Group() labelFmt = self.lineLabelFormat P = self._positions if self.reversePlotOrder: P.reverse() lines = self.lines styleCount = len(lines) _inFill = self.inFill if (_inFill or self._pairInFills or [ rowNo for rowNo in range(len(P)) if getattr(lines[rowNo % styleCount], 'inFill', False) ]): inFillY = self.categoryAxis._y inFillX0 = self.valueAxis._x inFillX1 = inFillX0 + self.categoryAxis._length inFillG = getattr(self, '_inFillG', g) yzero = self._yzero # Iterate over data rows. for rowNo, row in enumerate( reversed(P) if self.reversePlotOrder else P): styleIdx = rowNo % styleCount rowStyle = lines[styleIdx] strokeColor = rowStyle.strokeColor fillColor = getattr(rowStyle, 'fillColor', strokeColor) inFill = getattr(rowStyle, 'inFill', _inFill) dash = getattr(rowStyle, 'strokeDashArray', None) lineStyle = getattr(rowStyle, 'lineStyle', None) if hasattr(rowStyle, 'strokeWidth'): strokeWidth = rowStyle.strokeWidth elif hasattr(lines, 'strokeWidth'): strokeWidth = lines.strokeWidth else: strokeWidth = None # Iterate over data columns. if lineStyle == 'bar': barWidth = getattr(rowStyle, 'barWidth', Percentage(50)) if isinstance(barWidth, Percentage): hbw = self._hngs * barWidth * 0.01 else: hbw = barWidth * 0.5 for x, y in row: g.add( Rect(x - hbw, min(y, yzero), 2 * hbw, abs(y - yzero), strokeWidth=strokeWidth, strokeColor=strokeColor, fillColor=fillColor)) elif self.joinedLines or lineStyle == 'joinedLine': points = flatten(row) if inFill or isinstance(row, FillPairedData): filler = getattr(rowStyle, 'filler', None) if isinstance(row, FillPairedData): fpoints = points + flatten(reversed(P[row.other])) else: fpoints = [inFillX0, inFillY ] + points + [inFillX1, inFillY] if filler: filler.fill(self, inFillG, rowNo, fillColor, fpoints) else: inFillG.add( Polygon(fpoints, fillColor=fillColor, strokeColor=strokeColor if strokeColor == fillColor else None, strokeWidth=strokeWidth or 0.1)) if not inFill or inFill == 2 or strokeColor != fillColor: line = PolyLine(points, strokeColor=strokeColor, strokeLineCap=0, strokeLineJoin=1) if strokeWidth: line.strokeWidth = strokeWidth if dash: line.strokeDashArray = dash g.add(line) if hasattr(rowStyle, 'symbol'): uSymbol = rowStyle.symbol elif hasattr(lines, 'symbol'): uSymbol = lines.symbol else: uSymbol = None if uSymbol: for colNo, (x, y) in enumerate(row): symbol = uSymbol2Symbol(tpcGetItem(uSymbol, colNo), x, y, rowStyle.strokeColor) if symbol: g.add(symbol) # Draw item labels. for colNo, (x, y) in enumerate(row): self.drawLabel(g, rowNo, colNo, x, y) return g