Создание градиента заполняет файл PDF с помощью reportlab

Действительно ли возможно создать градиент, заполняют использование PDF ReportLab (Python)?

11
задан Dana 17 January 2009 в 04:40
поделиться

1 ответ

[Мой ответ уже не верен, градиенты теперь доступны в 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 более высокого уровня (такие как макет страницы).

3
ответ дан 3 December 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: