def __call__(self): if not HAS_REPORTLAB: return "reportlab not found" directory, _f = os.path.split(os.path.abspath(__file__)) badge_silver = os.path.join(directory, "badge_silver.pdf") badge_gold = os.path.join(directory, "badge_gold.pdf") badge_bronze = os.path.join(directory, "badge_bronze.pdf") badge_supporting = os.path.join(directory, "badge_blue.pdf") badge_normal = os.path.join(directory, "badge_blue.pdf") badge_staff = os.path.join(directory, "badge_blue.pdf") out = PdfFileWriter() badgebases = { "Silver Sponsor": open(badge_silver, "r"), "Gold Sponsor": open(badge_gold, "r"), "Bronze Sponsor": open(badge_bronze, "r"), "Supporting Sponsor": open(badge_supporting, "r"), "Staff": open(badge_staff, "r"), "Normal": open(badge_normal, "r"), } attendees = self.context.contentValues() for attendee in sorted(attendees, key=lambda x: x.lastname)[:5]: name = attendee.badge_name company = attendee.badge_line1 nextline = attendee.badge_line2 ircname = attendee.badge_nickname country = attendee.country foodpref = attendee.food if foodpref == "Other": foodpref = attendee.food_other tshirt = attendee.shirt text = StringIO() c = canvas.Canvas(text, pagesize=(8 * cm, 15 * cm)) c.setStrokeColorRGB(0, 0, 0) fontsize = 30 while c.stringWidth(name, "Helvetica-Bold", fontsize) > 7.5 * cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8 * cm / 2, 8.2 * cm, name) fontsize = 14 while c.stringWidth(company, "Helvetica-Bold", fontsize) > 7.5 * cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8 * cm / 2, 7.2 * cm, company) fontsize = 14 while c.stringWidth(nextline, "Helvetica-Bold", fontsize) > 7.5 * cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8 * cm / 2, 6.5 * cm, nextline) fontsize = 14 while c.stringWidth(ircname, "Helvetica-BoldOblique", fontsize) > 7.5 * cm: fontsize -= 6 c.setFont("Helvetica-BoldOblique", fontsize) c.drawCentredString(8 * cm / 2, 5.6 * cm, ircname) fontsize = 14 while c.stringWidth(country, "Helvetica-Bold", fontsize) > 7.5 * cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8 * cm / 2, 4.7 * cm, country) c.saveState() c.rotate(180) c.setFont("Helvetica", 10) c.drawCentredString(-8 * cm / 2, -0.8 * cm, "food: %s" % foodpref) c.drawCentredString(-8 * cm / 2, -1.3 * cm, "t-shirt: %s" % tshirt) c.restoreState() c.showPage() c.save() text.seek(0) text = PdfFileReader(text) textpage = text.getPage(0) badgetype = attendee.badge_type if not badgetype: badgetype = "Normal" badgebase = badgebases[badgetype] badgebase.seek(0) base = PdfFileReader(badgebase) basepage = base.getPage(0) basepage.mergePage(textpage) out.addPage(basepage) result = StringIO() out.write(result) cd = "attachment; filename=badges.pdf" self.request.response.setHeader("Content-Disposition", cd) self.request.response.setHeader("Content-Type", "application/pdf") return result.getvalue()
def __call__(self): if not HAS_REPORTLAB: return 'reportlab not found' directory, _f = os.path.split(os.path.abspath(__file__)) badge_silver = os.path.join(directory, 'badge_silver.pdf') badge_gold = os.path.join(directory, 'badge_gold.pdf') badge_bronze = os.path.join(directory, 'badge_bronze.pdf') badge_supporting = os.path.join(directory, 'badge_blue.pdf') badge_normal = os.path.join(directory, 'badge_blue.pdf') badge_staff = os.path.join(directory, 'badge_blue.pdf') out = PdfFileWriter() badgebases = { 'Silver Sponsor': open(badge_silver, 'r'), 'Gold Sponsor': open(badge_gold, 'r'), 'Bronze Sponsor': open(badge_bronze, 'r'), 'Supporting Sponsor': open(badge_supporting, 'r'), 'Staff': open(badge_staff, 'r'), 'Normal': open(badge_normal, 'r'), } attendees = self.context.contentValues() for attendee in sorted(attendees, key=lambda x: x.lastname)[:5]: name = attendee.badge_name company = attendee.badge_line1 nextline = attendee.badge_line2 ircname = attendee.badge_nickname country = attendee.country foodpref = attendee.food if foodpref == 'Other': foodpref = attendee.food_other tshirt = attendee.shirt text = StringIO() c = canvas.Canvas(text, pagesize=(8*cm, 15*cm)) c.setStrokeColorRGB(0,0,0) fontsize = 30 while c.stringWidth(name,"Helvetica-Bold", fontsize) > 7.5*cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8*cm/2, 8.2*cm, name) fontsize = 14 while c.stringWidth(company,"Helvetica-Bold", fontsize) > 7.5*cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8*cm/2, 7.2*cm, company) fontsize = 14 while c.stringWidth(nextline,"Helvetica-Bold", fontsize) > 7.5*cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8*cm/2, 6.5*cm, nextline) fontsize = 14 while c.stringWidth(ircname,"Helvetica-BoldOblique", fontsize) > 7.5*cm: fontsize -= 6 c.setFont("Helvetica-BoldOblique", fontsize) c.drawCentredString(8*cm/2, 5.6*cm, ircname) fontsize = 14 while c.stringWidth(country,"Helvetica-Bold", fontsize) > 7.5*cm: fontsize -= 6 c.setFont("Helvetica-Bold", fontsize) c.drawCentredString(8*cm/2, 4.7*cm, country) c.saveState() c.rotate(180) c.setFont("Helvetica", 10) c.drawCentredString(-8*cm/2, -0.8*cm, "food: %s" % foodpref) c.drawCentredString(-8*cm/2, -1.3*cm, "t-shirt: %s" % tshirt) c.restoreState() c.showPage() c.save() text.seek(0) text = PdfFileReader(text) textpage = text.getPage(0) badgetype = attendee.badge_type if not badgetype: badgetype = 'Normal' badgebase = badgebases[badgetype] badgebase.seek(0) base = PdfFileReader(badgebase) basepage = base.getPage(0) basepage.mergePage(textpage) out.addPage(basepage) result = StringIO() out.write(result) cd = 'attachment; filename=badges.pdf' self.request.response.setHeader("Content-Disposition", cd) self.request.response.setHeader("Content-Type", 'application/pdf') return result.getvalue()