.. _le_stampe/stampe_genropy/stampe_risorsa/tipi_stampa/stampa_record_custom: Stampe custom ============= Le stampe che andiamo a definire come classi figlie di ``TableScriptToHtml`` in quanto tali hanno molti automatismi che facilitano la creazione un modello di :ref:`stampa testata/righe o di sole righe` , non da ultimo il sistema di calcolo dell'altezza del documento offerto dal *mainLoop*. Tuttavia è possibile trovarci nella necessità di definire una stampa totalmente personalizzata, che quindi non utilizzi questi meccanismi e ci lasci la possibilità di impaginare i dati del record primario e qualunque altro dato secondo un layout creato da zero. Ridefinire il metodo *main* --------------------------- In questo caso ridefinendo il metodo ``main`` ho il completo controllo della stampa partendo da zero. Questo significa che devo però anche **creare** io **l'elemento pagina iniziale** con il metodo ``getNewPage``, e con la stessa logica **dovrò creare una nuova pagina** ogni qualvolta lo spazio disponibile sarà esaurito :: page = self.getNewPage() Questo metodo mi restituisce un elemento :ref:`page` con tutte le dimensioni e proprietà definite dai suoi attributi. A questo punto non ho che da definire il mio layout principale e procedere con la definizione della stampa, usando tutti i :ref:`descrittori GnrHtml` . :: page = self.getNewPage() main_layout = page.layout(um='mm', border_width=1.3, lbl_height=4) .. hint:: Si noti che ridefinendo il metodo *main* abbiamo quindi necessità di conoscere perfettamente il contenuto della stampa e il suo ingombro in altezza, al fine di calcolare correttamente il salto pagina. Per leggere i dati invece userò i metodi di accesso ai :ref:`dati di record` Per vedere nella pratica una stampa totalmente *custom* si rimanda all'Esempio :ref:`Stampa custom: Scheda cliente`