Hi Bruno, Finally, here is my scenario.
- I have a template with two pages. On first page, I have an acro field for an image, on the second I have three acro fields. - I used your example (BatchFill.java) and able to write document and fill acro fields on both pages. - I am pasting my programme here, when I run this programme, the page 1 and page 2 are getting included in single page. How can we prevent that? Meantime, I even tried to move to next page also, because if I say, System.out.println("page No: " + writer.getPageNumber()); its always showing page 1. - I read your article and not able to understand, probably you are using stamp, I don't want to use it since my file size needs to be limited. I hope you understand my problem. ----- import java.io.FileOutputStream; import java.io.IOException; import java.io.ByteArrayOutputStream; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Phrase; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.AcroFields; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.ColumnText; import com.lowagie.text.Chunk; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfImportedPage; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfPageEventHelper; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.text.pdf.PdfStamper; import com.lowagie.text.Image; import java.util.HashMap; import java.util.Iterator; public class BatchFill extends PdfPageEventHelper { public static final String IMAGE = "F1[0].P1[0].imagefield[0]"; public static final String DATE = "F1[0].P2[0].date[0]"; public static final String TIME = "F1[0].P2[0].time[0]"; public static final String LOCATION = "F1[0].P2[0].location[0]"; public static final String[] keys = { DATE, TIME, LOCATION }; private Rectangle[] coordinates = new Rectangle[keys.length]; private PdfImportedPage pageOne; private PdfImportedPage pageTwo; private PdfContentByte canvas; int n = 0; public void onOpenDocument(PdfWriter writer, Document doc) { try { canvas = writer.getDirectContentUnder(); PdfReader reader = new PdfReader("D:\\lucky_one_template.pdf"); n = reader.getNumberOfPages(); System.out.println("Total pages: " + reader.getNumberOfPages()); pageOne = writer.getImportedPage(reader, 1); pageTwo = writer.getImportedPage(reader, 2); AcroFields fields = reader.getAcroFields(); HashMap map = fields.getFields(); Iterator itr = map.keySet().iterator(); while (itr.hasNext()) { System.out.println((String)itr.next()); } for (int i = 0; i < keys.length; i++) { float[] positions = fields.getFieldPositions(keys[i]); //System.out.println(positions); //System.out.println("positions: " + positions.length); //System.out.println("--> "+positions[1] +" "+ (positions[2] + 3) +" "+ positions[3] +" "+ (positions[4] + 3)); coordinates[i] = new Rectangle(positions[1], positions[2] + 3, positions[3], positions[4] + 3); } } catch (IOException e) { e.printStackTrace(); } } //Adding core content. public void onEndPage(PdfWriter writer, Document doc) { canvas.addTemplate(pageOne, 0, 0); canvas.addTemplate(pageTwo, 0, 0); } public static void main(String[] args) { String[] values = { "Date", "Time","Location"}; try { //Image adding stuff. PdfReader reader = new PdfReader("D:\\lucky_one_template.pdf"); ByteArrayOutputStream baos = baos = new ByteArrayOutputStream(); PdfStamper stamper = new PdfStamper(reader, baos); AcroFields form = stamper.getAcroFields(); float[] photograph = form.getFieldPositions(IMAGE); Rectangle rect = new Rectangle(photograph[1], photograph[2], photograph[3], photograph[4]); Image img = Image.getInstance("D:\\otsoe(1).jpg"); img.scaleToFit(rect.width(), rect.height()); img.setAbsolutePosition(photograph[1] + (rect.width() - img.scaledWidth()) / 2, photograph[2] + (rect.height() - img.scaledHeight()) / 2); stamper.close(); BatchFill batch = new BatchFill(); Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:\\lucky_one_test.pdf")); writer.setPageEvent(batch); document.open(); PdfContentByte contentOne = writer.getDirectContent(); System.out.println("page No: " + writer.getPageNumber()); PdfContentByte contentTwo = writer.getDirectContent(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); ColumnText ct = new ColumnText(contentTwo); for (int i = 0; i < 100; i++) { //System.out.println(values.length); contentOne.addImage(img); document.newPage(); for (int j = 0; j < values.length; j++) { // you can add text with ColumnText //System.out.println(batch.coordinates[j].left() +" "+ batch.coordinates[j].bottom() +" "+ batch.coordinates[j].right() +" "+ batch.coordinates[j].top()); ct.setSimpleColumn(new Phrase(values[j]+(i+1)), batch.coordinates[j].left(), batch.coordinates[j].bottom(), batch.coordinates[j].right(), batch.coordinates[j].top(), 16, Element.ALIGN_LEFT); ct.go(); } //document.newPage(); //System.out.println(); } document.close(); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } } } ---- Thanks, ganesh. -- View this message in context: http://www.nabble.com/Generation-of-Multiple-Page-PDF-Document-is-slow-tf2050222.html#a5963647 Sent from the iText - General forum at Nabble.com. ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/itext-questions