2012-07-19 3 views
0

J'utilise com.lowagie.text.xml.SAXiTextHandler pour convertir XML en PDF en utilisant iText (v-2.1.7). Je reçois l'erreur ci-dessous bien que je puisse voir que j'utilise les balises correctement. Vérifié que le XML formé est valide et je peux l'afficher dans le navigateur sans erreurs. Le code échoue en essayant de faire un parser.parse (....). J'ai vérifié la façon dont j'ai écrit les étiquettes et cela me semble bien. J'ai fondamentalement ajouté des étiquettes de table, contenant des étiquettes de rangée qui inturn contient des étiquettes de cellules. Les balises de cellule contiennent une seule balise de paragraphe (ou) parfois un paragraphe et une balise de tronçon dans le paragraphe. Y a-t-il un moyen de savoir où se situe ce problème?PDF IText | ClassCastException - com.lowagie.text.Paragraph ne peut pas être converti en com.lowagie.text.Table

* Suppression de toutes les balises de paragraphe du XML et tentative à nouveau. Il retourne la même erreur - Voici le nouveau XML utilisé - http://pastebin.com/hmyPcGDw *

* Même ce simple fichier XML génère la même exception maintenant - http://pastebin.com/89U9vybt *

Pour moi, il ressemble à un problème avec com.lowagie.text.xml.SAXiTextHandler. De l'aide ?

java.lang.ClassCastException: com.lowagie.text.Paragraph cannot be cast to com.lowagie.text.Table 
     at com.lowagie.text.xml.SAXiTextHandler.handleEndingTags(Unknown Source) 
     at com.lowagie.text.xml.SAXiTextHandler.endElement(Unknown Source) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:606) 
     at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endNamespaceScope(XMLDTDValidator.java:2054) 
     at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2005) 
     at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:879) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1741) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2898) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:302) 
     at javax.xml.parsers.SAXParser.parse(SAXParser.java:195) 
+0

pourriez-vous poster votre xml s'il vous plaît? – mabbas

+0

Voici le xml - http://pastebin.com/qJsDkj4G –

Répondre

1

C'est parce que vous avez un espace blanc avant et après vos balises xml (plus précisément les espaces blancs après la balise <table>). J'ai essayé avec votre exemple et j'ai eu la même exception. J'ai fait un copier/coller de votre code xml dans eclipse (ou notepad ++) je l'ai formaté (cela supprime tout l'espace blanc indésirable) puis j'ai réessayé et le problème a été résolu! le pdf est bien généré!

+0

Merci pour le pointeur. Eh bien, je l'ai essayé sur les simples et cela a fonctionné pour moi aussi. Le problème que je suis confronté maintenant est avec un XML plus de 2000 lignes. J'ai regardé pour les espaces de

tag jusqu'à
tag et les enlevés. Pourtant, je reçois l'erreur. Ne devrais-je pas avoir d'espace (à la fois tabulation/espace vide) après une balise de début et une balise de fin? Pourriez-vous s'il vous plaît laissez-moi savoir la ligne directrice ici et comment supprimer facilement les espaces indésirables? –

+1

Vous ne devriez pas avoir d'espace après la balise '

' (il y a un bug dans 'com.lowagie.text.xml.SAXiTextHandler'). Pour supprimer les espaces, vous pouvez copier/coller votre code xml dans 'eclipse' puis' ctrl + a' pour sélectionner tout votre code puis 'ctrl + shift + f' pour le formater. Ou si vous utilisez notepad ++, installez le plugin "XML Tools" (Menu Plugins, Plugin Manager) puis lancez: Menu Plugins, Outils Xml, Pretty Print (XML uniquement - avec sauts de ligne). – mabbas

Questions connexes