Marsanka Geschrieben 8. Juni 2009 Teilen Geschrieben 8. Juni 2009 Hallo zusammen, ich habe eine Frage zu JasperReport und Benutzung von IReport und hoffe, dass mir jemand weiter helfen kann. Ich habe eine kleine Java-Applikation: ------------------------------------------------------------------------- import java.io.File; import java.util.HashMap; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRXmlDataSource; public class JasperReport_PDF { public JasperReport_PDF() { } public void erstellePDF() { JasperReport jasperReport; JasperPrint jasperPrint; HashMap<String, String> parameter = new HashMap<String, String>(); try { JRXmlDataSource xml = new JRXmlDataSource(new File("Datei1.xml"), "/xPath"); jasperReport = JasperCompileManager.compileReport("Datei2.jrxml"); jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, xml); JasperExportManager.exportReportToPdfFile(jasperPrint, "out/Datei3.pdf"); } catch (JRException e) { e.printStackTrace(); } } public static void main(String[] args) { JasperReport_PDF pdf = new JasperReport_PDF(); pdf.erstellePDF(); System.out.println("PDF wurde erstellt!"); } } -------------------------------------------------------------------------- Das funktioniert erst mal. Das heißt - die XML-Datei, JRXML-Datei und der xPath sind korrekt. Versuche ich aber die JRXML-Datei zu ändern und abzuspeichern, dann geht es nicht mehr. Java wirft folgenden Fehler auf: ------------------------------------------------------------------------- 08.06.2009 14:57:06 org.apache.commons.digester.Digester error SCHWERWIEGEND: Parse Error at line 2 column 417: Document root element "jasperReport", must match DOCTYPE root "null". org.xml.sax.SAXParseException: Document root element "jasperReport", must match DOCTYPE root "null". at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1621) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1900) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:764) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1359) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1316) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.commons.digester.Digester.parse(Digester.java:1745) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150) at JasperReport_PDF.erstellePDF(JasperReport_PDF.java:30) at JasperReport_PDF.main(JasperReport_PDF.java:45) net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException: Document root element "jasperReport", must match DOCTYPE root "null". at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:243) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150) at JasperReport_PDF.erstellePDF(JasperReport_PDF.java:30) at JasperReport_PDF.main(JasperReport_PDF.java:45) Caused by: org.xml.sax.SAXParseException: Document root element "jasperReport", must match DOCTYPE root "null". at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1621) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1900) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:764) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1359) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1316) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.commons.digester.Digester.parse(Digester.java:1745) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239) ... 7 more -------------------------------------------------------------------------- Ich habe schon die JRXML-Datei vor und nach verglichen: Nach dem Abspeichern unterscheiden sie sich in folgender Zeile: -------------------------------------------------------------------------- Vorher: wo es klappt: <!-- Created with iReport - A designer for JasperReports --> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="Termin-Blatt" columnCount="1" printOrder="Vertical" orientation="Portrait" pageWidth="595" pageHeight="842" columnWidth="535" columnSpacing="0" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" whenNoDataType="NoPages" isTitleNewPage="true" isSummaryNewPage="false"> -------------------------------------------------------------------------- Danach, wo es schon nicht klappt: keine DOCTYPE-Zeile, sondern <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Termin-Blatt" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" isTitleNewPage="true"> -------------------------------------------------------------------------- Man kann die JRXML-Dateien natürlich mit einem TextEditor bearbeiten, aber es ist in meinem Fall die Bedinung, dass dafür iReport benutzt werden soll und normale User die Layouts für ihre Reports selbst mit IReport erstellen können. Das Problem existiert schon eine Ewigkeit, so ich das in den Foren verfolgen könnte. Aber auf eine Lösung war ich noch nicht getroffen. Soll man beim iReport irgendeine Einstellung machen oder wie kann man sonst die bearbeiteten JRXML-Dateien wieder zum Laufen zu bringen? Danke für alle, die mir einen Tipp geben können! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
zui2000 Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 Was heißt denn Datei bearbeiten bei dir? Wenn du das XML File per Java abänderst, dann musst du dem benötigtem Parser (sei es SAX, DOM oder sonst was) auch den Doctype (http://jasperreports.sourceforge.net/dtds/jasperreport.dtd) übergeben. Ansonsten nimmt der einen Standardisierten. P.S. das nächste mal Code bitte auch in CODE Tags schreiben, damit die ein lesbares Format haben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Marsanka Geschrieben 9. Juni 2009 Autor Teilen Geschrieben 9. Juni 2009 Hallo, Mit "Datei bearbeiten" meinte ich jrxml-Datei mit iReport inhaltlich ändern. Ich habe das Problem gestern schon geklärt. In iReport 3.5.2 kann man die jrxml-Berichte durch Extras->Optionen->General->Compatibility die entsprechende JasperReport Version einstellen. Dann geht es. Aber diese Möglichkeit gibt's eben erst ab iReport 3.5.2. Trotzdem Danke für den Tipp! Dass Scripte in Tags zu schreiben sind, werde ich mir merken. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.