I have modified the loop which calls go() until the ColumnText
has no more text.

I am inserting a new page as needed with insertPage().

Afterward, I get a new cb by calling stamper.getOverContent(pageNo)
and call the ColumnText setCanvas() method with this cb.

However, within the loop, when I call ct.go() the value of biditext
never changes, so it becomes an endless loop.

Here is the code with the changes:

                try {
            // I would read the form with PdfReader.  Create a
PdfStamper with this reader.
            PdfReader  templateReader = new PdfReader(templateFileName);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            
            PdfStamper stamper        = new PdfStamper(templateReader,
baos);

            // Import the static page and add it as a background to
every page (in a loop).
            PdfImportedPage sowPage =
stamper.getImportedPage(templateReader,5); // 5th page is the one which
may need to overflow

            // Create an XfdfReader, get the fields one by one, and set
all of them except
            // one as described in the book. Set flattening to true.
            stamper.setFormFlattening(true);
            XfdfReader dataReader = new XfdfReader(dataFileName);
            AcroFields form = stamper.getAcroFields();
            String fieldName;
            for (Iterator i = form.getFields().keySet().iterator();
i.hasNext(); ) {
                fieldName = (String)i.next();
                if ( fieldName.equals("long_sow") ) {
                    sow = dataReader.getField(fieldName);
                } else {
 
form.setField(fieldName,dataReader.getField(fieldName));
                }
            }

            // The field you didn't set, is the one that may or may not
fit the last page.
            // Wrap the data in a ColumnText object.  Retrieve the
positions of the big
            // field on the last page. Use these coordinates to define
the ColumnText
            // rectangle.  Invoke go()
            float[] sowFieldPositions =
form.getFieldPositions("long_sow");
            if ( sowFieldPositions == null ) {
                System.err.println("no field positions found for
long_sow");
                System.exit(1);
            } else if (sowFieldPositions.length != 5) {
                System.err.println("unexpected number of values for
long_sow field positions: " + sowFieldPositions.length);
                System.exit(1);
            }
            float llx = sowFieldPositions[1];
            float lly = sowFieldPositions[2];
            float urx = sowFieldPositions[3];
            float ury = sowFieldPositions[4];

            int pageNo = 5;
            PdfContentByte cb = stamper.getOverContent(pageNo);
            ColumnText ct = new ColumnText(cb);
            ct.setSimpleColumn(llx,lly,urx,ury);
            ct.setText(new Phrase(sow));
            int status = ct.go();

            // If there's no more text left in the ColumnText, you're
done. The extra page
            // is not needed. If there still is some text left, insert a
new page at the
            // end, add the static page as background, reset the
ColumnText rectangle and
            // add it to the newly created page.

            // You should insert a new page and get a new cb from that
page.
            while ( ct.hasMoreText(status) ) {
                stamper.insertPage(++pageNo, PageSize.LETTER);
                cb = stamper.getOverContent(pageNo);
                cb.addTemplate(sowPage,0,0);  // add the static page as
background
                ct.setCanvas(cb);
                status = ct.go();
            }

            stamper.close();

            // write output to file
            FileOutputStream fos = new FileOutputStream(outputFileName);
            baos.writeTo(fos);
            fos.close();
            System.out.println("done");

                } catch (Exception e) {
                        e.printStackTrace();
                }

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://itext.ugent.be/itext-in-action/

Reply via email to