diff --git a/assets/background.png b/assets/background.png new file mode 100644 index 0000000..2368386 Binary files /dev/null and b/assets/background.png differ diff --git a/badges/Reader.py b/badges/Reader.py new file mode 100644 index 0000000..b1c968a --- /dev/null +++ b/badges/Reader.py @@ -0,0 +1,97 @@ +# Copyright by JK 2018 +# License: MIT +# https://www.reportlab.com/docs/reportlab-userguide.pdf +# -*- coding: utf-8 -*- + +""" +This file and class contains helper methods to paint the resulting PDF +""" + +import sys +import os.path +import re +from PIL import Image +from reportlab.pdfgen import canvas +from reportlab.lib.units import inch, cm +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont + +def loadData(): + people = [] + with open("attendees.txt", 'r') as f: + for p in f: + m = re.match("(.*)\((.*)\)", p) + if m: + people.append((m.group(1), m.group(2))) + return people + + +class PDFDoc(): + def __init__(self, name, width, height): + self.dim = (width*cm, height*cm) + self.c = canvas.Canvas(name + '.pdf', pagesize=self.dim) + + def newpage(self): + self.c.showPage() + + def save(self): + self.c.showPage() + self.c.save() + + def subImage(self, x, y, width, height): + return SubImage(self, self.c, x, y, width, height) + + def findImg(self, fileimg): + fileimg = fileimg.replace(" ", "-").lower() + for typ in ["png", "jpg"]: + fname = fileimg + "." + typ + if os.path.isfile(fname): + return fname + return None + +class SubImage(): + def __init__(self, doc, c, x, y, width, height): + self.doc = doc + self.c = c + self.dim = (width*cm, height*cm) + self.off = (x*cm, y*cm) + + def addKeyVal(self, value, posx, posy, size=0.1, font= "Helvetica", color=(0,0,0)): + #relative font size + self.c.setFont(font, self.dim[1] * size) + self.c.setStrokeColorRGB(*color) + self.c.setFillColorRGB(*color) + value = value.strip().split("\n") + for l in value: + self.c.drawString(self.dim[0] * posx + self.off[0], self.dim[1] * posy + self.off[1], l) + posy -= size*1.1 + return posy + + def addKeyValCenter(self, value, posx, posy, size=0.1, font= "Helvetica", color=(0,0,0)): + #relative font size + self.c.setFont(font, self.dim[1] * size) + self.c.setStrokeColorRGB(*color) + self.c.setFillColorRGB(*color) + value = value.strip().split("\n") + for l in value: + self.c.drawCentredString(self.dim[0] * posx + self.off[0], self.dim[1] * posy + self.off[1], l) + posy -= size*1.1 + return posy + + def drawRect(self, posx, posy, width, height, color=(0,0,0)): + self.c.setFillColorRGB(*color) + self.c.rect(posx*self.dim[0]+ self.off[0], posy*self.dim[1]+ self.off[1], width*self.dim[0], height*self.dim[1], fill=1, stroke=0) + + def drawRectBorder(self, posx, posy, width, height, color=(0,0,0)): + self.c.setStrokeColorRGB(*color) + self.c.rect(posx*self.dim[0]+ self.off[0], posy*self.dim[1]+ self.off[1], width*self.dim[0], height*self.dim[1], fill=0, stroke=1) + + def addImg(self, fileimg, posx, posy, height): + fname = self.doc.findImg(fileimg) + if fname != None: + im = Image.open(fname) + (w, h) = im.size + scale = h / (self.dim[1] * height) + self.c.drawImage(fname, posx*self.dim[0] + self.off[0], posy*self.dim[1]+ self.off[1], w/scale, height*self.dim[1]) + return True + return False diff --git a/badges/create-badges.py b/badges/create-badges.py new file mode 100755 index 0000000..264feda --- /dev/null +++ b/badges/create-badges.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import sys +import traceback +from Reader import * + +# Copyright by JK 2018 +# License: MIT +# https://www.reportlab.com/docs/reportlab-userguide.pdf + +if len(sys.argv) > 1: + event = sys.argv[1] +else: + event = "Use ARG1 as event" + +data = loadData() + +doc = PDFDoc("badges-A4", 21, 29.7) +c = 0 + +for p in data: + try: + # check for image + if c % 8 == 0: + offset_x = 0.5 + elif c % 8 == 4: + offset_x = 9.5 + + if c % 4 == 0: + offset_y = 1 + else: + offset_y += 6 + + img = doc.subImage(offset_x, offset_y , 9, 6) + img.addImg("../assets/background", 0, 0, 0.5) + + img.addImg("../assets/reading-logo", 0.1, 0.8, 0.1) + img.addKeyVal("Computer Science", 0.37, 0.86, size=0.05, color=(0,0.2,0), font="Helvetica") + img.addImg("logo", 0.7, 0.8, 0.1) + + img.drawRectBorder(0, 0, 1, 1) + img.addKeyValCenter(p[0], 0.5, 0.6, font="Helvetica") + img.addKeyValCenter(p[1], 0.5, 0.47, size=0.07, font="Helvetica-Oblique") + + img.addKeyValCenter(event, 0.5, 0.2, size=0.07, font="Helvetica-Oblique") + + if c % 8 == 7: + doc.newpage() + c+=1 + except: + print("Unexpected error when processing %s" %(p)) + traceback.print_exc() + +doc.save() diff --git a/badges/logo.png b/badges/logo.png new file mode 100644 index 0000000..3a68c55 Binary files /dev/null and b/badges/logo.png differ