-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

Reply via email to