Zum Inhalt springen

Problem mit JasperReport und iReport


Marsanka

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...