-Use a PdfStamper to read in a page with form fields, fill in the fields AND FLATTEN THEM. Write the page to byte array. -Use a PdfCopy object and its getImportedPage() method to copy each byte array to A TEMPORARY file (using a new Reader constructed for each byte array). -Repeat the above 2 steps for every page (variable number. -Read the temporary file and use PdfStamper to add the page numbers.
Paulo ----- Original Message ----- From: "Matthew Metlis" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Friday, June 16, 2006 12:11 AM Subject: [iText-questions] Can't get PdfTemplate to display text > Hi, > > I am having trouble using PdfTemplate. I am taking > existing Java code that uses iText to print a document > with varying pages, and I want to add a PdfTemplate to > each page to display the total number of pages (which > I won't know until I get to the end of the process). > > I would appreciate any help. I'm sorry this is so > much code; I chopped out everything that I was > confident would not be applicable to this problem. > > The printing code basically works as follows: > -Use a PdfStamper to read in a page with form fields, > fill in the fields. Write the page to byte array. > -Use a PdfCopy object and its getImportedPage() method > to copy each byte array to the final file (using a new > Reader constructed for each byte array). > -Repeat the above 2 steps for every page (variable > number). > > I've gotten the use of PdfTemplate to occur without > any runtime errors (at least any I can see from a > console). I think I may be adding the template to the > wrong object. I have tried adding it to both the > PdfCopy object and the PdfStamper object (not both at > once) - the places I tried separately I marked with a > "here?" comment. Whichever I do, no text shows up in > the PDF file from the template. The rest of the > printing process works properly; the template is the > exception. > > Control flow starts in the generate() method. Some of > this is pseudo-code. > > FileOutputStream outStream; > Document document; > PdfCopy copier; > Helper helper; > > generate() { > helper = new Helper(); > outStream = new FileOutputStream(OUT_FILENAME); > for each page { // variable # of pages > ByteArrayOutputStream bs = new > ByteArrayOutputStream(); > // read in a single page with form fields. > PdfReader reader = new > PdfReader(ORIGINAL_PDF_FILE); > PdfStamper stamper = new PdfStamper(reader, > bs); > // code omitted: use the stamper to set form > fields. > addTemplateToPage(stamper.getOverContent(1)); > // here? > stamper.setFormFlattening(true); > stamper.close(); > bs.close(); > concat(bs converted to byte[]); > } // end for each page > > copier.close(); > document.close(); > outStream.close(); > } > > void concat(byte[] b) { > PdfReader reader = new PdfReader(b); > int n = reader.getNumberOfPages(); > > if (document == null || copier == null) { > document = new > Document(reader.getPageSizeWithRotation(i)); > copier = new PdfCopy(document, outStream); > copier.setPageEvent(helper); > document.open(); > } > > PdfImportedPage page; > for (int i = 0; i < n; ) { > ++i; > page = copier.getImportedPage(reader, i); > // PdfImportedPage throws error on > addTemplate() calls, so can't add template here. > copier.addPage(page); > addTemplateToPage(copier.getDirectContent()); > // here? > copier.freeReader(reader); > } > } > > void addTemplateToPage(PdfContentByte cb) { > if (template == null { > template = cb.createTemplate(100, 100); > template.setBoundingBox(new Rectangle(-20, > -20, 300, 300)); // tried without this line too. > helper.setTemplate(template); > } > cb.addTemplate(100, 100); > } > > class Helper extends PdfPageEventHelper { > PdfTemplate template; > > void setTemplate(PdfTemplate template) { > this.template = template; > } > > public void onCloseDocument(PdfWriter writer, > Document document) { > BaseFont helvetica = null; > try { > helvetica = > BaseFont.createFont("Helvetica", BaseFont.WINANSI, > false); > } catch (Exception ex) { > print errors and return; > } > > template.beginText(); > template.setFontAndSize(helvetica, 12); > template.setTextMatrix(200, 200); > template.showText(200, 200); > template.endText(); > // print statement here to verify this is being > called - it is. > } > } // end class Helper > > > __________________________________________________ > Do You Yahoo!? > Tired of spam? Yahoo! Mail has the best spam protection around > http://mail.yahoo.com > > > _______________________________________________ > iText-questions mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/itext-questions _______________________________________________ iText-questions mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/itext-questions
