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