Hi Matthew,

Thanks. The problem is though, that I'm following the docs and using
another class to 'shape' my barchart ...

# Use this one for client
signup
class interests_class(Drawing):

    format = 'gif'

    def __init__(self, width=400, height=250, *args, **kw):

        apply(Drawing.__init__,(self,width,height)+args,kw)

        # set the chart
type
        self.add(VerticalBarChart(), name='chart')

        #
Title
        self.add(String(200,240,''), name='title')

        ...........

if __name__=='__main__':
    #use the standard 'save' method to save barchart.gif, barchart.pdf
etc
    #for quick feedback while
working.
 
interests_class().save(formats=['gif','png','jpg','pdf'],outDir='.',fnRoot='barchart')

# Then I'm using the above class to create my barchart image ....

def interests_barchart(request):

    d = interests_class()

    d.chart.data=[ ....  ]

    #  Give it a
title
    if request.has_key('title'):
        d.title.text = request['title']

    # get a GIF (or PNG, JPG, or
whatever)
    # binaryStuff = d.asString('gif')

    return d

# I'd already tried your suggestion previously as in ...

## Takes the d object here
image = interests_barchart(request)

p.drawInlineImage(image, 100,350, width=100,height=100)

The problem is that the d object isn't actually a PIL object at all.
The barchart_interests function works with a Drawing PIL object, but
it doesn't inherit from it and in turn - it doesn't return a PIL
object. 'd' is a barchart_interests() object, it has no format
attribute and no convert() method. I can fake the format attribute but
I can't fake the convert method.

Strictly speaking then, d object should inherit from Drawing -
although the doc examples do it my way and not the other way. I'd
prefer not to have to rewrite the class.

The preferable solution would be to be able to get_file_contents()
from the HttpResponseObject somehow. Otherwise I'll have to write
multiple classes to output my barcharts in multiple ways. (This isn't
my only barchart).

Thanks

On Oct 19, 12:55 pm, Malcolm Tredinnick <[EMAIL PROTECTED]>
wrote:
> On Fri, 2007-10-19 at 04:32 -0700, dbee wrote:
> > I'm creating a pdf document dynamically, I need to include barchart
> > data in the document. The  bar chart data is also created dynamically
> > with report lab. I can get the barchart data at my url ...
>
> > def barchart_interests(request):
>
> > .............
>
> >     #get a GIF (or PNG, JPG, or
> > whatever)
> >     binaryStuff = d.asString('gif')
>
> >     return HttpResponse(binaryStuff, 'image/gif')
>
> > Now I want to use that barchart in my pdf ...
>
> > def dyn_pdf(request):
>
> >    buffer = StringIO()
>
> >     # Create the PDF object, using the StringIO object as its
> > "file."
> >     p = canvas.Canvas(buffer)
>
> >     # Get the HttpResponseObject
> >     image = interests_barchart(request)
>
> >     # Insert the image into the pdf document
> >     p.drawInlineImage(image, 100,350, width=100,height=100)
>
> >     p.showPage()
> >     p.save()
>
> > Things that I've tried ....
>
> >        p.drawInlineImage(image._get_contents, 100,350,
> > width=100,height=100)
> >        Attribute Error: 'function' object has no attribute 'format'
>
> >        p.drawInlineImage(image.content, 100,350, width=100,height=100)
> >        I/O Error: Cannot open resource "GIF87a
>
> This one is close, but you're not reading the Reportlab documentation
> correctly. drawInlineImage() takes a filename or a PIL image object as
> its first argument, where as image.content is the binary data that is in
> the HttpResponse. So you need to create an Image object from that data
> first. This should be close:
>
>         from PIL import Image
>         from cStringIO import StringIO
>
>         ...
>         img = Image.open(StringIO(image.content))
>         p.drawInlineImage(img, ...)
>
> Read the PIL documentation for more possibilities.
>
> Regards,
> Malcolm


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to