Prawn e margini vari

Salve forum/lista.

Da felice utilizzatore della gemma pdf-writer ho avuto la malsana idea
di cominciare a provare prawn, in quanto ci sono voci che quest’ultima
andrà a sostituire la prima.

Vi evito il racconto delle (dis)avventure e delle ore perse per capirne
la logica e il funzionamento ringraziando la documentazione a dir poco
scarsa e un approccio secondo me non molto intuitivo e andiamo al
dunque.

Sto cercando di creare la stampa di una fattura, ho bisogno di
un’intestazione, un pié di pagina e un corpo centrale variabile nel
quale ci sono una tabella con la lista degli oggetti della fattura e
altre due tabelline più piccole che contengono il calcolo dell’IVA e i
totali.

Con prawn le intestazioni e i pié di pagina non sono gestiti, per cui
bisogna crearseli a mano; ho quindi fatto delle bounding box ripetute in
ogni pagina, e fin qui ci sono.

Per il corpo centrale ho create un’altra bounding box contenente le tre
tabelline. Funziona tutto finché il contenuto resta su una pagina e
adeguatamente distante dal pié di pagina, o ci sono abbastanza oggetti
da dover passare su di un’altra; il problema si presenta quando la prima
tabella con gli oggetti è di poco inferiore alla dimensione della
bounding box, quindi non è necessaria una nuova pagina. In questo caso
infatti le due tabelline sotto la maggiore NON sono passate alla pagina
seguente (che naturalmente non viene generata), ma vanno simpaticamente
a sovrascrivere gli elementi del pié di pagina, uscendo quindi dalle
dimensioni massime della bounding box che le contiene.

Riassumendo: c’è un qualche sistema per rendere non oltrepassabili i
margini di una bounding box? O un altro sistema migliore per gestire i
“pié di pagina” (nel mio caso un’altra semplice bounding box) in modo
che non vengano sovrascritti?
Sto buttando all’aria internet, ma finora non ho trovato nulla di
utile…

Se avete sistemi migliori e/o esempi pratici, mandate pure :slight_smile:

Grazie in anticipo e a presto :slight_smile:

2010/8/11 Daneel O. [email protected]:

Riassumendo: c’è un qualche sistema per rendere non oltrepassabili i
margini di una bounding box? O un altro sistema migliore per gestire i
“pié di pagina” (nel mio caso un’altra semplice bounding box) in modo
che non vengano sovrascritti?

se on ricordo male c’è un metodo che ti restituisce la dimensione finale
di un b-box… usando quello puoi verificare se la parte di tabella che
stai
per inserire in pagina è tutta contenuta o devi spaccarla in più parti.

Sto buttando all’aria internet, ma finora non ho trovato nulla di
utile…

Se avete sistemi migliori e/o esempi pratici, mandate pure :slight_smile:

io sto facendo esattamente la stessa cosa, magari possiamo
risparmiare un po di fatica se facciamo in due :wink:

io ho trovato molto utili gli esempi di codice

http://github.com/sandal/prawn/tree/master/examples/

e gli doc

http://rdoc.info/projects/sandal/prawn

in particolare guarda i metodi (overruns_page?, absolute_* e stretchy?)

michele

Michele F. wrote:

se on ricordo male c’� un metodo che ti restituisce la dimensione finale
di un b-box… usando quello puoi verificare se la parte di tabella che
stai
per inserire in pagina � tutta contenuta o devi spaccarla in pi� parti.

Proprio quello che volevo evitare… ‘’'-_-

io sto facendo esattamente la stessa cosa, magari possiamo
risparmiare un po di fatica se facciamo in due :wink:

Io ci sto, ma ti avverto che scrivo codice in maniera tremenda ':slight_smile:
(sarà la volta buona che imparo qualcosa di più?)

io ho trovato molto utili gli esempi di codice

http://github.com/sandal/prawn/tree/master/examples/

e gli doc

http://rdoc.info/projects/sandal/prawn

Sì, li sto consultando, ma rimpiango ancora il manuale in pdf di
pdf/writer: uno dei più completi e chiari mai trovati…

in particolare guarda i metodi (overruns_page?, absolute_* e stretchy?)

Grazie del suggerimento, guardo subito :slight_smile:

Daneel O.

Ti suggerisco di iscriverti alla mailing list di prawn, è molto attiva

Alessandro S. wrote:

Ti suggerisco di iscriverti alla mailing list di prawn, è molto attiva

Sapessi scrivere decentemente in inglese quello che intendo… :slight_smile:

Daneel O. wrote:

Michele F. wrote:

se on ricordo male c’� un metodo che ti restituisce la dimensione finale
di un b-box… usando quello puoi verificare se la parte di tabella che
stai
per inserire in pagina � tutta contenuta o devi spaccarla in pi� parti.

Proprio quello che volevo evitare… ‘’’-_-

Soluzione forse non molto elegante, ma funziona:

dopo la generazione della tabella ho messo:

if cursor < 60
start_new_page
end

Il “60” è un numero che ho ricavato in maniera abbastanza aleatoria
facendo prove con tabelle di diversa lunghezza.
Per fare le cose in maniera più carina, sarebbe da aggiungere
l’eventuale ridimensionamento della lunghezza della bounding box per
fare in modo che nella nuova pagina non ci vadano solo le tabelline
sotto quella con gli articoli della fattura, ma anche almeno l’ultimo di
questi, tanto per dare un senso di continuità , ma finora non ci sono
riuscito.

2010/8/12 Daneel O. [email protected]:

Soluzione forse non molto elegante, ma funziona:
l’eventuale ridimensionamento della lunghezza della bounding box per
fare in modo che nella nuova pagina non ci vadano solo le tabelline
sotto quella con gli articoli della fattura, ma anche almeno l’ultimo di
questi, tanto per dare un senso di continuità , ma finora non ci sono
riuscito.

aggiungi un b-box con altezza 60-cursor come ultimo elemento
e gli altri articoli saranno nella uova pagina.
guarda l’oggetto table, ha un’opzione per ristampare gli header nella
nuova pagina

michele

Michele F. wrote:

2010/8/12 Daneel O. [email protected]:

Soluzione forse non molto elegante, ma funziona:
l’eventuale ridimensionamento della lunghezza della bounding box per
fare in modo che nella nuova pagina non ci vadano solo le tabelline
sotto quella con gli articoli della fattura, ma anche almeno l’ultimo di
questi, tanto per dare un senso di continuità , ma finora non ci sono
riuscito.

aggiungi un b-box con altezza 60-cursor come ultimo elemento
e gli altri articoli saranno nella uova pagina.

Non ho capito molto bene, comunque sto provando, ma il risultato non
cambia :slight_smile:

Da quello che ho visto, basta che la lunghezza della tabella superi
quella della b-box e viene creata un’altra pagina, quindi pensavo che se
riuscivo a rimpicciolire al volo di un po’ la b-box avevo tutto in
automatico.

guarda l’oggetto table, ha un’opzione per ristampare gli header nella
nuova pagina

Lo fa già di default :slight_smile:

2010/8/12 Daneel O. [email protected]:

e gli altri articoli saranno nella uova pagina.
intendevo dire: verifica la dimensione delle righe fattura che vuoi
aggiungere
ed appena una ha altezza superiore allo spazio rimanente (60-cursor) al
suo
posto aggiungi un b-box alto esattamente quanto lo spazio rimanente.

Non ho capito molto bene, comunque sto provando, ma il risultato non
cambia :slight_smile:

funziona, ne ho le prove :wink:

[…]

guarda l’oggetto table, ha un’opzione per ristampare gli header nella
nuova pagina

Lo fa già di default :slight_smile:

meglio ancora!

michele

2010/8/16 Antonio T. [email protected]:

Scusate lo spam,
seguo silenziosamente da un po’ la lista, dopo anni passati a scrivere Java & C# sono felicemente passato a ruby (per chi non mi conosce, http://www.the-arm.com)

Lavoro attualmente per http://www.forward.co.uk/ e mi sto divertendo parecchio, ma al momento stiamo faticando a trovare gente brava su ruby con discreta esperienza.

Non sono in cerca di un lavoro, ma approfitto per complimentarmi,
“invisible hand” è geniale soprattutto per il nome :slight_smile:

Scusate lo spam,
seguo silenziosamente da un po’ la lista, dopo anni passati a scrivere
Java & C# sono felicemente passato a ruby (per chi non mi conosce,
http://www.the-arm.com)

Lavoro attualmente per http://www.forward.co.uk/ e mi sto divertendo
parecchio, ma al momento stiamo faticando a trovare gente brava su ruby
con discreta esperienza.

Usiamo mongoDB, node.js, sinatra, hadoop, hive…

L’ambiente e’ decisamente agile, molti sviluppatori arrivano da
ThoughtWorks UK.

Se siete interessati mandatemi un’email.

Grazie

2010/8/16 Antonio T. [email protected]

L’ambiente e’ decisamente agile, molti sviluppatori arrivano da
ThoughtWorks UK.

Quoto quanto dice Gabriele e bisso i complimenti, soprattutto
per i nomi delle tecnologie usate.


Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it