如何控制ReportLab生成的可填写PDF打印时文本框的颜色?
ReportLab可填写PDF打印时文本框背景色问题
我用Python的ReportLab创建可填写PDF,遇到一个问题:生成的PDF里文本框有背景色,但打印时文本框背景会变成蓝色(我想要打印时背景为白色,输入时颜色无所谓,也可以直接把输入和打印时的背景都设为白色)。复选框也有同样的问题。
当前使用的文本框代码:
form.textfield(name=n,tooltip='',x=xpos, y=h-ypos,height=ht,width=w,fontSize=8,fontName='Helvetica',borderStyle='underlined')
VS Code提示form.textfield有fillColor、textColor、borderColor参数,但没说明取值类型,我试了多种方式都无效,参数定义如下:
fillColor: Any | None = None, borderColor: Any | None = None, textColor: Any | None = None,
解决方法
ReportLab的颜色参数需要使用其自带的颜色对象,不能直接传十六进制字符串或RGB数值,需先导入reportlab.lib.colors模块中的工具。
- 导入颜色模块
from reportlab.lib.colors import white, HexColor, Color
- 修改文本框代码,设置打印背景为白色
直接给fillColor传白色对象即可,这样文本框的背景(包括打印时)都会变成白色:
form.textfield( name=n, tooltip='', x=xpos, y=h-ypos, height=ht, width=w, fontSize=8, fontName='Helvetica', borderStyle='underlined', fillColor=white # 设置背景为白色 )
- 复选框的相同处理
复选框同样可以通过fillColor参数设置背景色:
form.checkbox( name="checkbox1", x=xpos, y=h-ypos, fillColor=white )
颜色取值的几种方式
- 内置颜色名称:直接使用
reportlab.lib.colors中定义的颜色,比如white、black、red等 - RGB值创建:用
Color(r, g, b),其中r/g/b是0-1之间的浮点数,比如白色是Color(1, 1, 1) - 十六进制颜色:用
HexColor("#FFFFFF"),传入标准十六进制颜色字符串
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

