EDIT: diagramma di flusso aggiornato per spiegare meglio la complessità (probabilmente inutile) di ciò che sto facendo.
Noi della società per cui lavoro provo a creare file PDF complessi utilizzando Java iText (la versione gratuita della linea 2.1). I documenti sono costruiti pezzo per pezzo dai singoli file "modello" , che vengono aggiunti al documento finale uno dopo l'altro utilizzando la classe PdfStamper e riempiti con AcroForms.

Ildesignattualeesegueunciclochevieneeseguitoperognimodellochedeveessereaggiuntoinordine(oltreallalogicapersonalizzatanecessariaperriempireciascuno).Inogniiterazionedelciclo,effettualeseguentioperazioni:
- Creaun
PdfReaderperaprireilfilemodello - Creaun
PdfStampercheleggedaPdfReaderescriveinun"buffer modello" - Compila i campi AcroForm e misura l'altezza del modello ottenendo la posizione di una "fine"
AcroField. - Chiude
PdfReaderePdfStamper - Crea un
PdfReaderper leggere un "buffer di lavoro" che memorizza il documento finale corrente in corso - Crea un
PdfStamperche legge daPdfReadere scrive in un "buffer di archiviazione" - Chiude
PdfReader, apre un nuovoPdfReaderal "buffer template" - Importa la pagina dal "buffer modello", la aggiunge al
ContentBytediPdfStamper - Chiude
PdfReaderePdfStamper - Scambia il "buffer di archiviazione" con il "buffer di lavoro" per essere pronto a ripetere.
Ecco un diagramma che illustra visivamente il processo di cui sopra, che viene eseguito per ogni iterazione del "loop" che esegue ogni modello:

Tuttavia,comerilevatoattraversoPdfStamper può causare problemi significativi. "Abusare" il PdfStamper creando e chiudendo lo stampatore troppe volte può causare corruzioni nel file risultante che agiscono solo su alcuni programmi, generando un documento apparentemente buono che potrebbe non funzionare in determinati contesti.
Qual è l'alternativa? La risposta di Mr. Lowagie suggerisce che esiste un modo più semplice o più diretto di usare PdfStamper s, anche se non lo capisco ancora. Questo potrebbe essere fatto usando solo un singolo stamper? Potrebbe essere fatto senza utilizzare una serie di buffer rotanti?
