How to change text/font color in reportlab.pdfgen

后端 未结 3 587
执念已碎
执念已碎 2021-02-01 19:02

I want to use a different color of text in my auto-generated PDF.

According to the reportlab docs all I need to do is:

self.canvas.setFillColorRGB(255,0,         


        
相关标签:
3条回答
  • 2021-02-01 19:11

    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()
    
    0 讨论(0)
  • 2021-02-01 19:19
    from reportlab.lib.colors import HexColor
    ...
    
    # sets fill color like orange
    c.setFillColor(HexColor(0xff8100))
    # or 
    c.setFillColor(HexColor('#ff8100'))
    
    ...
    
    0 讨论(0)
  • 2021-02-01 19:29

    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).

    0 讨论(0)
提交回复
热议问题