我想在自动生成的PDF中使用不同颜色的文本。
根据reportlab文档,我只需要:
self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)
但是那样并没有起到作用。无论如何,文本的颜色都是黑色。
我想在自动生成的PDF中使用不同颜色的文本。
根据reportlab文档,我只需要:
self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)
但是那样并没有起到作用。无论如何,文本的颜色都是黑色。
如果你复制并粘贴用户指南第二部分中的代码,你将获得一个彩色的矩形,并带有彩色文本。可能在用户指南中这种方法不是那么清晰,我花了一些时间去尝试它,最终我知道它是如何工作的。
你需要想象自己在画一个画布。你需要在开始画之前完成所有的设置。下面是我准备的一个示例,以更好地展示如何样式化文本、绘制线条和矩形,并具有对它们进行着色的功能。
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'))
...
目前我无法验证这一点,但如果您查看链接的示例,每当他们在调用drawCenteredString
之前设置颜色时,他们总是使用setFillColor
而不是setFillColorRGB
,只使用后者来设置矩形的颜色。因此,请尝试改为
self.canvas.setFillColor(red)
self.canvas.drawCenteredString(...)
red
在ReportLab模块中被定义为常量,所以如果你遇到任何错误,请确保包含适当的模块(目前我不记得具体名称)。虽然这个问题有点老了(!),但我相信我对于像我一样有同样问题的人有积极的贡献。
除了setFillColorRGB()函数外,您还可以使用setFillColor(),它将颜色名称作为参数(作为Python变量,而不是字符串)。
我想用红色写一个字符串。然后我做了:
setFillColor(red)
它起作用了。
reportlab.lib.colors模块有一个巨大的颜色名称列表可供使用。请参见532至681行。因此,在这种情况下,我在脚本开头放置了
from reportlab.lib.colors import red
希望这可以帮助到您。
此答案是从我的母语葡萄牙语机器翻译成英语的。
setFillColorRGB(0.29296875,0.453125,0.609375)
。这相当于75/256, 116/256, 156/256
。在我看来,这有点荒谬,但结果完美无缺。 - Garfonzomin(1,passed_color_value)
)。 - Ctrl-CregisterFont
需要在Windows 7 + Python 2.7中使用,才能使此答案起作用。 - Basj