2012-03-24 14 views

risposta

16

Se si copia e incolla il codice nella sezione 2 della Guida per l'utente, si otterrà un rettangolo colorato con all'interno un testo colorato. Probabilmente l'approccio non è chiaro nella guida dell'utente, ho passato un po 'di tempo a giocarci e finalmente so come funziona.

È necessario immaginare di disegnare una tela. Devi fare tutto il setup prima di disegnare. Di seguito è riportato un esempio che ho preparato per mostrare meglio come stile un testo, tracciare una linea e disegnare un rettangolo, il tutto con la possibilità di mettere il colore su di essi.

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

Da quello che posso dire, l'utilizzo dello spazio colore 256 non funzionerà. Il manuale afferma che l'utilizzo di 1 è "tutte le luci completamente". Quindi, creare 256,256,256 viene effettivamente eseguito usando (1,1,1). Quindi, per ottenere qualcosa in mezzo, dovrai usare i decimali. Per quanto mi riguarda, volevo RGB: (75,116,156) quindi ho dovuto scrivere: 'setFillColorRGB (0.29296875,0.453125,0.609375)'. Questo è l'equivoco di: '75/256, 116/256, 156/256'. Un po 'ridicolo IMO, ma è venuto fuori perfetto. – Garfonzo

+0

buone informazioni :) l'havent si sofferma abbastanza in profondità in questi colori, potrebbe essere utile per il mio lavoro futuro. –

+0

Questo davvero funziona! Ma quando ho impostato un colore diverso, il testo sembra essere trasparente ... – gbrennon

0

non posso verificare questo al momento, ma se si guarda l'esempio collegato ogni volta che impostare il colore prima di chiamare drawCenteredString hanno sempre farlo con setFillColor, mai setFillColorRGB, utilizzando solo questi ultimi per impostare il colore di rettangoli . Quindi provare invece a cambiarlo con

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

Non so se si dice questo in quel documento o no, ma la variabile red è definita come una costante in uno dei moduli ReportLab, quindi se avete eventuali errori con questo, assicurati di includere il modulo appropriato (il nome esatto mi sfugge al momento).

+0

SetFillColor() non fa nulla per il testo, sia. – Goro

+0

Quindi suppongo che l'esempio non sia corretto. Osservando i documenti, nella Guida per l'utente, la sezione 2.11 fornisce esempi di impostazione del colore del testo in questo modo. Sei in grado di impostare il colore di cose diverse dal testo? In caso contrario, forse è un problema più generale senza emissione di colore. –

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

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

... 
Problemi correlati