Reportlab的互动式form官方技术说明(interactive form)语焉不详,只简单的列了参数。网上能找到的资料也有限,这篇博客:http://www.blog.pythonlibrary.org/2018/05/29/creating-interactive-pdf-forms-in-reportlab-with-python/满满的干货,很有启发,我们在其基础上做些修改和本地化,尝试着把交互式form的用法理清楚。
这个帖子我们来看下拉选项choice,主函数部分跟多选项checkbox和单选项radio的帖子基本相同,都是设置字体和调用画互动form的函数,只不过这次画的是下拉选项choice,将调用的画互动form的函数改为create_simple_choices()。接下来看create_simple_choices()的具体实现,先来看效果,图二显示了下拉菜单:
下拉选项里的字体无法控制,虽然有fontname=的参数。设置自己注册的字体程序会出错,错误提示声称只接受它自带的14种字体。
def create_simple_choices(c):
c.setFont("zoomla", 20)
c.drawCentredString(200, 700, '荣国府')
c.setFont("zoomla", 14)
form = c.acroForm
options = ['元迎探惜', '林黛玉', '贾链', '贾珠', '贾宝玉', '贾环']
c.drawString(100, 650, '玉字辈:')
# 虽然有fontname=参数,可只支持14种自带字体
form.choice(name='choice1', tooltip='Field choice1',
value='元迎探惜', # 默认值必须给
x=165, y=645, width=150, height=30,
# x,y是选项的左下角坐标;width,height指定宽高
textColor=blue, options=options)
# 把下拉选项放进一个列表赋给option=参数
options = ['贾赦', '贾政', '贾敏']
c.drawString(100, 500, '文字辈:')
form.choice(name='choice2', tooltip='Field choice2',
value='贾政', options=options,
x=165, y=490, width=150, height=30)
if __name__ == '__main__':
c = canvas.Canvas('speCap.pdf')
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
pdfmetrics.registerFont(TTFont('zoomla', '/Library/Fonts/Chinese/MoMoXiuLiTi-2.ttf'))
create_simple_choices(c)
c.showPage()
c.save()