Cómo cambiar el color del texto / fuente en reportlab.pdfgen

Quiero usar un color de texto diferente en mi PDF generado automáticamente.

De acuerdo con la documentación de reportlab, todo lo que necesito hacer es:

self.canvas.setFillColorRGB(255,0,0) self.canvas.drawCentredString(...) 

Pero eso no hace nada. El texto es negro pase lo que pase.

Related of "Cómo cambiar el color del texto / fuente en reportlab.pdfgen"

Si copia y pega el código en la Sección 2 de la Guía del usuario, obtendrá un rectángulo coloreado y elegante con un Texto coloreado dentro. Probablemente el enfoque no esté tan claro en la guía del usuario, pasé un tiempo jugando con él y finalmente sé cómo funciona.

Necesitas imaginarte a ti mismo dibujando un canvas. Necesitas hacer toda la configuración antes de dibujar. A continuación se muestra un ejemplo que preparé para mostrar mejor cómo dar estilo a un texto, dibujar una línea y dibujar un rectángulo, todo con la capacidad de poner color en ellos.

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

No puedo verificar esto en este momento, pero si miras en el ejemplo vinculado siempre que establecen el color antes de llamar a drawCenteredString , siempre lo hacen con setFillColor , nunca setFillColorRGB , y solo usamos este último para establecer el color de rects. Así que intenta cambiarlo a

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

No sé si dice eso en ese documento o no, pero la variable red se define como una constante en uno de los módulos de ReportLab, por lo que si tiene algún error con eso, asegúrese de incluir el módulo apropiado (el el nombre exacto se me escapa en este momento).