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

Reply via email to