我想在自動生成的PDF中使用不同顏色的文本。如何更改reportlab.pdfgen中的文本/字體顏色
根據the reportlab docs所有我需要做的是:
self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)
但是,這並不做任何事情。無論如何,文本都是黑色的。
我想在自動生成的PDF中使用不同顏色的文本。如何更改reportlab.pdfgen中的文本/字體顏色
根據the reportlab docs所有我需要做的是:
self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)
但是,這並不做任何事情。無論如何,文本都是黑色的。
如果您複製並粘貼用戶指南第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()
我目前無法驗證此問題,但是如果您在調用drawCenteredString
之前設置顏色時查看鏈接示例,則始終使用setFillColor
進行設置,而不是使用setFillColorRGB
,只使用後者設置rects的顏色。因此,嘗試,而不是將其更改爲
self.canvas.setFillColor(red)
self.canvas.drawCenteredString(...)
我不知道這是否是說,這在文檔或沒有,但變量red
在ReportLab的模塊之一定義爲一個常數,因此,如果您有任何錯誤與此同時,只要確保包含適當的模塊(目前確切的名稱讓我不知所措)。
setFillColor()不文本做任何事情,無論是。 – Goro 2012-03-25 19:29:29
然後我猜測這個例子是不正確的。查看文檔,在用戶指南部分2.11中給出了以這種方式設置文本顏色的示例。你能設置文字以外的其他顏色嗎?如果沒有,也許這是一個更普遍的問題,而不輸出顏色。 – 2012-03-27 15:07:17
from reportlab.lib.colors import HexColor
...
# sets fill color like orange
c.setFillColor(HexColor(0xff8100))
# or
c.setFillColor(HexColor('#ff8100'))
...
從我可以告訴,使用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
好信息:)沒有足夠深入這些顏色的東西,可能對我未來的工作有用。 – 2013-02-05 21:08:52
這確實有用!但是,當我設置一些differente顏色的文字似乎是透明的... – gbrennon 2016-10-17 20:02:58