EDIT: Updated flow diagram to better explain the (likely unnecessary) complexity of what I'm doing.
We at the company I work for are attempting to create complex PDF files using Java iText (the free version 2.1 line). The documents are built piece-by-piece from individual "template" files, which are added to the final document one after another using the PdfStamper class, as well as filled using AcroForms.

The current design performs a loop which runs for each template that needs to be added in order (as well as the custom logic needed to fill each). In each iteration of the loop, it does the following:
- Creates a
PdfReaderto open the template file - Creates a
PdfStamperthat reads from thePdfReaderand writes to a "template buffer" - Fills AcroForm fields, as well as measures the height of the template by getting the location of an "end"
AcroField. - Closes the
PdfReaderandPdfStamper - Creates a
PdfReaderto read a "working buffer" that stores the current final document in progress - Creates a
PdfStamperthat reads from thePdfReaderand writes to a "storage buffer" - Closes the
PdfReader, opens a newPdfReaderto the "template buffer" - Imports the page from the "template buffer," adds it to the
ContentByteof thePdfStamper - Closes the
PdfReaderandPdfStamper - Swaps the "storage buffer" with the "working buffer" in order to be ready to repeat.
Here is a diagram visually explaining the above process, which is performed for each iteration of the "loop" that performs each template:

However, as discovered through this Stack Overflow question (where example code can also be viewed) and the response by iText author Bruno Lowagie, this methodology of using the PdfStamper can cause significant issues. "Abusing" the PdfStamper by creating and closing the stamper too many times can cause corruptions in the resulting file that only effect some programs, generating a seemingly good document that may fail in certain contexts.
What is the alternative? Mr. Lowagie's response suggests that there is a simpler or more direct way to use PdfStampers, though I do not quite understand it myself yet. Could this be done using only a single stamper? Could it be done without using a rotating series of buffers?
