Действительно ли возможно создать градиент, заполняют использование PDF ReportLab (Python)?
[Мой ответ уже не верен, градиенты теперь доступны в Reportlab, подробнее см. другой ответ на этой странице.]
Извините, что повторно задаю этот вопрос, но я наткнулся на него, и на него не было правильного ответа.
Ответ - нет, на сегодняшний день текущая версия ReportLab не поддерживает градиенты. Однако градиенты поддерживаются PDF. Если вы заглянете в класс Canvas программы ReportLab, то увидите, что многие из его методов являются относительно небольшими обертками вокруг основного кода генерации PDF. Чтобы получить доступ к градиентам в RL, необходимо расширить класс Canvas и добавить дополнительные методы для генерации правильного PDF-кода. Это выполнимо, но, очевидно, не тривиально, и это означает, что вам придется ознакомиться со спецификацией PDF.
Есть две альтернативы. Во-первых, генерировать градиент в виде растрового изображения и использовать его, во-вторых, генерировать градиент, рисуя целую серию прямоугольников разных цветов.
start_color = (1,0,0)
end_color = (0,1,0)
for i in range(100):
p = i * 0.01
canvas.setFillColorRGB(*[start_color[i]*(1.0-p)+end_color[i]*p for i in range(3)])
canvas.rect(i, 0, 2, 100)
Например. К сожалению, для получения плавного градиента требуется большое количество прямоугольников, что может привести к тому, что PDF-файл будет большим и медленно отображаться. Лучше использовать растровый подход.
Наконец, вы можете рассмотреть возможность использования PyCairo. Он лучше поддерживает множество графических элементов и может рендерить в PDF или PNG. Однако в нем отсутствуют конструкции reportlabs более высокого уровня (такие как макет страницы).