Can't get PdfTemplate to display text
- From: "Paulo Soares" <psoares (at) consiste.pt>
- Date: Fri, 16 Jun 2006 08:04:11 +0100
-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" <mmetlis (at) yahoo.com>
To: <itext-questions (at) lists.sourceforge.net>
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
> iText-questions (at) lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/itext-questions
_______________________________________________
iText-questions mailing list
iText-questions (at) lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions