Как изменить цвет текста / шрифта в reportlab.pdfgen

Я хочу использовать другой цвет текста в моем автоматически сгенерированном PDF.

Согласно сдокументы отчета все, что мне нужно сделать, это:

self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)

Но это ничего не делает. Текст черный, несмотря ни на что.

Ответы на вопрос(3)

но если вы посмотрите в связанном примере, когда они устанавливают цвет перед вызовомdrawCenteredString они всегда делают это сsetFillColor, никогдаsetFillColorRGB, только используя последний, чтобы установить цвет rects. Поэтому попробуйте вместо этого изменить его на

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

Я не знаю, говорит ли это в этом документе или нет, но переменнаяred определяется как константа в одном из модулей ReportLab, поэтому, если у вас есть какие-либо ошибки с этим, просто обязательно включите соответствующий модуль (точное имя ускользает от меня в данный момент).

 G Gordon Worley III27 мар. 2012 г., 17:07
Тогда я бы предположил, что пример неверен. Глядя в документы, в разделе 2.11 Руководства пользователя приведены примеры настройки цвета текста таким способом. Вы можете установить цвет вещей, кроме текста? Если нет, возможно, это более общая проблема без вывода цвета.
 Goro25 мар. 2012 г., 21:29
setFillColor () тоже ничего не делает для текста.
Решение Вопроса

Вы получите причудливый цветной прямоугольник с цветным текстом внутри. Вероятно, подход не очень понятен в руководстве пользователя, я потратил некоторое время, играя с ним, и я, наконец, знаю, как он работает.

Вам нужно представить, как вы рисуете холст. Вам нужно сделать все настройки, прежде чем рисовать. Ниже приведен пример, который я подготовил, чтобы лучше показать, как оформить текст, нарисовать линию и нарисовать прямоугольник, и все с возможностью нанесения на них цвета.

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()
 Nicholas TJ05 февр. 2013 г., 22:08
Хорошая информация :) не буду подробно останавливаться на этих цветах, возможно, будет полезен для моей будущей работы.
 Ctrl-C11 мая 2017 г., 18:58
@gbrennon, просто все белое. Вы должны передать RGB как тройные числа с плавающей точкой в диапазоне [0, 1]. Они не выдадут никакой ошибки, когда вы передадите числа больше 1, они просто используют 1 (min(1, passed_color_value)).
 gbrennon17 окт. 2016 г., 22:02
Это действительно работа! Но когда я устанавливаю другой цвет, текст кажется прозрачным ...
 Garfonzo05 февр. 2013 г., 20:36
Из того, что я могу сказать, использование 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, Немного смешно ИМО, но получилось идеально.
from reportlab.lib.colors import HexColor
...

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

...

Ваш ответ на вопрос