是否可以使用ReportLab(python)在PDF中创建渐变填充?
ReportLab现在支持PDF渐变.
2012年8月6日,Peter Johnson在ReportLab邮件列表中发布了梯度支持补丁,并在第二天添加到源代码中.我无法在ReportLab 2.6的发行说明中发现任何内容,但自2012年10月1日发布以来,可能就是在那里.它绝对存在于2.7中.
可以指定具有多个停止的线性和径向渐变.在文档中搜索术语渐变并没有出现任何问题.但是,带有第一个版本补丁的消息有几个例子,它们是ReportLab源代码中某些测试的基础.基于此,我编写了一个快速演示脚本:
from reportlab.pdfgen.canvas import Canvas from reportlab.lib.colors import red, yellow, green from reportlab.lib.units import mm c = Canvas("gradient.pdf") # Linear gradient with the endpoints extending over the page. c.linearGradient(105*mm, 200*mm, 180*mm, 100*mm, (red, yellow)) c.drawString(5*mm, 290*mm, "c.linearGradient(105*mm, 200*mm, 180*mm, 100*mm, (red, yellow))") c.line(105*mm, 200*mm, 180*mm, 100*mm) c.showPage() # Linear gradient constrained within the endpoints. c.linearGradient(105*mm, 200*mm, 180*mm, 100*mm, (red, yellow), extend=False) c.drawString(5*mm, 290*mm, "c.linearGradient(105*mm, 200*mm, 180*mm, 100*mm, (red, yellow), extend=False)") c.line(105*mm, 200*mm, 180*mm, 100*mm) c.showPage() # Linear gradient with multiple stops. c.linearGradient(105*mm, 200*mm, 180*mm, 100*mm, (red, yellow, green), (0, 0.8, 1), extend=False) c.drawString(5*mm, 290*mm, "c.linearGradient(105*mm, 200*mm, 180*mm, 100*mm, (red, yellow, green), (0, 0.8, 1), extend=False)") c.line(105*mm, 200*mm, 180*mm, 100*mm) c.line(141*mm, 102*mm, 189*mm, 138*mm) c.showPage() # Radial gradient with the endpoint extending over the page. c.radialGradient(105*mm, 200*mm, 60*mm, (red, yellow)) c.drawString(5*mm, 290*mm, "c.radialGradient(105*mm, 200*mm, 60*mm, (red, yellow))") c.circle(105*mm, 200*mm, 60*mm) c.showPage() # Radial gradient constrained within the circle. c.radialGradient(105*mm, 200*mm, 60*mm, (red, yellow), extend=False) c.drawString(5*mm, 290*mm, "c.radialGradient(105*mm, 200*mm, 60*mm, (red, yellow), extend=False)") c.circle(105*mm, 200*mm, 60*mm) c.showPage() # Radial gradient with multiple stops. c.radialGradient(105*mm, 200*mm, 60*mm, (red, yellow, green), (0, 0.8, 1)) c.drawString(5*mm, 290*mm, "c.radialGradient(105*mm, 200*mm, 60*mm, (red, yellow, green), (0, 0.8, 1))") c.circle(105*mm, 200*mm, 48*mm) c.circle(105*mm, 200*mm, 60*mm) c.showPage() c.save()
这将输出六页,其中包含各种渐变加上渐变方法调用以及显示端点和停靠位置的线条/圆圈: