Hi, I am not understanding something fundamental here. When I create an Acroform across multiple pages, it always renders the fields on the last page only. I use 2 examples, one from the book (with modifications to increase rows), and one of my own. They both demonstrate my problem.
Dan import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.File; import java.io.IOException; import java.util.StringTokenizer; import java.awt.Color; import com.lowagie.text.*; import com.lowagie.text.pdf.*; import com.lowagie.text.pdf.events.*; public class PdfTests implements PdfPTableEvent { /** * Creates an instance of an Event to add a field. */ public PdfTests() { } public static void main(String[] args) { test1(); test2(); } public static void test2() { try { Document document = new Document(); int ndx = 0; File f = new File("d:\\jobs\\ipdf\\pdftest-" + ndx + ".pdf"); while (f.exists()) { ndx++; f = new File("d:\\jobs\\ipdf\\pdftest-" + ndx + ".pdf"); } PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(f)); document.open(); PdfFormField parent = PdfFormField.createEmpty(writer); parent.setFieldName("parent"); for (int i = 0; i < 3; i++) { Paragraph p = new Paragraph("Page " + i); document.add(p); TextField tf = new TextField(writer, new Rectangle(0, 0, 0, 0), "hidden" + i); tf.setText("dan"); tf.setOptions(TextField.HIDDEN); parent.addKid(tf.getTextField()); String options[] = { "English", "French", "Dutch", "German" }; PdfFormField combo = PdfFormField.createCombo(writer, true, options, 0); combo.setWidget(new Rectangle(80 * i + 40, 780, 80 * i + 120, 800), PdfAnnotation.HIGHLIGHT_INVERT); combo.setFieldName("language" + i); parent.addKid(combo); document.newPage(); } PushbuttonField button1 = new PushbuttonField(writer, new Rectangle(150, 560, 200, 590), "BUTTON1"); button1.setBackgroundColor(Color.LIGHT_GRAY); button1.setText("POST"); button1.setVisibility(PushbuttonField.VISIBLE_BUT_DOES_NOT_PRINT); PdfFormField submit1 = button1.getField(); submit1.setAction(PdfAction.createSubmitForm( "http://127.0.0.1/testpost.php", null, PdfAction.SUBMIT_HTML_FORMAT | PdfAction.SUBMIT_COORDINATES)); parent.addKid(submit1); writer.addAnnotation(parent); document.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Generates a learning agreement form. * * @param args * no arguments needed here */ public static void test1() { System.out.println("Chapter 17: example Learning Agreement"); System.out.println("-> Creates a learning agreement form in PDF;"); System.out.println("-> jars needed: iText.jar"); System.out.println("-> resulting PDF: learning_agreement.pdf"); // step 1: creation of a document-object Document document = new Document(); try { // step 2: // we create a writer PdfWriter writer = PdfWriter.getInstance( // that listens to the document document, // and directs a PDF-stream to a file new FileOutputStream("d:\\jobs\\ipdf\\pdftests.pdf")); FieldPositioningEvents fpe = new FieldPositioningEvents(); writer.setPageEvent(fpe); // step 3: we open the document document.open(); StringBuffer js = new StringBuffer( "var code = new Array();\nvar name = new Array();\nvar credits = new Array();\n"); StringBuffer items = new StringBuffer("''"); String line; int i = 0; for (int j = 0; j < 116; j++) { line = "CS" + j + ";COMP SCI " + j + ";3"; StringTokenizer js_courses = new StringTokenizer(line, ";"); line = js_courses.nextToken(); items.append(", '").append(line).append("'"); js.append("code[").append(i).append("] = '"); js.append(line).append("';\n"); js.append("name[").append(i).append("] = '"); js.append(js_courses.nextToken()).append("';\n"); js.append("credits[").append(i).append("] = '"); js.append(js_courses.nextToken()).append("';\n"); i++; } js.append("for (i = 0; i < 116; i++) {\n"); js.append(" f = this.getField('course_' + i + '.code');\n"); js.append(" f.setItems([").append(items.toString()) .append("]);\n"); js.append(" f = this.getField('course_' + i + '.name');\n"); js.append(" f.textSize = 0;\n"); js.append(" f.multiline = true;\n"); js.append("};\n"); js.append("this.getField('academic_year').value = '2006-2007';"); js.append("this.getField('field_of_study').value = 'ICT';"); js.append("this.getField('student_name').setFocus();"); js.append("function updateCourse(event) {\n"); js.append(" target = event.target.name;\n"); js.append(" parent = target.substring(0, target.length - 5);\n"); js.append(" for (c = 0; c < code.length; c++) {\n"); js.append(" if (event.value == code[c]) {\n"); js .append(" this.getField(parent + '.name').value = name[c];"); js .append(" this.getField(parent + '.credits').value = credits[c];"); js.append(" }\n"); js.append(" }\n"); js.append(" this.getField(parent + '.name').setFocus();"); js.append("}\n"); writer.addJavaScript(js.toString()); // step 4: // we create a pushbutton that submits the form PdfFormField pushbutton = PdfFormField.createPushButton(writer); pushbutton.setFieldName("PushMe"); // we don't define the position on the page yet pushbutton.setWidget(new Rectangle(0, 0), PdfAnnotation.HIGHLIGHT_PUSH); pushbutton .setAction(PdfAction .createSubmitForm( "http://127.0.0.1/testpost.php", null, PdfAction.SUBMIT_HTML_FORMAT | PdfAction.SUBMIT_COORDINATES)); // we add the button to the FieldPositioningEvent for later use fpe.addField("pushMe", pushbutton); Font font = FontFactory.getFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED, 14); Paragraph p; // TITLE p = new Paragraph("EXCHANGE STUDENTS", font); p.setAlignment(Element.ALIGN_CENTER); document.add(p); p = new Paragraph("LEARNING AGREEMENT", font); p.setAlignment(Element.ALIGN_CENTER); document.add(p); // this chunk will generate a field with name academic_year Chunk academic_year = new Chunk(" "); academic_year.setGenericTag("academic_year"); // this chunk will generate a field with name field_of_study Chunk field_of_study = new Chunk(" "); field_of_study.setGenericTag("field_of_study"); // SUBTITLE p = new Paragraph(30, "ACADEMIC YEAR ", font); p.add(academic_year); p.add(new Phrase(" - FIELD OF STUDY: ")); p.add(field_of_study); p.setAlignment(Element.ALIGN_CENTER); document.add(p); // TABLE WITH STUDENT INFORMATION PdfPTable table; int[] widths = { 12, 16, 8, 14 }; table = new PdfPTable(4); table.setSpacingBefore(10f); table.setSpacingAfter(10f); table.setTableEvent(new PdfTests()); table.setWidths(widths); table.getDefaultCell().setBorder(PdfPCell.NO_BORDER); // first row, first column table.addCell("Name of student:"); PdfPCell cell; // first row, second column: a field to fill in cell = new PdfPCell(); cell.setColspan(3); cell.setBorder(PdfPCell.NO_BORDER); cell .setCellEvent(new FieldPositioningEvents(writer, "student_name")); table.addCell(cell); // second row cell = new PdfPCell(new Paragraph("Sending Institution:")); cell.setColspan(4); cell.setBorder(PdfPCell.NO_BORDER); table.addCell(cell); // third row, first column cell = new PdfPCell(); cell.setPaddingBottom(5); cell.setColspan(2); cell.setBorder(PdfPCell.NO_BORDER); cell.setCellEvent(new FieldPositioningEvents(writer, "sending_institution")); table.addCell(cell); // third row, second column cell = new PdfPCell(new Paragraph("Country:")); cell.setPaddingBottom(5); cell.setBorder(PdfPCell.NO_BORDER); table.addCell(cell); // third row, third column cell = new PdfPCell(); cell.setPaddingBottom(5); cell.setBorder(PdfPCell.NO_BORDER); cell.setCellEvent(new FieldPositioningEvents(writer, "sending_country")); table.addCell(cell); // fourth row cell = new PdfPCell(new Paragraph("Letter of Introduction:")); cell.setColspan(2); cell.setBorder(PdfPCell.NO_BORDER); table.addCell(cell); cell = new PdfPCell(); cell.setColspan(2); cell.setBorder(PdfPCell.NO_BORDER); TextField letter = new TextField(writer, new Rectangle(0, 0), "letter"); letter.setOptions(TextField.FILE_SELECTION); PdfFormField introduction = letter.getTextField(); introduction .setAdditionalActions( PdfName.U, PdfAction .javaScript( "this.getField('letter').browseForFileToSubmit();this.getField('receiving_institution').setFocus();", writer)); cell.setCellEvent(new FieldPositioningEvents(writer, introduction)); table.addCell(cell); document.add(table); // INFORMATION CONCERNING THE RECEIVING INSTITUTION p = new Paragraph("DETAILS OF THE PROPOSED STUDY PROGRAM ABROAD"); p.setAlignment(Element.ALIGN_CENTER); document.add(p); table = new PdfPTable(4); table.setSpacingBefore(10f); table.setSpacingAfter(10f); table.setTableEvent(new PdfTests()); table.setWidths(widths); table.getDefaultCell().setBorder(PdfPCell.NO_BORDER); // first row cell = new PdfPCell(new Paragraph("Receiving Institution:")); cell.setColspan(4); cell.setBorder(PdfPCell.NO_BORDER); table.addCell(cell); // second row first column cell = new PdfPCell(); cell.setPaddingBottom(5); cell.setColspan(2); cell.setBorder(PdfPCell.NO_BORDER); cell.setCellEvent(new FieldPositioningEvents(writer, "receiving_institution")); table.addCell(cell); // second row, second column cell = new PdfPCell(new Paragraph("Country:")); cell.setPaddingBottom(5); cell.setBorder(PdfPCell.NO_BORDER); table.addCell(cell); // second row, second column cell = new PdfPCell(); cell.setPaddingBottom(5); cell.setBorder(PdfPCell.NO_BORDER); cell.setCellEvent(new FieldPositioningEvents(writer, "receiving_country")); table.addCell(cell); document.add(table); // list of courses table = new PdfPTable(3); table.setTableEvent(new PdfTests()); table.getDefaultCell().setBorder(PdfPCell.RIGHT); table.addCell("Course code"); table.addCell("Course unit title"); table.getDefaultCell().setBorder(PdfPCell.NO_BORDER); table.addCell("Number of ECTS credits"); PdfFormField[] lines = new PdfFormField[116]; FieldPositioningEvents kid; TextField combo; PdfFormField comboField; for (i = 0; i < 116; i++) { lines[i] = PdfFormField.createEmpty(writer); lines[i].setFieldName("course_" + i); cell = new PdfPCell(); cell.setFixedHeight(22); cell.setBorder(PdfPCell.RIGHT); combo = new TextField(writer, new Rectangle(0, 0), "code"); combo.setChoices(new String[] {}); comboField = combo.getComboField(); comboField.setAdditionalActions(PdfName.K, PdfAction .javaScript("updateCourse(event);", writer)); kid = new FieldPositioningEvents(lines[i], comboField); kid.setPadding(0.5f); cell.setCellEvent(kid); table.addCell(cell); cell = new PdfPCell(); cell.setFixedHeight(22); cell.setBorder(PdfPCell.RIGHT); kid = new FieldPositioningEvents(writer, lines[i], "name"); kid.setPadding(0.5f); cell.setCellEvent(kid); table.addCell(cell); cell = new PdfPCell(); cell.setFixedHeight(22); cell.setBorder(PdfPCell.NO_BORDER); kid = new FieldPositioningEvents(writer, lines[i], "credits"); kid.setPadding(0.5f); cell.setCellEvent(kid); table.addCell(cell); } document.add(table); for (i = 0; i < 116; i++) { writer.addAnnotation(lines[i]); } Chunk submit = new Chunk(" Click to submit "); submit.setGenericTag("pushMe"); p = new Paragraph(submit); p.setAlignment(Element.ALIGN_CENTER); document.add(p); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } // step 5: we close the document document.close(); } /** * @see com.lowagie.text.pdf.PdfPTableEvent#tableLayout(com.lowagie.text.pdf.PdfPTable, * float[][], float[], int, int, com.lowagie.text.pdf.PdfContentByte[]) */ public void tableLayout(PdfPTable table, float[][] width, float[] heights, int headerRows, int rowStart, PdfContentByte[] canvases) { float widths[] = width[0]; PdfContentByte cb = canvases[PdfPTable.TEXTCANVAS]; cb.rectangle(widths[0], heights[heights.length - 1], widths[widths.length - 1] - widths[0], heights[0] - heights[heights.length - 1]); cb.stroke(); } ------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword _______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/itext-questions Buy the iText book: http://www.1t3xt.com/docs/book.php