def test2(self):
        "Test two strings in transformed group in drawing."

        path = outputfile("test_renderSVG_simple_test2.svg")

        d = Drawing(200, 100)
        g = Group()
        g.add(String(0, 0, "foo"))
        g.add(String(100, 0, "bar"))
        g.scale(1.5, 1.2)
        g.translate(50, 0)
        d.add(g)
        renderSVG.drawToFile(d, path)

        if not HAVE_XML_PARSER:
            warnIgnoredRestofTest()
            return

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]  # flipping group
        dg = fg.getElementsByTagName('g')[0]  # diagram group
        g = dg.getElementsByTagName('g')[0]  # custom group
        textChildren = g.getElementsByTagName('text')  # text nodes
        t0 = string.strip(textChildren[0].childNodes[0].nodeValue)
        t1 = string.strip(textChildren[1].childNodes[0].nodeValue)

        assert t0 == 'foo'
        assert t1 == 'bar'
示例#2
0
    def test2(self):
        "Test two strings in transformed group in drawing."

        path = outputfile("test_renderSVG_simple_test2.svg")

        d = Drawing(200, 100)
        g = Group()
        g.add(String(0, 0, "foo"))
        g.add(String(100, 0, "bar"))
        g.scale(1.5, 1.2)
        g.translate(50, 0)
        d.add(g)
        renderSVG.drawToFile(d, path)

        if not HAVE_XML_PARSER:
            warnIgnoredRestofTest()
            return

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]           # flipping group
        dg = fg.getElementsByTagName('g')[0]            # diagram group
        g = dg.getElementsByTagName('g')[0]             # custom group
        textChildren = g.getElementsByTagName('text')   # text nodes
        t0 = textChildren[0].childNodes[0].nodeValue.strip()
        t1 = textChildren[1].childNodes[0].nodeValue.strip()

        assert t0 == 'foo'
        assert t1 == 'bar'
    def test0(self):
        "Test two strings in drawing."

        path = outputfile("axestest0.svg")
        from reportlab.graphics.charts.axes import XCategoryAxis

        d = XCategoryAxis().demo()
        renderSVG.drawToFile(d, path)
示例#4
0
    def test0(self):
        "Test two strings in drawing."

        path = outputfile("axestest0.svg")
        from reportlab.graphics.charts.axes import XCategoryAxis

        d = XCategoryAxis().demo()
        renderSVG.drawToFile(d, path)
示例#5
0
    def test3(self):
        from reportlab.lib.units import cm
        from reportlab.lib import colors

        width=300
        height=60

        #Create fairly simple drawing object,
        drawing=Drawing(width, height)

        p=ArcPath(strokeColor=colors.darkgreen,
                          fillColor=colors.green,
                          hrefURL="http://en.wikipedia.org/wiki/Vector_path",
                          hrefTitle="This big letter C is actually a closed vector path.",
                          strokewidth=0)
        p.addArc(1*cm, 1*cm, 0.8*cm, 20, 340, moveTo=True)
        p.addArc(1*cm, 1*cm, 0.9*cm, 20, 340, reverse=True)
        p.closePath()
        drawing.add(p)

        drawing.add(Rect(2.25*cm, 0.1*cm, 1.5*cm, 0.8*cm, rx=0.25*cm, ry=0.25*cm,

        hrefURL="http://en.wikipedia.org/wiki/Rounded_rectangle",
                               hrefTitle="Rounded Rectangle",
                               strokeColor=colors.red,
                               fillColor=colors.yellow))

        drawing.add(String(1*cm, 1*cm, "Hello World!",
                                 hrefURL="http://en.wikipedia.org/wiki/Hello_world",
                                 hrefTitle="Why 'Hello World'?",
                                 fillColor=colors.darkgreen))
        drawing.add(Rect(4.5*cm, 0.5*cm, 5*cm, 1*cm,
                                hrefURL="http://en.wikipedia.org/wiki/Rectangle",
                                hrefTitle="Wikipedia page on rectangles",
                                strokeColor=colors.blue,
                                fillColor=colors.red))
        drawing.add(Ellipse(7*cm, 1*cm, 2*cm, 0.95*cm,
                                  hrefURL="http://en.wikipedia.org/wiki/Ellipse",
                                  strokeColor=colors.black,
                                  fillColor=colors.yellow))
        drawing.add(Circle(7*cm, 1*cm, 0.9*cm,
                                  hrefURL="http://en.wikipedia.org/wiki/Circle",
                                 strokeColor=colors.black,
                                 fillColor=colors.brown))
        drawing.add(Ellipse(7*cm, 1*cm, 0.5*cm, 0.9*cm,
                                  hrefTitle="Tooltip with no link?",
                                  strokeColor=colors.black,
                                  fillColor=colors.black))
        drawing.add(Polygon([4.5*cm, 1.25*cm, 5*cm, 0.1*cm, 4*cm, 0.1*cm],
                                  hrefURL="http://en.wikipedia.org/wiki/Polygon",
                                  hrefTitle="This triangle is a simple polygon.",
                                  strokeColor=colors.darkgreen,
                                  fillColor=colors.green))

        renderSVG.drawToFile(drawing, outputfile("test_renderSVG_simple_test3.svg"))
示例#6
0
    def test3(self):
        from reportlab.lib.units import cm
        from reportlab.lib import colors

        width=300
        height=60

        #Create fairly simple drawing object,
        drawing=Drawing(width, height)

        p=ArcPath(strokeColor=colors.darkgreen,
                          fillColor=colors.green,
                          hrefURL="http://en.wikipedia.org/wiki/Vector_path",
                          hrefTitle="This big letter C is actually a closed vector path.",
                          strokewidth=0)
        p.addArc(1*cm, 1*cm, 0.8*cm, 20, 340, moveTo=True)
        p.addArc(1*cm, 1*cm, 0.9*cm, 20, 340, reverse=True)
        p.closePath()
        drawing.add(p)

        drawing.add(Rect(2.25*cm, 0.1*cm, 1.5*cm, 0.8*cm, rx=0.25*cm, ry=0.25*cm,

        hrefURL="http://en.wikipedia.org/wiki/Rounded_rectangle",
                               hrefTitle="Rounded Rectangle",
                               strokeColor=colors.red,
                               fillColor=colors.yellow))

        drawing.add(String(1*cm, 1*cm, "Hello World!",
                                 hrefURL="http://en.wikipedia.org/wiki/Hello_world",
                                 hrefTitle="Why 'Hello World'?",
                                 fillColor=colors.darkgreen))
        drawing.add(Rect(4.5*cm, 0.5*cm, 5*cm, 1*cm,
                                hrefURL="http://en.wikipedia.org/wiki/Rectangle",
                                hrefTitle="Wikipedia page on rectangles",
                                strokeColor=colors.blue,
                                fillColor=colors.red))
        drawing.add(Ellipse(7*cm, 1*cm, 2*cm, 0.95*cm,
                                  hrefURL="http://en.wikipedia.org/wiki/Ellipse",
                                  strokeColor=colors.black,
                                  fillColor=colors.yellow))
        drawing.add(Circle(7*cm, 1*cm, 0.9*cm,
                                  hrefURL="http://en.wikipedia.org/wiki/Circle",
                                 strokeColor=colors.black,
                                 fillColor=colors.brown))
        drawing.add(Ellipse(7*cm, 1*cm, 0.5*cm, 0.9*cm,
                                  hrefTitle="Tooltip with no link?",
                                  strokeColor=colors.black,
                                  fillColor=colors.black))
        drawing.add(Polygon([4.5*cm, 1.25*cm, 5*cm, 0.1*cm, 4*cm, 0.1*cm],
                                  hrefURL="http://en.wikipedia.org/wiki/Polygon",
                                  hrefTitle="This triangle is a simple polygon.",
                                  strokeColor=colors.darkgreen,
                                  fillColor=colors.green))

        renderSVG.drawToFile(drawing, outputfile("test_renderSVG_simple_test3.svg"))
示例#7
0
文件: common.py 项目: pacoqueen/ginn
 def guardar_a_svg(self, nombrearchivo = None):
     """
     Dibuja el código de barras en SVG.
     Devuelve el nombre del archivo.
     """
     if not nombrearchivo:
         import time, os
         from tempfile import gettempdir
         nombrearchivo = os.path.join(gettempdir(), "barcode39_%s.svg" % ('_'.join(map(str, time.localtime()[:6]))))
     from reportlab.graphics.shapes import Drawing
     from reportlab.lib.units import cm
     tamcanvas = (self.width + 2, self.height + 10 + 0.4 * cm)
     dw = Drawing(width = tamcanvas[0], height = tamcanvas[1])
     self.drawOnDW(dw, 1, tamcanvas[1] - 5 - self.height)
     from reportlab.graphics import renderSVG
     renderSVG.drawToFile(dw, nombrearchivo, "SVG")
     nombrearchivo = self.__corregir_stroke_linecap(nombrearchivo)
     return nombrearchivo
    def test0(self):
        "Test two strings in drawing."

        path = outputfile("test_renderSVG_simple_test0.svg")

        d = Drawing(200, 100)
        d.add(String(0, 0, "foo"))
        d.add(String(100, 0, "bar"))
        renderSVG.drawToFile(d, path)

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]  # flipping group
        dg = fg.getElementsByTagName('g')[0]  # diagram group
        textChildren = dg.getElementsByTagName('text')  # text nodes
        t0 = textChildren[0].childNodes[0].nodeValue.strip()
        t1 = textChildren[1].childNodes[0].nodeValue.strip()
        assert t0 == 'foo'
        assert t1 == 'bar'
    def test4(self):
        "Test character encoding."

        path = outputfile("test_renderSVG_simple_test4.svg")
        specialChar = u'\u2019'

        d = Drawing(200, 100)
        d.add(String(0, 0, "foo" + specialChar))
        d.add(String(100, 0, "bar"))
        renderSVG.drawToFile(d, path)

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]  # flipping group
        dg = fg.getElementsByTagName('g')[0]  # diagram group
        textChildren = dg.getElementsByTagName('text')  # text nodes
        t0 = textChildren[0].childNodes[0].nodeValue.strip()
        t1 = textChildren[1].childNodes[0].nodeValue.strip()
        assert t0 == 'foo' + specialChar, "%s should equal %s" % (
            ascii(t0), ascii('foo' + specialChar))
        assert t1 == 'bar'
示例#10
0
def render_svg(drawing, opts, outbuf=None):
    if opts.pagesize in name2size:
        pagesize = name2size[opts.pagesize]
    else:
        pagesize = opts.pagesize or letter
    border = opts.border or 1*cm
    landscape = opts.landscape or False
    pgwidth, pgheight = pagesize if not landscape \
                        else (pagesize[1], pagesize[0])
    #print "drawing width, height:", drawing.width/inch, drawing.height/inch
    if drawing.width > pgwidth - 2*border:
        scalefact = (pgwidth - 2*border)/float(drawing.width)
        drawing.scale(scalefact, scalefact)
    else:
        scalefact = 1.0
    #border *= scalefact
    dwidth = drawing.width*scalefact
    dheight = drawing.height*scalefact

    buf = StringIO()
    renderSVG.drawToFile(drawing, buf)
    return buf.getvalue()
示例#11
0
def render_svg(drawing, opts, outbuf=None):
    if opts.pagesize in name2size:
        pagesize = name2size[opts.pagesize]
    else:
        pagesize = opts.pagesize or letter
    border = opts.border or 1 * cm
    landscape = opts.landscape or False
    pgwidth, pgheight = pagesize if not landscape \
                        else (pagesize[1], pagesize[0])
    #print "drawing width, height:", drawing.width/inch, drawing.height/inch
    if drawing.width > pgwidth - 2 * border:
        scalefact = (pgwidth - 2 * border) / float(drawing.width)
        drawing.scale(scalefact, scalefact)
    else:
        scalefact = 1.0
    #border *= scalefact
    dwidth = drawing.width * scalefact
    dheight = drawing.height * scalefact

    buf = StringIO()
    renderSVG.drawToFile(drawing, buf)
    return buf.getvalue()
示例#12
0
    def test0(self):
        "Test two strings in drawing."

        path = outputfile("test_renderSVG_simple_test0.svg")

        d = Drawing(200, 100)
        d.add(String(0, 0, "foo"))
        d.add(String(100, 0, "bar"))
        renderSVG.drawToFile(d, path)

        if not HAVE_XML_PARSER:
            warnIgnoredRestofTest()
            return

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]           # flipping group
        dg = fg.getElementsByTagName('g')[0]            # diagram group
        textChildren = dg.getElementsByTagName('text')  # text nodes
        t0 = (textChildren[0].childNodes[0].nodeValue).strip()
        t1 = (textChildren[1].childNodes[0].nodeValue).strip()
        assert t0 == 'foo'
        assert t1 == 'bar'
示例#13
0
    def test4(self):
        "Test character encoding."

        path = outputfile("test_renderSVG_simple_test4.svg")
        specialChar = u'\u2019'

        d = Drawing(200, 100)
        d.add(String(0, 0, "foo"+specialChar))
        d.add(String(100, 0, "bar"))
        renderSVG.drawToFile(d, path)

        if not HAVE_XML_PARSER:
            warnIgnoredRestofTest()
            return

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]           # flipping group
        dg = fg.getElementsByTagName('g')[0]            # diagram group
        textChildren = dg.getElementsByTagName('text')  # text nodes
        t0 = textChildren[0].childNodes[0].nodeValue.strip()
        t1 = textChildren[1].childNodes[0].nodeValue.strip()
        assert t0 == 'foo'+specialChar, "%s should equal %s" % (ascii(t0),ascii('foo'+specialChar))
        assert t1 == 'bar'
示例#14
0
    def test4(self):
        "Test character encoding."

        path = outputfile("test_renderSVG_simple_test4.svg")
        specialChar = u'\u2019'

        d = Drawing(200, 100)
        d.add(String(0, 0, "foo"+specialChar))
        d.add(String(100, 0, "bar"))
        renderSVG.drawToFile(d, path)

        if not HAVE_XML_PARSER:
            warnIgnoredRestofTest()
            return

        svg = load(path)
        fg = svg.getElementsByTagName('g')[0]           # flipping group
        dg = fg.getElementsByTagName('g')[0]            # diagram group
        textChildren = dg.getElementsByTagName('text')  # text nodes
        t0 = string.strip(textChildren[0].childNodes[0].nodeValue)
        t1 = string.strip(textChildren[1].childNodes[0].nodeValue)
        assert t0 == 'foo'+specialChar
        assert t1 == 'bar'
示例#15
0
    def test2(self):
        "Generate PDF and SVG documents of third sample drawing."

        d = self.makeDrawing2()
        renderPDF.drawToFile(d, outputfile('test_widgets_grids2.pdf'))
        renderSVG.drawToFile(d, outputfile('test_widgets_grids2.svg'))
示例#16
0
    def test2(self):
        "Generate PDF and SVG documents of third sample drawing."

        d = self.makeDrawing2()
        renderPDF.drawToFile(d, outputfile('test_widgets_grids2.pdf'))
        renderSVG.drawToFile(d, outputfile('test_widgets_grids2.svg'))
示例#17
0
    def test1(self):
        "Generate PDF and SVG documents of second sample drawing."

        d = self.makeDrawing1()
        renderPDF.drawToFile(d, outputfile('test_widgets_grids1.pdf'))
        renderSVG.drawToFile(d, outputfile('test_widgets_grids1.svg'))
示例#18
0
    def test0(self):
        "Generate PDF and SVG documents of first sample drawing."

        d = self.makeDrawing0()
        renderPDF.drawToFile(d, outputfile('test_widgets_grids0.pdf'))
        renderSVG.drawToFile(d, outputfile('test_widgets_grids0.svg'))
示例#19
0
    def test0(self):
        "Generate PDF and SVG documents of first sample drawing."

        d = self.makeDrawing0()
        renderPDF.drawToFile(d, outputfile('test_widgets_grids0.pdf'))
        renderSVG.drawToFile(d, outputfile('test_widgets_grids0.svg'))
示例#20
0
    def test1(self):
        "Generate PDF and SVG documents of second sample drawing."

        d = self.makeDrawing1()
        renderPDF.drawToFile(d, outputfile('test_widgets_grids1.pdf'))
        renderSVG.drawToFile(d, outputfile('test_widgets_grids1.svg'))
示例#21
0
  def generate(self, value, stream=None,
               format='eps', includeText=None, textSize=14, dpi=300,
	       lineWidth = 1.2, lineHeight = 36):
    """
    Generates the requested bar code either via a stream or as the
    requested object type.

    @param value:   The string to convert to a barcode
    @param stream:  Optional argument of file name as a string, or any
                    open file style object.
    @param format: The format in which the output should be generated.
                  Valid file formats include pdf, eps, svg and
                  will require the stream argument be provided.
                  Valid object formats include
                  rldrawing (ReportLab Drawing object will be returned,
                  No stream argument is required).
    @param includeText: Boolean.  If true then human readable text will
                        be printed centered under the barcode.
    @param textSize: The point size of the human readable text.
    @param dpi: The dots per inch at which the bitmap should be generated.

    @return: None or a format dependent object.  Valid return values::
            eps : None
            pdf : None
            svg : None
            rl  : ReportLab Drawing
    @rtype: misc
    """

    assert (format in ('rl','pil') or stream is not None)

    d = self._generateDrawing(value, includeText, textSize, dpi)

    #
    # Process formats that return value instead of write to a file
    #
    if format == 'rl':
      return d

    #
    # A stream is required for the remaining formats
    #
    if not hasattr(stream, 'write'):
      closeFile = True
      stream = open(stream,'w')
    else:
      closeFile = False

    if format == 'pdf':
      from reportlab.graphics import renderPDF
      renderPDF.drawToFile(d, stream, 'GNUe')
    elif format == 'eps':
      from reportlab.graphics import renderPS
      renderPS.drawToFile(d, stream)
    elif format == 'svg':
      from reportlab.graphics import renderSVG
      renderSVG.drawToFile(d, stream)
##    elif format in ('png','tiff'):
##      from reportlab.graphics import renderPM
##      renderPM.drawToFile(d, stream,format.upper(), dpi=dpi)
##    elif format in ('pil',):
##      from reportlab.graphics import renderPM
##      return renderPM.drawToPIL(d, dpi=dpi)


#
# This code *should* be replaced with calls to renderPM
# but that appears broken in the .debs
#
    ##
    ## Raster-based output using PIL
    ##
    elif format in ('png','tiff','ppm','xbm'):

      code = value 	##
    
      lineWidth = int(lineWidth * dpi/72+.5)   # 300dpi
      lineHeight = int(lineHeight * dpi/72+.5)  # 300dpi
      # Special case for PostNet
      lineHeight2 = int(lineHeight * .45+.5)

      # Create a new monochrome image with a white backgint
      image = Image.new('1',(int(len(code)*lineWidth+.5),
         int(lineHeight+.5)), 1)
      draw = ImageDraw.Draw(image)
      offs = 0
      for ch in code:
        if ch == '1':
          draw.rectangle((offs,0,offs+lineWidth-1,lineHeight),
                          outline=0, fill=0)
        # Special case for PostNet
        elif ch == '2':
          draw.rectangle((offs,0,offs+lineWidth-1,lineHeight2),
                          outline=0, fill=0)
        offs += lineWidth

      image.save(stream, format)

    if closeFile:
      stream.close()
示例#22
0
class Drawing(Group, Flowable):
    """Outermost container; the thing a renderer works on.
    This has no properties except a height, width and list
    of contents."""

    _saveModes = (
        'pdf',
        'ps',
        'eps',
        'gif',
        'png',
        'jpg',
        'jpeg',
        'pct',
        'pict',
        'tiff',
        'tif',
        'py',
        'bmp',
        'svg',
        'tiffp',
        'tiffl',
        'tiff1',
    )

    _xtraAttrMap = AttrMap(
        width=AttrMapValue(isNumber, desc="Drawing width in points."),
        height=AttrMapValue(isNumber, desc="Drawing height in points."),
        canv=AttrMapValue(None),
        background=AttrMapValue(isValidChildOrNone,
                                desc="Background widget for the drawing"),
        hAlign=AttrMapValue(
            OneOf("LEFT", "RIGHT", "CENTER", "CENTRE"),
            desc="Horizontal alignment within parent document"),
        vAlign=AttrMapValue(OneOf("TOP", "BOTTOM", "CENTER", "CENTRE"),
                            desc="Vertical alignment within parent document"),
        #AR temporary hack to track back up.
        #fontName = AttrMapValue(isStringOrNone),
        renderScale=AttrMapValue(isNumber,
                                 desc="Global scaling for rendering"),
    )

    _attrMap = AttrMap(BASE=Group)
    _attrMap.update(_xtraAttrMap)

    def __init__(self, width=400, height=200, *nodes, **keywords):
        self.background = None
        apply(Group.__init__, (self, ) + nodes, keywords)
        self.width = width
        self.height = height
        self.hAlign = 'LEFT'
        self.vAlign = 'BOTTOM'
        self.renderScale = 1.0

    def _renderPy(self):
        I = {
            'reportlab.graphics.shapes':
            ['_DrawingEditorMixin', 'Drawing', 'Group']
        }
        G = _renderGroupPy(self._explode(), 'self', I)
        n = 'ExplodedDrawing_' + self.__class__.__name__
        s = '#Autogenerated by ReportLab guiedit do not edit\n'
        for m, o in I.items():
            s = s + 'from %s import %s\n' % (
                m, string.replace(str(o)[1:-1], "'", ""))
        s = s + '\nclass %s(_DrawingEditorMixin,Drawing):\n' % n
        s = s + '\tdef __init__(self,width=%s,height=%s,*args,**kw):\n' % (
            self.width, self.height)
        s = s + '\t\tapply(Drawing.__init__,(self,width,height)+args,kw)\n'
        s = s + G
        s = s + '\n\nif __name__=="__main__": #NORUNTESTS\n\t%s().save(formats=[\'pdf\'],outDir=\'.\',fnRoot=None)\n' % n
        return s

    def draw(self, showBoundary=_unset_):
        """This is used by the Platypus framework to let the document
        draw itself in a story.  It is specific to PDF and should not
        be used directly."""
        import renderPDF
        renderPDF.draw(self, self.canv, 0, 0, showBoundary=showBoundary)

    def wrap(self, availWidth, availHeight):
        width = self.width
        height = self.height
        renderScale = self.renderScale
        if renderScale != 1.0:
            width *= renderScale
            height *= renderScale
        return width, height

    def expandUserNodes(self):
        """Return a new drawing which only contains primitive shapes."""
        obj = Group.expandUserNodes(self)
        obj.width = self.width
        obj.height = self.height
        return obj

    def copy(self):
        """Returns a copy"""
        return self._copy(self.__class__(self.width, self.height))

    def asGroup(self, *args, **kw):
        return self._copy(apply(Group, args, kw))

    def save(self,
             formats=None,
             verbose=None,
             fnRoot=None,
             outDir=None,
             title='',
             **kw):
        """Saves copies of self in desired location and formats.
        Multiple formats can be supported in one call

        the extra keywords can be of the form
        _renderPM_dpi=96 (which passes dpi=96 to renderPM)
        """
        from reportlab import rl_config
        ext = ''
        if not fnRoot:
            fnRoot = getattr(self, 'fileNamePattern',
                             (self.__class__.__name__ + '%03d'))
            chartId = getattr(self, 'chartId', 0)
            if callable(fnRoot):
                fnRoot = fnRoot(chartId)
            else:
                try:
                    fnRoot = fnRoot % getattr(self, 'chartId', 0)
                except TypeError, err:
                    #the exact error message changed from 2.2 to 2.3 so we need to
                    #check a substring
                    if str(err).find('not all arguments converted') < 0: raise

        if os.path.isabs(fnRoot):
            outDir, fnRoot = os.path.split(fnRoot)
        else:
            outDir = outDir or getattr(self, 'outDir', '.')
        outDir = outDir.rstrip().rstrip(os.sep)
        if not outDir: outDir = '.'
        if not os.path.isabs(outDir):
            outDir = os.path.join(
                getattr(self, '_override_CWD', os.path.dirname(sys.argv[0])),
                outDir)
        if not os.path.isdir(outDir): os.makedirs(outDir)
        fnroot = os.path.normpath(os.path.join(outDir, fnRoot))
        plotMode = os.path.splitext(fnroot)
        if string.lower(plotMode[1][1:]) in self._saveModes:
            fnroot = plotMode[0]

        plotMode = map(str.lower, formats or getattr(self, 'formats', ['pdf']))
        verbose = (verbose is not None and (verbose, )
                   or (getattr(self, 'verbose', verbose), ))[0]
        _saved = logger.warnOnce.enabled, logger.infoOnce.enabled
        logger.warnOnce.enabled = logger.infoOnce.enabled = verbose
        if 'pdf' in plotMode:
            from reportlab.graphics import renderPDF
            filename = fnroot + '.pdf'
            if verbose: print "generating PDF file %s" % filename
            renderPDF.drawToFile(self,
                                 filename,
                                 title,
                                 showBoundary=getattr(self, 'showBorder',
                                                      rl_config.showBoundary),
                                 **_extraKW(self, '_renderPDF_', **kw))
            ext = ext + '/.pdf'
            if sys.platform == 'mac':
                import macfs, macostools
                macfs.FSSpec(filename).SetCreatorType("CARO", "PDF ")
                macostools.touched(filename)

        for bmFmt in ('gif', 'png', 'tif', 'jpg', 'tiff', 'pct', 'pict', 'bmp',
                      'tiffp', 'tiffl', 'tiff1'):
            if bmFmt in plotMode:
                from reportlab.graphics import renderPM
                filename = '%s.%s' % (fnroot, bmFmt)
                if verbose: print "generating %s file %s" % (bmFmt, filename)
                renderPM.drawToFile(self,
                                    filename,
                                    fmt=bmFmt,
                                    showBoundary=getattr(
                                        self, 'showBorder',
                                        rl_config.showBoundary),
                                    **_extraKW(self, '_renderPM_', **kw))
                ext = ext + '/.' + bmFmt

        if 'eps' in plotMode:
            try:
                from rlextra.graphics import renderPS_SEP as renderPS
            except ImportError:
                from reportlab.graphics import renderPS
            filename = fnroot + '.eps'
            if verbose: print "generating EPS file %s" % filename
            renderPS.drawToFile(self,
                                filename,
                                title=fnroot,
                                dept=getattr(self, 'EPS_info', ['Testing'])[0],
                                company=getattr(self, 'EPS_info',
                                                ['', 'ReportLab'])[1],
                                preview=getattr(self, 'preview',
                                                rl_config.eps_preview),
                                showBoundary=getattr(self, 'showBorder',
                                                     rl_config.showBoundary),
                                ttf_embed=getattr(self, 'ttf_embed',
                                                  rl_config.eps_ttf_embed),
                                **_extraKW(self, '_renderPS_', **kw))
            ext = ext + '/.eps'

        if 'svg' in plotMode:
            from reportlab.graphics import renderSVG
            filename = fnroot + '.svg'
            if verbose: print "generating EPS file %s" % filename
            renderSVG.drawToFile(self,
                                 filename,
                                 showBoundary=getattr(self, 'showBorder',
                                                      rl_config.showBoundary),
                                 **_extraKW(self, '_renderSVG_', **kw))
            ext = ext + '/.svg'

        if 'ps' in plotMode:
            from reportlab.graphics import renderPS
            filename = fnroot + '.ps'
            if verbose: print "generating EPS file %s" % filename
            renderPS.drawToFile(self,
                                filename,
                                showBoundary=getattr(self, 'showBorder',
                                                     rl_config.showBoundary),
                                **_extraKW(self, '_renderPS_', **kw))
            ext = ext + '/.ps'

        if 'py' in plotMode:
            filename = fnroot + '.py'
            if verbose: print "generating py file %s" % filename
            open(filename, 'w').write(self._renderPy())
            ext = ext + '/.py'

        logger.warnOnce.enabled, logger.infoOnce.enabled = _saved
        if hasattr(self, 'saveLogger'):
            self.saveLogger(fnroot, ext)
        return ext and fnroot + ext[1:] or ''
示例#23
0
def drawToFile(bc, filename):
    """Write barcode to SVG file <filename>."""
    renderSVG.drawToFile(barcode.rl.draw_barcode(bc), filename)