JasperReport - SubReport wird nicht angezeigt

Status
Nicht offen für weitere Antworten.

y0dA

Top Contributor
Hi!
Ich benutze iReport 2.0.5 sowie jasperreports-2.0.4.jar.

Was möchte ich mit JasperReports machen: Es soll ein Report erstellt werden (A) welcher wiederum 1:n Reports (B) enthalten kann. Gedacht habe ich es mir so dass ich im Detailbereich mehr oder weniger über eine Liste von B iterieren lasse - dies soll dann mit einem SubReport realisiert werden.

Mein aktuelles Problem ist jedoch dass ich nicht mal einen einfachen SubReport zusammenbringe, sprich es wird mir kein SubReport angezeigt.

Folgende Vorgehensweise meinerseits:
+) HauptBericht erstellt (nur statischer Text bzw mit Hilfe Von Parametern realisiert) --> A
+) Neuen Bericht erstellt --> B
-) Hierbei (B) habe ich dann die Ränder (oben,unten,links,rechts) auf 0 gesetzt (unter Bearbeiten-->Reporteigenschaften-->Seitenrand).
+)Danach im Hauptbericht (A) einen SubReport im Bereich Detail erstellt und hierbei auf den vorhin angelegten Bericht (B) verwiesen.
+)Daraufhin habe ich den Parameter, welcher den kompilierten SubReport (B) beinhaltet, wie folgt erstellt:
Parametername: BSubReport
Parameter Klassen Typ: net.sf.jasperreports.engine.JasperReport
+) Danach im Hauptbericht(A) auf den SubReport mit der r.M. geklickt und Eigenschaften ausgewählt. Hier dann folgendes eingetragen:
Ergebnisklasse Unterreport: net.sf.jasperreports.engine.JasperReport
Ausdruck für Unterreport: $P{BSubReport}

Weiters übergebe ich hier auch einen Parameter vom Haupt- zum SubReport:
SubReport Parameter Name: DruckParameterObjekt
Ausdruck für Defaultwert: $P{DruckParameterObjekt} --> Diesen Parameter gibt es im HauptReport und wird dort auch benutzt.
+) Danach habe ich im SubReport in mehreren Bereichen (u.a. Detail) versucht die Werte aus DruckParameterObjekt auszulesen, jedoch wird selbst der statische Text im Subreport nicht angezeigt.

Weitere vorgenommene Einstellungen:
+) Im HauptReport: Reporteigenschaften-->Mehr--> Wenn keine Daten: Keine Seiten
+) Im SubReport: Reporteigenschaften-->Mehr--> Alle Abschnitte außer Detail.

Kann mir jemand helfen? Warum sehe ich keinen SubReport :(

Hier noch die relevanten Zeilen aus der Java-Main-Methode:
Code:
                final String hauptReport = "D:\\projects\\agwr2\\AGWR2Config\\config\\drucken\\AdresseDruck.jrxml";
		final String subReport= "D:\\projects\\agwr2\\AGWR2Config\\config\\drucken\\GebaeudeDruck.jrxml";

		ArrayList<IGebaeudeTO> reportData = new ArrayList<IGebaeudeTO>();
		reportData.add(gebaeudeTO);
		JRDataSource ds = new JRBeanCollectionDataSource(reportData);

		InputStream isHaupt = null;
		InputStream isGebaeude = null;

		try {
			isHaupt = JRLoader.getFileInputStream(hauptReport );
			isSub = JRLoader.getFileInputStream(subReport);
		} catch (JRException e1) {
			e1.printStackTrace();
		}

		JasperPrint jasperPrint = null;

		try {
			JasperReport compiledReportGebaeude = JasperCompileManager
					.compileReport(isSub);

			JasperReport compiledReportAdresse = JasperCompileManager
					.compileReport(isHaupt );

			Map<String, Object> reportParameters = new HashMap<String, Object>();
			reportParameters.put("AdresseDruckParameterObjekt", adrTO);
			reportParameters.put("GebaeudeSubReport",
					compiledReportGebaeude);

			jasperPrint = JasperFillManager.fillReport(compiledReportAdresse,
					reportParameters, ds);
		} catch (Exception e) {
			e.printStackTrace();
		}

		JasperViewer.viewReport(jasperPrint);
 

foobar

Top Contributor
Im Template nennst du den Parameter $P{BSubReport} und im Javacode nennst du den Subreportparameter "GebaeudeSubReport". Das kommt mir spanisch vor.
 

y0dA

Top Contributor
Ja weil ich das ganze auf Dummy-Values geändert habe bzw wohl doch nur teilweise.

Mittlerweile habe ich es aber geschafft den SubReport anzuzeigen --> Vorder- und Hintergrund waren im SubReport transparent...

Aber könnten wir vllt nochmal auf mein Hauptproblem zu sprechen kommen, vllt hat ja jemand eine Idee:

Also ich habe eine Liste von Gebäuden und diese hat eine 0:n Beziehung zu einer Adresse - also eine Adresse kann 0 bis n Gebäude haben. Hierfür dachte ich mir dass ich den Detail-Bereich des Hauptreports benutze um die 0 : n Gebäude zu drucken.

Interessant wäre hierbei aber folgendes: Ist es möglich mittels den Javaklassen des JR mehrere Reports nacheinander zu erstellen und bspw in einer Collection halten und am Ende dann alle zammstöpseln und ausdrucken?
 

foobar

Top Contributor
Ja, das geht. Ein JasperPrint ist einfach nur ein Container für eine Liste. Du kannst dir daraus die JasperPages holen und daraus ein neues JasperPrint erstellen.
 

y0dA

Top Contributor
Und bezüglich Seitenzahlen gibts da auch keine Probleme?

Wie kann ich die JasperPrint Objekte mergen? mit iText?

Also bisher mache ich es ja so :
Code:
JasperViewer.viewReport(jasperPrint);
und jasperPrint ist hierbei ein Bericht.

Wie stelle ich das gleiche für mehrere an?
Eben mit iText?
Kannst du mir vllt meine Suche mit Hinweisen verkürzen? bzw eventuell ein kurzes Bsp zeigen? ;)

**EDIT**
Eigentlich dürfte eh alles klar sein - habe deinen Text nicht gscheit gelesen, werde oben genanntes morgen dann testen - danke.
 

foobar

Top Contributor
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperPrint.html#getPages()
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperPrint.html#addPage(net.sf.jasperreports.engine.JRPrintPage)
 

y0dA

Top Contributor
Hi!
Habs gerade wie folgt versucht:

Code:
                //........
                //..........
                InputStream isStrasse = null;
		InputStream isAdresse = null;
				
		try {
			isStrasse = JRLoader.getFileInputStream(strasseDruck);
			isAdresse = JRLoader.getFileInputStream(adresseDruck);
		} catch (JRException e1) {
			e1.printStackTrace();
		}

		Map<String, Object> reportParametersStrasse = new HashMap<String, Object>();
		reportParametersStrasse.put("DruckParameterObjekt", param);

		Map<String, Object> reportParametersAdresse = new HashMap<String, Object>();
		reportParametersAdresse.put("AdresseDruckParameterObjekt", adrTO);
		
		JasperPrint strassePrint = null;
		JasperPrint adressePrint = null;
		
		try {
			JasperReport compiledReportAdresse = JasperCompileManager
			.compileReport(isAdresse);			
			JasperReport compiledReportStrasse = JasperCompileManager
					.compileReport(isStrasse);
			adressePrint = JasperFillManager.fillReport(compiledReportAdresse,
					reportParametersStrasse);
			strassePrint = JasperFillManager.fillReport(compiledReportStrasse,
					reportParametersStrasse);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//JasperViewer.viewReport(adressePrint); hier werden die beiden Berichte noch mit Inhalt angezeigt
		//JasperViewer.viewReport(strassePrint);
		
		List<JRPrintPage> adresseSeiten = adressePrint.getPages();
		List<JRPrintPage> strasseSeiten = strassePrint.getPages();
		
		JasperPrint merged = new JasperPrint();
		for (JRPrintPage page : adresseSeiten) {			
			merged.addPage(page);
		}
		for (JRPrintPage page : strasseSeiten) {
			merged.addPage(page);
		}
		JasperViewer.viewReport(merged);

Das Resultat sollten 2 Seiten sein, auf der ersten Seite der Bericht für Adressen und auf der zweiten für Strassen. Der JasperViewer wird auch geöffnet und ich bekomme 2 Seiten, nur ohne Inhalt - es ist auf den beiden Seiten nur ein kleines Quadrat mit Schatten zu sehen.
 

foobar

Top Contributor
Hmm, sieht soweit korrekt aus. Häng die Seiten der Strasse doch mal an den JasperPrint adresseSeiten an anstatt ein neues JasperPrint Objekt zu erstellen.
 

y0dA

Top Contributor
foobar hat gesagt.:
Häng die Seiten der Strasse doch mal an den JasperPrint adresseSeiten an anstatt ein neues JasperPrint Objekt zu erstellen.

Wie darf ich das verstehen?

Kann es sein, dass die Styles und ähnliches vllt bei meinem "merged" Objekt fehlen?
 

foobar

Top Contributor
Code:
      for (JRPrintPage page : strasseSeiten) 
      {
         adresseSeiten.addPage(page);
      }
      JasperViewer.viewReport(adresseSeiten);
 

y0dA

Top Contributor
foobar hat gesagt.:
Code:
      for (JRPrintPage page : strasseSeiten) 
      {
         adresseSeiten.addPage(page);
      }
      JasperViewer.viewReport(adresseSeiten);

Habe ich schon versucht:
Code:
adresseSeiten.addAll(strassePrint.getPages());

Ich habe mir die Objekte noch angesehen und festgestellt, dass im merged Objekt folgende Einträge von adresse/strasse fehlen:
Code:
originList
stylesList
stylesMap
 

y0dA

Top Contributor
Ok hab das Problem behoben, folgendes macht glücklich:
Code:
merged.setPageHeight(Integer.valueOf(842));
merged.setPageWidth(Integer.valueOf(595));

Das erklärt auch das kleine Quadrat im Bericht bisher, ich hatte einfach keine Höhe/Breite angegeben.

danke für die Hilfe.
 

y0dA

Top Contributor
Was mich nun noch interessiert ist wie ich nun die Seitenzahlen korrekt anzeige. Im Moment wird folgendes angezeigt:

Seite 1 des Berichts = Adresse --> angezeigt wird: Seite 1 von 1
Seite 2 des Berichts = Strasse --> angezeigt wird: Seite 1 von 1

Gibts hier auch eine Möglichkeit dies zu beheben?


Und noch was:

Also mittlerweile sieht mein Code so aus: (ich füge dem adressePrint einfach die Pages von Strasse hinzu):
Code:
InputStream isStrasse = null;
		InputStream isAdresse = null;

		try {
			isStrasse = JRLoader.getFileInputStream(strasseDruck);
			isAdresse = JRLoader.getFileInputStream(adresseDruck);
		} catch (JRException e1) {
			e1.printStackTrace();
		}

		Map<String, Object> reportParametersStrasse = new HashMap<String, Object>();
		reportParametersStrasse.put("DruckParameterObjekt", param);

		Map<String, Object> reportParametersAdresse = new HashMap<String, Object>();
		reportParametersAdresse.put("AdresseDruckParameterObjekt", adrTO);

		JasperPrint strassePrint = null;
		JasperPrint adressePrint = null;

		try {
			JasperReport compiledReportAdresse = JasperCompileManager
					.compileReport(isAdresse);
			JasperReport compiledReportStrasse = JasperCompileManager
					.compileReport(isStrasse);
			adressePrint = JasperFillManager.fillReport(compiledReportAdresse,
					reportParametersStrasse);
			strassePrint = JasperFillManager.fillReport(compiledReportStrasse,
					reportParametersStrasse);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		List<JRPrintPage> strasseSeiten = strassePrint.getPages();
		for (JRPrintPage page : strasseSeiten) {
			adressePrint.addPage(page);
		}

Hierbei würde mich dann noch interessieren wie ich bspw mit den JROrigin Werten von Strasse umgehen soll, sprich ob ich die auch im adressePring benötige oder nicht. Leider habe ich keine Vorstellung für die JROrigin Objekte stehen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JasperReport Hintergrundfarbe wertabhängig ändern Allgemeine Java-Themen 3
H JasperReport: Parameter befüllen Allgemeine Java-Themen 7
J Swing Frame schließt ganzes Programm(Jasperreport) Allgemeine Java-Themen 6
N JasperReport FileNotFoundException Allgemeine Java-Themen 4
R JasperReport bleibt leer Allgemeine Java-Themen 3
R JasperReport Allgemeine Java-Themen 2
Y JasperReport - Seitennummern Problem Allgemeine Java-Themen 9
Y JasperReport - PDF sofort anzeigen Allgemeine Java-Themen 4
A JasperReport Detail bringt null bei Datenübergabe Allgemeine Java-Themen 4
J Jasper Reports - Subreport zur Laufzeit ändern Allgemeine Java-Themen 6
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Y MVVM wie wird Eventhandler tausch geregelt Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
N Datentypen If-Statement wird "übersprungen" Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Java wird nicht gefunden Allgemeine Java-Themen 32
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
O Programm wird einfach "gekillt" Allgemeine Java-Themen 3
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
B Abfragenteil wird nicht aufgerufen Allgemeine Java-Themen 2
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
T Sicherheitshinweis - Zertifikat wird angefordert Allgemeine Java-Themen 5
L SetBounds wird vor dem Konstruktorcode aufgerufen - Wenn Startleiste links Allgemeine Java-Themen 1
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
G Tabelle wird nicht richtig dargestellt Allgemeine Java-Themen 9
HarleyDavidson Threads ProgressMonitor wird nicht angezeigt! Allgemeine Java-Themen 6
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
A Long variable wird negativ??? Allgemeine Java-Themen 1
J CSV Datei wird ungewollt umformatiert Allgemeine Java-Themen 5
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
E Java Editor Klasse wird nicht weiter ausgeführt Allgemeine Java-Themen 4
S Java Applet wird dauerhaft blockiert Allgemeine Java-Themen 1
I Datei wird nicht richtig gelöscht Allgemeine Java-Themen 7
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
D ActionListener wird mit jedem Mal öfter aufgerufen Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
A Threads Log4J Logger wird "überschrieben" Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben