2012-03-24 356 views

回答

16

如果您複製並粘貼用戶指南第2部分中的代碼,您將看到一個花哨的彩色矩形,其中包含彩色文本。可能這種方法在用戶指南中並不清楚,我花了一些時間玩它,我終於知道它是如何工作的。

你需要想象自己畫一幅畫布。您需要在繪製之前完成所有設置。下面是一個例子,我準備更好地展示如何設置文本樣式,繪製線條和繪製矩形,所有這些都可以在其上添加顏色。

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

從我可以告訴,使用256色彩空間將無法正常工作。該手冊指出,使用1是「所有燈全部亮起」。因此,創建256,256,256實際上是通過使用(1,1,1)來完成的。因此,爲了獲得中間的東西,你必須使用小數。對我而言,我想要RGB:(75,116,156),所以我必須寫:'setFillColorRGB(0.29296875,0.453125,0.609375)'。這是等同於:'75/256,116/256,156/256'。有點荒謬的國際海事組織,但它出來完美。 – Garfonzo 2013-02-05 19:36:32

+0

好信息:)沒有足夠深入這些顏色的東西,可能對我未來的工作有用。 – 2013-02-05 21:08:52

+0

這確實有用!但是,當我設置一些differente顏色的文字似乎是透明的... – gbrennon 2016-10-17 20:02:58

0

我目前無法驗證此問題,但是如果您在調用drawCenteredString之前設置顏色時查看鏈接示例,則始終使用setFillColor進行設置,而不是使用setFillColorRGB,只使用後者設置rects的顏色。因此,嘗試,而不是將其更改爲

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

我不知道這是否是說,這在文檔或沒有,但變量red在ReportLab的模塊之一定義爲一個常數,因此,如果您有任何錯誤與此同時,只要確保包含適當的模塊(目前確切的名稱讓我不知所措)。

+0

setFillColor()不文本做任何事情,無論是。 – Goro 2012-03-25 19:29:29

+0

然後我猜測這個例子是不正確的。查看文檔,在用戶指南部分2.11中給出了以這種方式設置文本顏色的示例。你能設置文字以外的其他顏色嗎?如果沒有,也許這是一個更普遍的問題,而不輸出顏色。 – 2012-03-27 15:07:17

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

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

...