Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » iText »

[iText-questions] Can't get PdfTemplate to display text

Matthew Metlis

2006-06-15

Replies:

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
iText-questions@(protected)
https://lists.sourceforge.net/lists/listinfo/itext-questions
©2008 junlu.com - Jax Systems, LLC, U.S.A.