Erfahrung mit JasperReports

Hey das freut mich. Hab ich gerne gemacht.

Ich hatte auch mal so einen Fall den hab ich folgendedrmaßen gelöst:

Zuerst sollte ein Lieferschein mit allen Details auskommen und unten drunter eine Leergut liste mit allen Details. Das hab ich so gemacht:

auftrag_header
aufpos_header
artikel_header
details
artikel_footer
aufpos_footer
und dann im auftrag footer den subreport eingebaut

subreport:
pageheader
auftrag_header
details
auftrag_footer


das klappt auch ganz prima. Aber gut das du auch ne Lösung gefunden hast. viel Erfolg noch.

Gruß
Chris
 
Hallo Christian,
hallo an alle,

ich habe heute ganz erstaunt festgestellt, dass wieder neue Beiträge zum Jasper-Report gekommen sind. Ich dachte man bekommt immer Nachricht wenn ein neuer Beitrag zu diesem Thema kommt. Ist aber anscheinend nicht so. :-(

Heute habe ich auch mal wieder ein Problem, vielleicht kann mir jemand von Euch weiterhelfen.

Gibt es eine Möglichkeit in Jasper-Report Text und Bild zu verknüpfen?

Bei uns in der Firma müssen Zertifikate ausgedruckt werden, wo einmal die Definitionen zwischen männlichen und weiblichen Teilnehmern anders sind und dahinter soll gleich ein Logo mit dran gehängt werden.


Momentan haben wir jeweils ein Report für die männlichen Teilnehmer und ein Report für die weiblichen Teilnehmer. Es wird dadurch ziemlich unübersichtlich.

Meine Idee war, dass ich eine Variable mache, wo die Anrede abfrägt und da dann wenn dort in der Anrede Herr steht, dann soll er den männlichen Titel + Bild rausgeben ansonsten den weiblichen Titel + Bild.

Aber das geht so nicht. Ich habe es schon mit + und && zwischen den Titel und Bild probiert.

Es wäre toll, wenn jemand von Euch mir weiterhelfen könnte.

Vielen Dank für Eure Mühe.

Viele Grüße

Marita Betz
Das Problem ist ja hauptsächlich das der Titel ein Text ist und das Bild ein Image.
 
Wenn du mit Verknuepfen meinst wie man ein Bild mit JasperReports einfuegt dann kann ich dir helfen....
Du musst einen neuen Parameter anlegen vom Typ jav.lang.Object
Code:
<parameter name="IMGAGE" class="java.lang.Object" />
und dann in deinem Band auf Image casten
Code:
<imageExpression class="java.awt.Image">
<![CDATA[ $P{IMGAGE} ]]> 
</imageExpression>
dann musst du halt in deiner Java Aplikation einen Parameter gennant Image uebergeben
Code:
HashMap map = new HashMap();
Image img = deinImage;
map.put("IMAGE", img);
//und dann die HashMap deinem JasperFillManager uebergeben
ich wuerde das gleiche evt. auch fuer die maennlich/weiblich Geschichte machen, ueber Parameter, dann kann dein Java Programm entscheiden was maenlich/weiblich ist und du uebergibst einfach nur die Parameter
Code:
//im jrmx file
<parameter name="gender" class="java.lang.String" /> 

//in der Java Aplikation
boolean gender = false; //z.b. fuer maenliche Teilnehmer
HashMap parameter = new HashMap();
...
if(gender == true){
parameter.put("gender", "Frau");
}else{
parameter.put("gender", "Herr");
}
JasperFillManager.fillReport("deinReportFile", parameter, deineDataSource());
Ansonsten, kannst du mal nach groovy googeln, das ist eine Scriptsprache fuer JasperReports(oder kann zumindest in JasperReports verwendet werde) damit kenne ich mich jedoch nicht aus, evt. koennte man das ganze auch mit den criplets von JasperReports machen, aber damit habe ich leider auch keine Erfahrung ;(
So ich hoffe ich konnte dir ein wenig weiterhelfen ;)
mfg
elmato
 
Hallo elmato,
hallo an alle,

vielen Dank für Dein Posting.

Dein Ansatz ist interessant, aber ich kann nichts in meine Java-Applikation selbst was eintragen. Wir haben ein fertiges Schulprogramm hier, wo wir zwar Parameter über den Bildschirm eintragen können, aber das wars dann auch schon.
Und das Bild wo mit an den Text hinten angehängt werden soll, liegt auf einem bestimmten Platz, welchen man mit /xxx/yyy/Bild182px_breit.gif" von dort einliest.

Es handelt sich um ein .gif Datei die als Bild hinten angehängt werden soll. Es ist ein Logo.

Das mit dem HashMap map = new HashMap()
Image img = deinImage;
map.put("IMAGE", img);
usw. werde ich wohl nicht machen können.

Ich habe ja nur die Möglichkeit im JasperReport die Daten entweder durch eine SQL-Abfrage aus der Datenbank zu holen oder mittels Variablen kann ich Abfragen machen wo ich dann mit ein wenig Java-Code einfügen kann. Aber ob ich da den obigen Code von Dir einsetzen kann, weiss ich nicht. Bis jetzt habe ich da nur mit sogenannten if Abfragen gearbeitet.

z. B.

<variable name="VonBis" class="java.lang.String" resetType="None" calculation="Nothing">
<variableExpression><![CDATA[$P{paraSeminarPartStartDate}.equals($P{paraSeminarPartEndDate})
?"am " + $P{paraSeminarPartStartDate}
: "vom " + $P{paraSeminarPartStartDate} + " bis " + $P{paraSeminarPartEndDate}]]></variableExpression>
</variable>

Bis jetzt haben wir noch keinen Parameter Image im XML-Code das könnte ich noch einfügen.

Auch das mit dem <imageExpression class="java.awt.Image">
<![CDATA[$P{IMAGE}]]>
</imageExpression>
kann ich ja im XML-Code noch einfügen.

Was mir dabei nicht klar ist, wie bekomme ich dann den Text und das Bild hintereinander und wie kann ich dabei erreichen, dass wenn der Text einige Zeichen länger wird, dann das Bild immer gleich weit weg ist vom Text?

Bis jetzt wurde das Bild genau dahinter positioniert (In x und y wurde genaue Positionsdaten hineingeschrieben). Was aber eben erforderlich machte, das wir für männliche und weibliche Personen jeweils ein extra Zertifikat haben, da die Positionierung des Bildes nicht automatisch sich ändert, wenn der Text davor länger ist.

Oder kann man das irgendwie steuern?

Bis jetzt ist das Bild so eingefügt.

<image scaleImage="FillFrame" vAlign="Top" hAlign="Left" isUsingCache="false" evaluationTime="Now" hyperlinkType="None">
<reportElement mode="Opaque" x="312" y="481" width="15" height="11" forecolor="#000000" backcolor="#FFFFFF" key="image-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/>
<graphicElement stretchType="NoStretch" pen="None" fill="Solid"/>
<imageExpression class="java.lang.String"><![CDATA["/xxx/yyy/Bild182px_breit.gif"]]></imageExpression>
</image>

Es wäre toll, wenn Du mir da noch ein wenig auf die Sprünge helfen könntest.
Ich gebe auch zu, dass ich kein Java-Experte bin, wir hatten hier zwar mal eine Woche Java-Kurs. Aber das ist auch schon wieder eine Weile her und seit dem konnte ich in Java nichts mehr machen. Und ausserdem ist es im Jasper-Report drin doch wieder anders als wenn ich ein reines Java-Programm erstelle.

Vielen Dank für Eure Hilfe.

Viele herzliche Grüße

Marita Betz
 
Oh je, hmm, da bin ich jetzt etwas ueberfragt, aber ich verstehe dich leider auch nicht so wirklich ;)
Was mir dabei nicht klar ist, wie bekomme ich dann den Text und das Bild hintereinander und wie kann ich dabei erreichen, dass wenn der Text einige Zeichen länger wird, dann das Bild immer gleich weit weg ist vom Text?
Was meinst du den genau mit dahinter? So das es aussieht wie ein Wasserzeichen? Vielleicht hast du einen Screenshot von einem fertigen Zertifikat, dann kann ich mir das evt. besser vorstellen. Und den zweiten Teil verstehe ich auch nicht ganz, ist das Bild quasi hinter dem Text(also rechtsbuendig davon)? Soweit ich mich erinnern kann gab es bei JasperReports Optionen wie relativTo, damit ginge das vielleicht, ich mach mich da noch mal schlau und wegen maennlich/weiblich, wenn du abfragen schreiben kannst in der XML dann ist doch alles gut, dann erstellt du dir einen Parameter "Geschlecht" und uebergibst das Geschlecht als Wahrheitswert wenn du deine SQL abfrage machst..
mfg
 
Ich habe auch mal so anbei eine Frage an euch...

Ich habe mir die Beispiele von Jasper durchgesehen.
Kann es sein, das die Samples zum Teil was ganz anderes machen, als man eigentlich erwartet?

Beispiel Subreport, da gibts 2 Subreports, es wird aber beim Füllen nur einer der Subreports angegeben.

Hat sich denn jemand diese Beispiele angesehen?

LG
Thomas
 
Zuletzt bearbeitet:
Nein, die machen schon was sie machen sollen(kannst ja auch selber ausprobieren, die Demos sind bei JasperReports dabei), da bei dem Subreort Sample aber einige Seiten rausgenommen wurden, um Platz zu sparen, kann es gut sein das Ausversehen oder mit Absicht einer der Subreport rausgenommen wurde..
 
Ja ich habs ja ausprobiert, und eben grade das ist, bzw. war das Verwirrende, dass eben der fertige PDF Report eigentlich ein anderer ist, als der der mittels Javacode generiert werden würde...

Aber gut, wenn du meinst es war aus speicherökonomischen Gründen, dann sollte es OK sein.

Finde es aber trotzdem doof wenn jemand samples rausgibt, die sich anders verhalten als sie es im Ergebnis zeigen.

Übrigens geht das eigentlich, dass man verschiedene Datasources für Subreports hat...
Denn aus den Beispielen die ich gesehen habe werden die Subreports am Anfang mit dem JRLoader geladen (die bereits kompilierten ;-) und anschließend die Subreports als parameter übergeben wenn der Hauptreport gefüllt wird. Jedoch beim Füllen gebe ich erst recht wieder nur eine Datasource an, und nicht mehrere...

Gibts da noch was?
Theoretisch könnte man sich ja mit einer eigenen DataSource sich behelfen...
doch ich glaube nicht, dass dies dann besser ist.
 
Zuletzt bearbeitet:
Ich habe es noch nicht ausprobiert, aber soweit ich das im JasperReports Forum lesen konnte geht es, du musst da mal schauen, wie gesagt habe ich es selber noch nicht gemacht...
mfg
 
Hallo Elmato,

jetzt komme ich endlich dazu Dir zu antworten.

>Zitat:
>Was mir dabei nicht klar ist, wie bekomme ich dann den Text und das Bild hintereinander und wie >kann ich dabei erreichen, dass wenn der Text einige Zeichen länger wird, dann das Bild immer >gleich weit weg ist vom Text?

Was meinst du den genau mit dahinter? So das es aussieht wie ein Wasserzeichen?

Nein. Kein Wasserzeichen. Der Text ist nicht auf dem Bild sondern das Bild kommt nach dem Text.

Also "Titel" Bild

>Und den zweiten Teil verstehe ich auch nicht ganz, ist das Bild quasi hinter dem >Text(also >rechtsbuendig davon)?

Ja.

>Soweit ich mich erinnern kann gab es bei JasperReports Optionen wie relativTo, damit ginge das >vielleicht, ich mach mich da noch mal schlau

Was ich gesehen habe, gibt es nur ein RelativeToTop oder ein RelativeToBottom, das heißt man kann nur von oben und unten her was anscheinend relativ machen und nicht von links und rechts.
Oder hast Du noch was anderes gefunden?

Das Problem an der Sache bis jetzt ist das man in Jasper-Reports feste Werte eintragen muss in den Koordinaten für das Bild. Diese sich aber änderen, wenn es sich um eine weibliche oder männliche Person handelt. (Bei weiblichen Personen heisst es z. B. "Teilnehmerin" und bei der männlichen Person "Teilnehmer", danach soll das Logo kommen. Da ich die Werte der Koordinaten der Position des Bildes nicht automatisch anpassen kann, habe ich dann das Problem, welches ich
gerne lösen würde.

>und wegen maennlich/weiblich, wenn du abfragen schreiben kannst in der XML dann ist doch alles >gut, dann erstellt du dir einen Parameter "Geschlecht" und uebergibst das Geschlecht als >Wahrheitswert wenn du deine SQL abfrage machst.

Das automatisch der richtige Titel angezeigt wird, egal ob männlich oder weiblich, das habe ich schon gelöst, das ist einfach. Problem ist, dass das Logo immer den gleichen Abstand zum Text haben soll. Und da liegt der Hund begraben.

Ein Screenshot vom Zertifikat kann ich Dir nicht so einfach machen, wegen Datenschutz.

Aber ich kann Dir ja eine Word-Datei zukommen lassen, wo ich das Problem so nochmal aufzeichnen könnte, wenn Du jetzt immer noch nicht weisst, was ich meine. Dazu müsste ich aber Deine Mail-Adresse wissen, weil hier im Forum kann ich ja keine Anhänge mitsenden, oder?

Vielen Dank für Deine Bemühungen.

Viele Grüße

Marita Betz
 
Zurück