Reportlab生成PDF文件

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()