Send me code that I can run and pdfs. I don't know if the problem is in
the rename or the filling.

Best Regards,
Paulo Soares

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On 
> Behalf Of Mika Majakorpi
> Sent: Thursday, August 26, 2004 3:49 PM
> To: [EMAIL PROTECTED]
> Subject: [iText-questions] Field filling trouble in 
> concatenated PDF (ClassCastException)
> 
> Hello,
> 
> I'm having trouble setting values for fields in a multipage 
> PDF which I have
> built from a single-page PDF including a form using 
> PdfCopyFields. During
> the concatenation of the pages I've renamed some fields using 
> a stamper (I
> have a name field in the form and concatenate pages and 
> increment field name
> if my data has more names than fits on one page). The 
> resulting PDF opens
> and works without problems in Acrobat, but when I try to set 
> a value for the
> fields using itext I get a ClassCastException.
> 
> First of all, this is what I'm doing:
> 
>               ByteArrayOutputStream newdoc = new 
> ByteArrayOutputStream();
>               PdfCopyFields copier = new PdfCopyFields(newdoc);
>               for (int i = 0; i<=count; ++i) {
>                       PdfReader reader = new
> PdfReader(this.template.toString());
>                       ByteArrayOutputStream tempStream = new
> ByteArrayOutputStream();
>                       PdfStamper stamp = new PdfStamper(reader,
> tempStream);
>                       int numFields = 2;
>                       if (i> 0) {
>                               //increase counter which is the 
> last char in
> the field name string
>                               AcroFields form = stamp.getAcroFields();
>                               List fnames = new
> ArrayList(form.getFields().keySet());
>                               Collections.sort(fnames);
>                               Iterator nIter = fnames.iterator();
>                               while (nIter.hasNext()) {
>                                       
>                                       //here I change the 
> name string by
> incrementing a number on it.
>                                       //the names are of the form
> Formname.Fieldname0 and I increment the
>                                       //last number.
> 
>                                       
> form.renameField(oldname, newname);
>                                       }
>                               }
>                       }
>                       stamp.close();
>                       PdfReader tempreader = new
> PdfReader(tempStream.toByteArray());
>                       copier.addDocument(tempreader);
>               }
>               copier.close();
> 
> Now with the newly constructed pdf I do the following to fill 
> the form:
> 
>               PdfReader reader =
>                       new PdfReader(newdoc.toByteArray());
>               ByteArrayOutputStream baos = new 
> ByteArrayOutputStream();
>               PdfStamper stamp =
>                       new PdfStamper(reader, baos);
>               AcroFields form = stamp.getAcroFields();
>               //form.setGenerateAppearances(false);
>               i = vaHlot.iterator();
>               int c = 0;
>               while (i.hasNext()) {
>                       Henkilo h = (Henkilo)i.next();
>       
> form.setField("TVastatakaussitoumus.vastatakauksenAntajat.nimi"+c,
> h.getNimi());
>                       c++;
>               }
>               ...
> 
> Am I doing something wrong here or in the concatenation/renaming step?
> 
> The above form.setField() call is the one causing the 
> problem. The Exception
> is thrown in the AcroFields.getAppearance(PdfDictionary 
> merged, String text)
> method (line 306). The call
>       
>       font.get(new PdfName((String)dab[DA_FONT]));
> 
> returns a PdfNull and an attempt is made to cast it to 
> PRIndirectReference
> which fails.
> 
> The above is true for version paulo-135. Itext 1.02b throws the
> ClassCastException in the constructor of DocumentFont which 
> is called as the
> next thing done in AcroFields.getAppearance().
> 
> Setting AcroFields.setGenerateAppearances(false) before 
> calling setField
> solves the problem and the resulting PDF documents seem OK. 
> What are the
> consequences of not generating appearances in this case?
> 
> Thanks in advance for any help on this matter!
> 
> Best Regards,
> Mika Majakorpi
> 
> 
> 
> 
> 
> -------------------------------------------------------
> SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
> 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
> Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
> http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
> _______________________________________________
> iText-questions mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
> 


-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to