By Date: <-- -->
By Thread: <-- -->

Generation of Multiple Page PDF Document is slow



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 (at) lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions