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

Reply via email to