Пример #1
0
def all():

    import os.path
    
    if False:
        pdf_template_id  = 3
        speaker = False
    elif request.args:
        pdf_template_id = int(request.args[0])
        speaker = 'speaker' in request.args
    else:
        pdf_template_id = 2
        speaker = True
        
    # generate sample invoice (according Argentina's regulations)

    q = db.auth_user.speaker==speaker
    #if not speaker:
    ##    q = db.auth_user.id < 400
    users = db(q).select(orderby=db.auth_user.id)
    
    # read elements from db 
    elements = db(db.pdf_element.pdf_template_id==pdf_template_id).select(orderby=db.pdf_element.priority)

    f = Template(format=(315, 440),
             elements = elements,
             title="Speaker Badges", author="web2conf",
             subject="", keywords="")
    
    # calculate pages:
    label_count = len(users)
    max_labels_per_page = 4*2*2
    pages = label_count / (max_labels_per_page - 1)
    if label_count % (max_labels_per_page - 1): pages = pages + 1

    # fill placeholders for each page
    for page in range(1, pages+1):
        f.add_page()
        k = 0
        li = 0
        for user in users:
            k = k + 1
            if k > page * (max_labels_per_page ):
                break
            if k > (page - 1) * (max_labels_per_page ):
                li += 1
                d = build_badge_dict(user)
                for key, val in d.items(): 
                    f["%s%02d" % (key, li)] = val

    response.headers['Content-Type']='application/pdf'
    fn =  "badges_%s_%s.pdf" % ('speakers' if speaker else 'public', pdf_template_id)
    response.headers["Content-Disposition"] \
            = "attachment; filename=%s" % fn

    s = f.render('badges.pdf', dest='S')
    
    if request.env['remote_addr'] == '127.0.0.1':
       fn = os.path.join(request.folder, 'static', fn)
       f = open(fn, "wb")
       f.write(s)
       f.close()
       print "saved", fn
    else:
       return s