[reportlab-users] RGBA Colors

Kevin D Smith Kevin.Smith at sixquickrun.com
Tue Nov 24 12:17:24 EST 2009

On Nov 24, 2009, at 10:53 AM, Robin Becker wrote:

> Kevin D Smith wrote:

>> A little while ago I asked if there was a way to get RGBA colors

>> (like in CSS3) where the A component is an alpha value to set

>> transparency. While doing some searching last night, I realized

>> that the svn version of ReportLab already has alpha support;

>> however, it didn't go quite as far as I had hoped. Methods were

>> added to the canvas to set the fill and stroke opacity, which is

>> nice, but if you are using Platypus, you don't have access to them.

>> I messed around with the code a bit in textobject.py and colors.py

>> to add alpha arguments to all of the color methods as well as an

>> alpha component to rgb and cmyk colors. With the attached patch,

>> you can specify colors with an alpha value that can be used in

>> Platypus or anywhere else colors are used. I would like this patch

>> to be considered for official use so that I don't have to remember

>> to add this support for my projects. Does anyone know what that

>> would take?

> .........


> This looks like a nice patch, but there might be hidden problems.

> The opacity patch was contributed and one of the approaches

> considered was that opacity should go into the colour objects.

> However, since opacity is actually stored on the canvas there are

> problems related to using a mixture of colours containing alpha and

> non-alpha colours.


> In the colour+a model setting a colour with a in [0,1] means an

> action is carried out on the canvas.


> So


> setFill(red+alpha=0.5) ==> canvas alpha = 0.5


> follow that by


> setFill(black+alpha=None) canvas alpha remains 0.5


> which I would argue is unexpected. Forgive me if your patch doesn't

> exactly follow this model, but that's what my quick scan seems to

> imply.


> We seem to need to get the incoming colour+alpha=None to restore the

> appropriate alpha value. The problem then is what that value should

> be; who owns the alpha value?


> I'm not against this idea, I did already consider such a mechanism.

> Perhaps others would like to comment.


> One other point is that it is very easy to make a flowable that

> allows platypus to mess with canvas properties.

> --

> Robin Becker

I see your point about alpha not being reset. I was using the None
value in the methods and the colors themselves so that they wouldn't
force a PDF document to be versioned as 1.4 unless alpha was
explicitly used. If I didn't care about that fact, I would have set
alpha to 1 in all of those places. But it is a bit problematic making
it both work properly and be backwards compatible.

As far as writing flowables to use the canvas properties, at the
moment, I use very basic components of platypus like paragraphs and
tables. I would prefer not to have to write customized ones just to
get alpha values in the colors.

Kevin D Smith
Kevin.Smith at sixquickrun.com

More information about the reportlab-users mailing list