Alessio Forti

Creare cartelle della tombola con InDesign e… Python

Oggi mi sono trovato nella necessità di dover creare e stampare 2000 cartelle della tombola provviste di matrice. Dopo aver passato circa un ora su internet tra chi propone generatori online (gratuiti e a pagamento), fogli di Excel pieni di macro orribili piene zeppe di virus e dato che avevo bisogno di un layout completamente personalizzabile, mi sono rimboccato le maniche ed ho preso la decisione di trovare un modo per crearmele da solo.
Attenzione: ho detto 2000 cartelle (e teoricamente ognuna deve essere diversa dall’altra), con matrice (e quindi sono esattamente 4000 tabelle). Non starete pensando che abbia inserito manualmente 15 numeri a caso tra 1 e 90 in 4000×15=60.000 celle diverse di InDesign?
Siamo pazzi? Ho usato InDesign e Python.

Il procedimento è piuttosto semplice da capire: dovremo riuscire a creare un documento di 2000 pagine in cui ogni pagina ha un numero seriale, la sua cartella con i numeri e la tabella con la matrice del biglietto. Per ottenere questo useremo la funzione di InDesign “Unione Dati” che ci permette, partendo da un file sorgente, di inserire in dei campi prestabiliti dei dati variabili, nel nostro caso i numeri delle tabelle; la stessa cosa di “Stampa Unione” in Word. Il problema sta nel fatto che il file sorgente che conterrà le nostre cartelle, per poter essere utilizzato da InDesign, deve essere nel formato .csv (Comma Separated Values). È possibile creare questo tipo di file in diversi modi, compresa l’esportazione da Excel o Numbers. Io ho usato Python…

Lo script per generare le cartelle

Questo è il semplice script che ho creato per generare il file cartelle.csv che contiene le cartelle:

import math, random

def generaNum():
	return int(math.ceil(random.random()*90))

def creaCartella():
	a = []
	while len(a)<15:
		n = generaNum()
		if n in a:
			pass
		else:
			a.append(n)
	a.sort()

	b = ""
	for i in range(0, len(a)):
		if i == 14:
			b += str(a[i]) + "\n"
		else:
			b += str(a[i]) + ", "
	return b

f = open("cartelle.csv", "w+")

#creo le colonne
f.writelines("seriale, a, b, c, d, e, f, g, h, i, l, m, n, o, p, q\n")

for i in range(1,2001):
	f.writelines(str(i) + ", " + creaCartella())

f.close

Se non avete idea di come eseguire questo script e non sapete cosa sia il Terminale, potete scaricarvi ed installare SublimeText che ha al suo interno un interprete Python. Non dovete fare altro che scaricare lo script, aprirlo con SublimeText, e cliccare su Tools > Build. Questo comando eseguirà lo script e creerà il file .csv.

Potete scaricare la cartella del progetto da qui.

Se avete bisogno di un diverso numero di cartelle vi basterà cambiare il valore di numero_di_cartelle alla terza riga.
Se aprite il file con un editor di testo si può verificare che la prima riga del file definisce una sorta di colonne, infatti il primo valore di ogni riga (identificato dalla colonna “seriale”) rappresenta il numero progressivo della cartella, mentre i restanti valori della riga rappresentano i numeri della cartella vera e propria.

Importare le cartelle in InDesign

Ora che abbiamo generato le nostre cartelle, non ci resta che creare la grafica e far fare ad InDesign il lavoro sporco.
Ho creato un nuovo documento da 210mm per 49,5mm in orizzontale, il che ci consentirà poi di impaginarne 6 su un foglio A4 o 12 in un foglio A3. Data la flessibilità di questa soluzione potete variare le dimensioni a piacimento.

cartella tombola in InDesign
pannello unione dati
cartella completa

Impostiamo la grafica in questo modo:

Alla sinistra della linea tratteggiata avremo la nostra matrice, mentre a destra la cartella da strappare. Da notare come la matrice abbia un margine di 30mm per consentirne la spillatura. Per quanto riguarda la cartella, i numeri saranno contenuti all’interno di una tabella 5x3 in cui ora andremo ad inserire i nostri dati variabili.
In InDesign, andiamo sul menù Finestra > Utilities > Unione Dati. Questo aprirà il pannello Unione Dati in cui dovremo cliccare sull’icona delle opzioni in alto a destra e selezionare Seleziona Sorgente Dati: così si aprirà una finestra di dialogo dalla quale potremo selezionare ed importare il file cartelle.csv che abbiamo generato prima. Questo è il risultato:

Ora selezioniamo la casella di testo che conterrà il numero progressivo e, dopo aver posizionato il cursore a fine riga, clicchiamo sulla riga seriale che viene mostrata sul pannello Unione Dati. Così facendo verrà inserito il segnaposto che in fase di generazione del documento verrà sostituito con il valore contenuto nel file cartelle.csv sotto la colonna “seriale”. Bisognerà ripetere questo procedimento per ogni testo variabile contenuto nel nostro impaginato, quindi anche per ogni cella della tabella. Una volta inseriti tutti i campi nelle celle della tabella, possiamo duplicarla e spostarla a sinistra nella matrice (magari la ridimensioniamo un pochino). Alla fine il risultato deve essere qualcosa di simile a questo:

In questo momento non preoccupatevi di eventuali testi che strabordano dalle celle o formattati male, perché a questo punto i testi segnaposto occupano al minimo 5 caratteri, mentre una volta generato l’output conterranno al massimo i 2 caratteri dei numeri. Si può controllare come sarà il documento finale selezionando Anteprima in basso a sinistra nel pannello Unione Dati.

Creare il documento

pannello unione dati output
generazione output

A questo punto non ci resta che generare il documento finale e per farlo torniamo al pannello Unione Dati e clicchiamo sull’iconcina in basso a destra:

che aprirà la seguente finestra:

Nonostante tutte le opzioni che vengono offerte, quella a cui dobbiamo prestare attenzione è Records per Documento che deve essere impostata su Record Singolo.
L’ultima cosa da fare è cliccare su Ok ed aspettare qualche minuto finché InDesign non finisce di l’elaborazione (in realtà ci può volere anche più di qualche minuto dato che nel nostro caso deve essere generato un documento di 2000 pagine).

Dato che abbiamo un documento fresco fresco possiamo farci quello che ci pare: applicare elementi con le mastro, esportarlo in PDF o quello che preferite.
Dato che avevo la necessità di stamparlo, ho generato il PDF e l’ho reimportato in un documento A3 con l’aiuto dello script MultiPageImporter

Bene, buona Tombola e se avete suggerimenti o domande i commenti sono ben accetti.