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
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions