Scrisorica din camp

La cercetași (la noi la Alba Iulia cel puțin), din cauza caracterului ritmic al activităților și al faptului că există o strânsă legătura și o predare de ștafetă între generații, avem tendința să creăm și să menținem fel de fel de mici tradiții – activități sau acțiuni punctuale care au succes și sunt reluate în fiecare an.

Pornită în Șuridava (Campul Centrului Local din Șureanu, 2008), una din acțiunile astea care au devenit tradiție este „scrisorica din camp”. În ultima zi din camp, toți participanții sunt invitați să își adreseze o scrisoare lor înșiși, în care să își scrie despre experiențele trăite în camp. Scrisorica se întoarce la ei după un timp, pentru a-și aduce aminte de timpul petrecut în camp, dar și pentru a-i ajuta să își dea seama cum s-au schimbat (în bine :P) din momentul campului până în momentul în care o deschid.

De-a lungul timpului, acțiunea asta s-a modificat și s-a perfecționat – astfel, după Șuridava (sau după următorul camp, nu mai știu precis), la cererea publicului, scrisorile nu au mai fost „deschise”, ci sigilate fiecare în plicul ei, destinate strict pentru ochii celor care le-au scris.

Alături de scrisorică, de câțiva ani  trimitem și poza de grup din camp și badge-ul campului, iar de anul asta am adăugat și o scrisoare de mulțumire pentru părinți (care sunt principalii noștri susținători) și un formular 2%.

Badge-urile pentru Campul Centrului Local de anul trecut au fost făcute, ca de obicei, prin ScoutShop.

Badge Olimpiada în Bocanci 2012 (logo by Georgi Hlihor)
Badge Olimpiada în Bocanci 2012 (logo by Georgi Hlihor)
Poza de grup de la Olimpiada în Bocanci
Poza oficială de grup de la Olimpiada în Bocanci 2012 (din păcate nu mai știu cine este autorul)

Săptămânile trecute am reușit să termin prima serie de plicuri și scrisorele – și au început să ajungă pe la cercetași – cam 120 de scrisorele în total.

În curs de împachetare - poze, badge-uri și scrisorele
În curs de împachetare – poze, badge-uri și scrisorele
Produsul aproape final, mai trebuie doar timbrele
Produsul aproape final, mai trebuie doar timbrele

Script generare plicuri

Pentru că prefer să lucrez mai mult să automatizez o treabă repetitivă decât să o fac muncitorește, am scris un mic script python care parcurge un fișier .csv și produce un .pdf în care fiecare pagină este un plic C5 (dimensiune standard de plic pentru foi A5 sau foi A4 îndoite pe jumătate). Scriptul poate fi cu ușurință modificat pentru alte tipuri de plicuri / alte formate de date, așa că în speranța că poate ajuta pe cineva, îl copiez mai jos :)

def break_line(line):
    """
    Parses line and splits it into usable parts 
    """
    elms = line.strip(" \n\r").split(";")
    destinatar = elms[1].strip(" \"")
    nume = u"%s" % elms[2].strip(" \"")
    adresa = elms[3].strip(" \"")
    cod_postal = elms[6].strip(" \"")
    localitate = elms[4].strip(" \"")
    judet = elms[5].strip(" \"")
    if judet != u"București":
        judet = u"județ %s" % judet
    error = elms[7].strip(" \"") == "!"

    return destinatar, nume, adresa, cod_postal, localitate, judet, error  

#    Define envelope size
C5_envelope = (22.9 * cm, 16.2 * cm)

#    Font registration and settings
reportlab.rl_config.warnOnMissingFontGlyphs = 0
pdfmetrics.registerFont(TTFont('DejaVu', '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf'))
pdfmetrics.registerFont(TTFont('DejaVuBold', '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Bold.ttf'))
pdfmetrics.registerFont(TTFont('DejaVuItalic', '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Italic.ttf'))
pdfmetrics.registerFont(TTFont('DejaVuBoldItalic', '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-BoldItalic.ttf'))
registerFontFamily('DejaVu',normal='DejaVu',bold='DejaVuBold',italic='DejaVuItalic',boldItalic='DejaVuBoldItalic')

#    The Story is commonly used in flowing reportlab documents to contain all flowables
Story = []
buff = StringIO()

document_settings = {"rightMargin" : 1 * cm, 
                     "leftMargin" : 12 * cm, 
                     "topMargin" : 9 * cm,
                     "bottomMargin" : 1.5 * cm, 
                     "pagesize" : C5_envelope}

doc = SimpleDocTemplate(buff, **document_settings)

styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='Justify', fontName = "DejaVu", alignment=TA_JUSTIFY, leading = 0.65 * cm))
styles["Normal"].fontName = "DejaVu"
styles["Normal"].leading = 0.5 * cm

error_count = 0

with open(INPUT_FILE_PATH, "rt") as fisier:
    adrese = fisier.readlines()

for line in adrese:
    destinatar, nume, adresa, cod_postal, localitate, judet, error = break_line(line)

    if error:
        error_count += 1
        continue

    Story.append(Paragraph(u"Destinatar:", styles['Justify']))
    Story.append(Paragraph(u"%s %s" % (destinatar, nume.upper()), styles['Justify']))
    Story.append(Paragraph(u"%s" % adresa, styles['Justify']))

    if localitate:
        linie_localitate = u"{0}".format(localitate)
        if cod_postal:
            linie_localitate = u"{0}, ".format(cod_postal) + linie_localitate
        Story.append(Paragraph(linie_localitate, styles['Justify']))
        Story.append(Paragraph(u"%s" % judet, styles['Justify']))
    Story.append(PageBreak())
doc.build(Story)

f = open(PDF_OUTPUT_PATH, "wb")
f.write(buff.getvalue())
buff.close()
f.close()

print "Done, %d errors" % error_count

Disponibilă ca github gist.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.