ora sono un pò arrugginito con i css per la stampa, ma si hai una pagina html che è il tuo A4: ovviamente non puoi ragionare per pixel, a meno che non fai corrispondenza tra i pixel e la risoluzione in ppi con qui intendi stampare. Però dovresti avere queste certezze:
- header (ovvero, un div html) di grandezza fissa
- footer (ovvero , un div html ) di grandezza fissa
- un content compreso tra header e footer di altezza variabile, però dovresti a quel punto essere in grado di capire, magari con delle prove, quante righe della fattura/preventivo possono starci. La libreria è in grado di mettere i page break in automatico pure, probabilmente ripetendo il footer. Insomma, c'è da sperimentare utilizzando un "ambiente" demo che ti aiuti a impratichirti con gli strumenti (potresti farti una libreria con i vari unit testing per gestire la creazione di pdf e poi aggiungerla al progetto )
Cmq, c'è tanto lavoro da fare sicuramente. Normalmente, a prescindere dal linguaggio utilizzare, si creano dei template che poi si vanno a riempire con i dati presi dall'applicativo: l'uso del template aiuta a sapere, ad esempio, quante righe possono entrare in un foglio (visto che sono preimpostate in altezza).
La rottura di scatole tipica di queste cose, ad esempio, è la presenza di un testo troppo lungo dentro una cella: il testo o viene troncato per rispettare with/height della cella, oppure va a capo, ma allora l'altezza della cella va ricalcolata. Questo è un fattore che devi prevedere sia se utilizzi html che se utilizzi direttamente il disegno da codice