2012-03-24 83 views

Respuesta

16

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

Tienes que imaginarte dibujando un lienzo. Debes hacer toda la configuración antes de dibujar. A continuación se muestra un ejemplo que preparé para mostrar mejor cómo diseñar un texto, dibujar una línea y dibujar un rectángulo, todo con la capacidad de ponerles color.

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() 
+7

Por lo que puedo decir, usar el espacio de 256 colores no funcionará. El manual indica que el uso de 1 es 'todas las luces encendidas'. Entonces, crear 256,256,256 se hace usando (1,1,1). Por lo tanto, para obtener algo intermedio, tendrás que usar decimales. Para mí, quería el RGB: (75,116,156) así que tuve que escribir: 'setFillColorRGB (0.29296875,0.453125,0.609375)'. Ese es el equivalente a: '75/256, 116/256, 156/256'. Un poco ridículo OMI, pero salió perfecto. – Garfonzo

+0

buena información :) no hablo lo suficientemente profundo en estas cosas de color, podría ser útil para mi trabajo futuro. –

+0

Esto de hecho funciona! Pero cuando configuro un color diferente, el texto parece transparente ... – gbrennon

0

No puedo verificar esto en el momento, pero si nos fijamos en el ejemplo los vinculados siempre que fijan el color antes de llamar drawCenteredString siempre lo hacen con setFillColor, nunca se setFillColorRGB, sólo con este último para definir el color de rects . Así que trate en lugar de cambiarlo a

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

No sé si se dice que esta en ese documento o no, pero la variable red se define como una constante en uno de los módulos ReportLab, así que si tienes cualquier error con eso, solo asegúrate de incluir el módulo apropiado (el nombre exacto se me escapa en este momento).

+0

setFillColor() no hace nada para el texto, tampoco. – Goro

+0

Entonces supongo que el ejemplo es incorrecto. Mirando en los documentos, en la sección 2.11 del Manual del usuario se dan ejemplos de cómo configurar el color del texto de esta manera. ¿Eres capaz de establecer el color de las cosas que no sean texto? Si no, tal vez sea un problema más general sin generar color. –

8
from reportlab.lib.colors import HexColor 
... 

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

... 
Cuestiones relacionadas