ClassCastException with getAcroFields 2006-09-05 - By Mark Storer
Back Executive Summary: It's a bad PDF.
It has an "AcroForm" entry in the root object ('catalog'), but it points to a missing object. IIRC, iText will substitute a PdfNull in place of any absentee objects in the cross reference table (a list of all the objects in the file with their byte offsets). And while there is a slot for the AcroForm object in the list, it's pointing off to lala-land.
According to my theory, the XfaForm constructor tries to treat the AcroForm object like a dictionary (as it should be), you get that exception because it's a PdfNull instead.
The info dictionary states that this PDF was produced by MS Word using Distiller... which is supriseing, because I wouldn't expect distiller to produce a 'broken' PDF like this. There aren't any annotations of any kind in the PDF itself, so it's possible that Word thought there might be form fields, and did some setup, but never cleaned up after itself when it turned out that there weren't any.
When Acrobat opens the document it strips out the AcroForm entry from the root object, sanitizing the PDF. It opens fine in Acrobat (and I would presume in Reader).
iText will normally strip entries out of a dictionary if they're set to PdfNull , but because the "AcroForm" entry reffers to another object in the cross -reference table, it sees the reference, not PdfNull.
And just to make matters worse, the missing entries in the cross reference table aren't properly noted as such, further confusing iText.
--Mark Storer Senior Software Engineer Cardiff Software
#include <disclaimer> typedef std::Disclaimer<Cardiff> DisCard;
> -- --Original Message-- -- > From: itext-questions-bounces@(protected) > [mailto:itext-questions-bounces@(protected)]On Behalf Of > Bertrand Beyssac > Sent: Tuesday, September 05, 2006 8:16 AM > To: itext-questions@(protected) > Subject: [iText-questions] ClassCastException with getAcroFields > > > > I have a ClassCastException using following lines with > attached file on > "getAcroFields" method. > > I use iText 1.4.4. > > > PdfReader pdfReader = new PdfReader("bug.pdf"); > PdfStamper pdfStamper = new PdfStamper(pdfReader, new > FileOutputStream("final.pdf")); > > AcroFields acroFields = pdfStamper.getAcroFields(); > > java.lang.ClassCastException  > at com.lowagie.text.pdf.XfaForm.<init>(Unknown Source) > at com.lowagie.text.pdf.AcroFields <init>(Unknown Source) > at com.lowagie.text.pdf.PdfReader (Unknown Source) > > > Bertrand >
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 __ ____ ____ ____ ____ ____ ____ ____ ____ ____ iText-questions mailing list iText-questions@(protected) https://lists.sourceforge.net/lists/listinfo/itext-questions
|
|