2011-01-25 10 views
10

Sto generando alcuni file pdf usando reportlab. Ho una certa sezione che viene ripetuta. Esso contiene un'intestazione e un tavolo:come raggruppare oggetti in reportlab, in modo che rimangano insieme tra le nuove pagine

  Story.append(Paragraph(header_string, styleH)) 
      Story.append(table) 

Come posso gruppo il paragrafo con la tabella (in lattice vorrei metterle nello stesso ambiente) in modo che, in caso di un freno pagina, il paragrafo e la tabella stare insieme? Attualmente il paragrafo a volte galleggia alla fine di una pagina e la tabella inizia in cima alla pagina successiva.

risposta

5

questa è la soluzione che ho trovato passare attraverso il codice sorgente ReportLab:

paragraph = Paragraph(header_string, styleH) 
paragraph.keepWithNext = True 
Story.append(paragraph) 
Story.append(table) 
+0

Mi piace usare 'storia [-1] .keepWithNext = TRUE in quanto rende il codice più corto e più pulito e può essere facilmente aggiunto e rimosso senza dover cambiare il nome della variabile. È utile per tenere insieme gli elementi nei loop perché puoi impostare 'story [-1] .keepWithNext = True' nel ciclo e poi' story [-1] .keepWithNext = False' dopo il ciclo per disconnettere il materiale aggiunto nel loop da qualunque cosa venga aggiunta in seguito. – jenniwren

8

Si può cercare di metterli insieme in un KeepTogether fluido, in questo modo:

Story.append(KeepTogether([Paragraph(header_string, styleH), table]) 

Tuttavia essere consapevoli che, lo scorso ho controllato, l'attuazione non era perfetto e sarebbe ancora dividere gli oggetti troppo frequentemente. Lo so che fa un buon lavoro di mantenere un unico fluido insieme che altrimenti sarebbe divisa, come se si dovesse dire:

Story.append(KeepTogether(Paragraph(header_string, styleH)) 

allora che il punto non si sarebbe spaccata a meno che non era impossibile non essere.

Se KeepTogether non funziona per voi, io suggerirei di creare un custom Flowable con il paragrafo e tabella all'interno di esso e poi durante il layout assicurarsi che il proprio personalizzato Flowable sottoclasse non si lascia separarsi.

Problemi correlati