玩转大数据计算机大数据

Reportlab交互式Form之简单表格form和列表框lis

2019-08-13  本文已影响1人  f9fa28843d13

Reportlab的互动式form官方技术说明(interactive form)语焉不详,只简单的列了参数。网上能找到的资料也有限,这篇博客:http://www.blog.pythonlibrary.org/2018/05/29/creating-interactive-pdf-forms-in-reportlab-with-python/满满的干货,很有启发,我们在其基础上做些修改和本地化,尝试着把交互式form的用法理清楚。

这个帖子我们来看简单表格form和列表框listbox,主函数部分跟前面帖子互动form的主函数基本相同:都是设置字体和调用画互动form的函数,只不过画的是简单表格和列表项。调用的就是create_simple_form()和

create_simple_listboxes()。

先来看效果:

图一 简单表格form

图一是create_simple_form()画的表格,表格项边缘各不相同是为了演示参数borderStyle=的效果(姓名框inset、住址框dashed、电子邮件框solid、微信号框默认、手机框bevelled、原籍框underlined)。

图二 填了内容的表格

图二是填了内容的表格。跟下拉选项一样,表格内容的中文字体无法控制,尽管有fontName=参数,却只接受自带的14种字体。

图三 鼠标悬停表格选项的提示

图四 列表框

图四是列表框,列表框更糟糕,列表内选项直接无法显示中文,只支持英文。

代码如下:

def create_simple_form(c): c.setFont("zoomla", 24) c.drawCentredString(300, 700, '个人信息form') c.setFont("zoomla", 18) form = c.acroForm c.drawString(20, 650, '姓名:')    # 虽然有fontName=的参数,却不能设置自己注册的字体,否则会出现错误:    # ValueError: form font name, 'zoomla', is not one of the standard 14 fonts    # 提示自己注册的字体zoomla不是自带的14种字体 form.textfield(name='name', tooltip='你叫啥?',                   # tooltip=设置鼠标悬停姓名框的显示,见图三            x=110, y=635, borderStyle='inset',                   # borderStyle='inset'效果见图一姓名框的边界                   width=300,textColor=blue)                   # textColor=填写进表格文字的颜色 c.drawString(20, 600, '住址') form.textfield(name='address', tooltip='住哪里?',            x=110, y=585, borderStyle='dashed',                   # borderStyle='dashed'效果见图一地址框的边界            width=300, textColor=blue)            c.drawString(20, 550, '电子邮件:') form.textfield(name='email', tooltip='伊妹儿', x=110, y=535, borderStyle='solid', width=400)            # borderStyle='solid'效果见图一电子邮件框的边界            c.drawString(20, 500, '手机:') form.textfield(name='contact', tooltip='紧急情况联络用',                   x=110, y=485, borderStyle='bevelled')            # borderStyle='bevelled'效果见图一手机框的边界 c.drawString(280, 500, '微信号:') form.textfield(name='wechat', tooltip='我们的群是123',            x=350, y=485, borderStyle='inset') c.drawString(20, 450, '原籍:') form.textfield(name='hometown', tooltip='你来自哪里?', x=110, y=435, borderStyle='underlined') # borderStyle='bevelled'效果见图一手机框的边界def create_simple_listboxes(c): c.setFont("zoomla", 30) c.drawCentredString(300, 700, '千红一窟') c.setFont("zoomla", 18) form = c.acroForm c.drawString(10, 650, '万艳同杯哪一艳::')   options = ['cat','dog','python','squirrel','giraffe','pig','horse','cow']    # 选项不支持中文,本来options我想设成:    # ['香菱','晴雯','鸳鸯','紫娟','平儿','袭人','麝月','芳官']    # 然而中文会显示乱码,所以只好放弃,改成英文才可正常显示    # 尝试设置fontName=亦失败,错误提示也是只支持自带的14种字体 form.listbox(name='listbox1', value='python', # 默认值一定要设          x=165, y=590, width=200, height=72, textColor=blue, forceBorder=True, options=options, fieldFlags='multiSelect')          # fieldFlags=指明可以多选                 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_form(c) # create_simple_listboxes(c) c.showPage()   c.save()          

上一篇下一篇

猜你喜欢

热点阅读