def print_id_label(participant): competition = participant.competition license_holder = participant.license_holder bib = participant.bib name = license_holder.first_last if len(name) > 32: name = license_holder.first_last_short system_name = 'CrossMgr' inches_to_points = 72.0 # Use points at the units. page_width = 3.9 * inches_to_points page_height = 2.4 * inches_to_points pdf = PDF('L', (page_height, page_width)) pdf.set_author(RaceDBVersion) pdf.set_title('Bib Number: {}'.format(bib)) pdf.set_subject('Rider ID and Emergency Information.') pdf.set_creator(getpass.getuser()) pdf.set_keywords( 'RaceDB CrossMgr Bicycle Racing Software Database Road Time Trial MTB CycloCross' ) margin = min(page_height, page_width) / 18.0 sep = margin / 2.5 height = page_height - margin * 2.0 width = page_width - margin * 2.0 header = Rect(margin, margin, width, height / 10.0) footer_height = height / 20 footer = Rect(margin, page_height - margin - footer_height, header.width, footer_height) field = Rect(header.x, header.bottom + sep, width, footer.top - header.bottom - sep * 2) leftArrow, rightArrow = chr(172), chr(174) font_name = 'Helvetica' pdf.add_page() pdf.set_font(font_name, 'b') header.draw_text_to_fit(pdf, name, Rect.AlignLeft, True) pdf.set_font(font_name) info = [] info.append([ '', u', '.join([ u'Age: {}'.format(license_holder.get_age()), u'Gender: {}'.format(license_holder.get_gender_display()), u'Nation: {}'.format(license_holder.nation_code), ]), ]) info.append(['', '']) if participant.team: info.append(['', u'{}'.format(participant.team.name)]) info.append([ '', u', '.join([ u'Bib: {}'.format(participant.bib), u'Category: {}'.format(participant.category.code_gender if participant.category else ''), ]), ]) if license_holder.phone: info.append([ '', u' '.join([ u'Phone: {}'.format(format_phone(license_holder.phone)), ]), ]) info.append(['', '']) if license_holder.emergency_medical: info.append([ '', u'Medical Alert: {}'.format(license_holder.emergency_medical) ]) info.append(['', u'Emergency Contact:']) if license_holder.emergency_contact_name: info.append([ '', u' {}'.format(license_holder.emergency_contact_name or 'None provided') ]) info.append([ '', u' {}'.format( format_phone(license_holder.emergency_contact_phone) or 'No phone number provided') ]) pdf.table_in_rectangle(field.x, field.y, field.width, field.height, info, leftJustifyCols=[0, 1], hasHeader=False, horizontalLines=False) footer.draw_text_to_fit(pdf, system_name, Rect.AlignRight, True) pdf_str = pdf.output(dest='s') return pdf_str