How to change text/font color in reportlab.pdfgen

耗尽温柔 提交于 2019-12-03 00:16:42

If you copy and paste the code in User Guide Section 2. You'll get a fancy coloured rectangle with a coloured Text within it. Probably the approach is not that clear in the user guide, I'd spent some time playing with it and I finally know how it works.

You need to imagine yourself drawing a canvas. You need to do all the setup before you draw. Below is an example I prepared to show better how to style a text, draw a line, and draw a rectangle, all with the ability to put colour on them.

from reportlab.pdfgen import canvas

def hello(c):
    from reportlab.lib.units import inch

    #First Example
    c.setFillColorRGB(1,0,0) #choose your font colour
    c.setFont("Helvetica", 30) #choose your font type and font size
    c.drawString(100,100,"Hello World") # write your text

    #Second Example
    c.setStrokeColorRGB(0,1,0.3) #choose your line color
    c.line(2,2,2*inch,2*inch)

    #Third Example
    c.setFillColorRGB(1,1,0) #choose fill colour
    c.rect(4*inch,4*inch,2*inch,3*inch, fill=1) #draw rectangle

c = canvas.Canvas("hello.pdf")

hello(c)
c.showPage()
c.save()
from reportlab.lib.colors import HexColor
...

# sets fill color like orange
c.setFillColor(HexColor(0xff8100))
# or 
c.setFillColor(HexColor('#ff8100'))

...

I can't verify this at the moment, but if you look in the linked example whenever they set the color before calling drawCenteredString they always do it with setFillColor, never setFillColorRGB, only using the latter to set the color of rects. So try instead changing it to

self.canvas.setFillColor(red)
self.canvas.drawCenteredString(...)

I don't know if it says this in that doc or not, but the variable red is defined as a constant in one of the ReportLab modules, so if you have any errors with that, just be sure to include the appropriate module (the exact name escapes me at the moment).

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!