Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit JasperReport und iReport

Empfohlene Antworten

Veröffentlicht

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!

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.