Erfahrung mit JasperReports

uepselon

Grünschnabel
Hallo,

hat von euch jemand Erfahrung mit JasperReports?

Ich hab ein "kleines" Problem finde aber irgendwie keine Lösung. Also für den Fall das sich jemand auskennt: (Verwnede zum designen iReport)

Ich hab auf meinem Detail Band ein Textfeld mit fester Länge. Der Inhalt kann jedoch auch länger sein als die fixe Länge. Nun wird der Text abgeschnitten wenn er zu lang ist.

Mach ich das Textfeld in der Höhe auf ca. 2 Zeilen, wird der zu lange Text in der 2 ten Zeile dargestellt. Soweit ist das auch gut. Nur wird bei kurzen Texten die 2te Zeile auch gedruckt (Leerzeile) was sehr unschön aussieht und ne Menge Platz kostet.

Wie kann ich also, bei Bedarf das Textfeld 2 Zeilig machen und wenn kein Bedarf ist alles einzeilig lassen?

Hoffe Ihr könnt damit was anfangen.

Gruß,
ueps
 
Re: Erfahrungen mit JasperReports

Erfahrung mit JasperReports

Hallo ueps,

>hat von euch jemand Erfahrung mit JasperReports?

Ja,

>Ich hab ein "kleines" Problem finde aber irgendwie keine Lösung. Also für den Fall das >sich jemand auskennt: (Verwnede zum designen iReport)

Dieses Programm verwenden wir auch in der Arbeit.

>Ich hab auf meinem Detail Band ein Textfeld mit fester Länge. Der Inhalt kann jedoch >auch länger sein als die fixe Länge. Nun wird der Text abgeschnitten wenn er zu lang ist.

>Mach ich das Textfeld in der Höhe auf ca. 2 Zeilen, wird der zu lange Text in der 2 ten >Zeile dargestellt. Soweit ist das auch gut. Nur wird bei kurzen Texten die 2te Zeile auch >gedruckt (Leerzeile) was sehr unschön aussieht und ne Menge Platz kostet.

>Wie kann ich also, bei Bedarf das Textfeld 2 Zeilig machen und wenn kein Bedarf ist >alles einzeilig lassen?

Du musst bei den einzelnen Felder wo dies auftritt markieren und da wo die Karteireiter sind nach dem Begriff Strech with Overflow suchen. Davor ist ein Kästchen und da muss ein Häckchen rein. Dann wird der Text automatisch umgebrochen, wenn das Feld zu kurz ist.

Ich hoffe das hilft Dir bei Deinem Problem weiter.

Viele Grüße

Marita Betz
 
Parameterabfrage

Moin zusammen.

Bin ja mal froh noch ein paar Leute zu treffen die Jaspperreports mit iReport erstellen (müssen) :rolleyes: ;)

Also ich hab das Problem, dass ich eine Parameterübergabe für z.B. einen Zeitraum von bis einstellen muss. Allgemeine einzelne Parameter (z.B. Lieferscheinnr, Kunde, etc) kann ich innerhalb unserer Java-Anwendung so übergeben, weil das nur ein Datensatz ist. Allerdings müsste ich für die Datenabfrage zum Beispiel eine Parameter-Eingabeaufforderung haben, weil diese Daten nicht im Dialog zu übergeben sind.

Ich habe vorher mit Crystal Reports gearbeitet, und da konnte man eine einfache Parameterabfrage einfach so einstellen. Ist das bei Jasper auch möglich, oder muss ich dafür ein eigenes kleines Java-Programm schreiben?

Wäre nett, wenn ihr euer Wissen diesbezüglich mit mir teilen würdet ;)

Vielen Dank. Gruß Chris

PS: Gibt es eigentlich ein deutsches Forum, das sich intensiver mit Jasper beschäftigt? Oder gibt es sonst eine Möglichkeit Fragen beantwortet zu bekommen oder sich immer über den neuesten Stand zu informieren?
 
Hallo Chris,


>Bin ja mal froh noch ein paar Leute zu treffen die Jaspperreports mit iReport >erstellen (müssen)

Geht mir ebenso.

Also ich hab das Problem, dass ich eine Parameterübergabe für z.B. einen Zeitraum von bis einstellen muss. Allgemeine einzelne Parameter (z.B. Lieferscheinnr, Kunde, etc) kann ich innerhalb unserer Java-Anwendung so übergeben, weil das nur ein Datensatz ist. Allerdings müsste ich für die Datenabfrage zum Beispiel eine Parameter-Eingabeaufforderung haben, weil diese Daten nicht im Dialog zu übergeben sind.

Ich weiss jetzt nicht genau, ob ich Dir helfen kann, wills aber mal versuchen.

Arbeitest Du mit einer Datenbank? Mit SQL?

Wir ziehen unsere Daten z. B. für Listen aus der Datenbank mittels SQL und wenn wir Parameterwerte haben, also das z.B. unsere Leute dieses von - bis eingeben können sollen, dann wird in der SQL-Query glaub ich mit
?<$P{Feldname}> geschrieben. (Wobei ich jetzt gerade nicht sicher weiss, ob die spitzen Klammern wirklich dabei sind oder nicht, da ich gerade nicht in der Arbeit bin, wo ich die Unterlagen habe.)

Dann erscheint in unserem Programm ein leeres Feld wo man dann den Wert eintragen kann. Im IReport muss natürlich dieser Parameter auch definiert werden unter Parameters. Und ein Feld im Report eingerichtet werden, wo die Eingabe von diesem Feld erscheinen soll z. B. in der Liste.

Für unsere Serienbriefe haben wir von der Firma wo das Programm gemacht hat Parameter vorgegeben bekommen, z. B. für die Anrede, wenn ich diese dann in mein XML-File in die CDATA-Section mit z. B. $P{Feldname} einsetze kommt automatisch der richtige Wert rein. Aber wie das genau gemacht ist, kann ich Dir leider noch nicht sagen. Wir hoffen auch, das wir das mal gezeigt bekommen, weil uns öfter gerade bei den Serienbriefen noch Parameter fehlen, die wir momentan nicht selbst erzeugen können.

Ich habe vorher mit Crystal Reports gearbeitet, und da konnte man eine einfache Parameterabfrage einfach so einstellen. Ist das bei Jasper auch möglich, oder muss ich dafür ein eigenes kleines Java-Programm schreiben?

Siehe oben, wenn Du damit nicht weiterkommst, kann ich Dir momentan auch nicht weiterhelfen. Vielleicht wäre es hilfreich Du würdest mal schreiben ob Du auf eine Datenbank zugreifst oder sonst wie an Deine Daten kommst.


PS: Gibt es eigentlich ein deutsches Forum, das sich intensiver mit Jasper beschäftigt? Oder gibt es sonst eine Möglichkeit Fragen beantwortet zu bekommen oder sich immer über den neuesten Stand zu informieren?

Ein deutsches Forum habe ich leider auch noch nicht gefunden. Daran wäre ich auch interessiert.

Es gibt aber ein englischsprachiges Forums unter

http://sourceforge.net/forum/?group_id=36382

Viele Glück.

Viele Grüße

Marita Betz
 
Morgen Maria,

also erstmal schonmal vielen Dank für die vielen Tips :)
Ich benutze hier auf der Arbeit auch SQL-Anweisungen, um unsere Daten aus der Datenbank (Informix 7) für die Reports zu beschaffen.

Wie schon gesagt funktioniert die normale Parameterübergabe ganz einfach indem ich halt im Report ein Parameterfeld definiere und das dann mit $P{Feldname} dann ins SQL-Statement einbaue. Dann kann ch auch aus der Anwendung heraus den Report ausführen, wenn ich im Dialog auch nohmal eine Feldzuweisung mache.

Wenn ich allerdings im Report anstatt $P{Feldname} ?<$P{Feldname}> oder ?$P{Feldname} eingebe, dann erscheint in der Anwendung beim starten des Reports eine Fehlermeldung, dass der das SQL-Statement nicht ausführen kann. Und da, wo ich die Parameterübergabe im Statement geschrieben habe steht dann je nachdem entweder be_nr=?<?> oder be_nr = . Muss ich da sonst noch was beachten vielleicht?

Das Forum bei Sourceforge hab ich auch gefunden, nur hab ich meistens keine Lust mich da auf englisch durchzuwurschteln ;)
Aber ich werd mich melden, wenn ich eins auf deutsch gefunden hab.

Ich werd mal ein bisschen weiter experimentieren hier. Falls dir noch was einfällt, wäre es nett, wenn du nochmal was dazu sagen köntest.

Vielen Dank und einen wunderschönen Tag noch.

Gruß Chris
 
noch ne Frage, die grade aufgekommen ist, wäre, ob man irgendwie noch mehr Schriftarten in den "pdf font name" einfügen kann. Oder gehen im pdf-Format Schriftarten wie z.B. Arial gar nicht?
 
Hey Chris,

ich bin jetzt in der Arbeit und habe mir mal ein SQL-Statement von uns rausgesucht.

Wir haben dort manchmal z. B. so einen Text drin:

where sp.partNumber = '$P!{Seminarteil}' das ist die Abfrage wo der Benutzer den Seminarteil eingeben kann in unserer Anwendung. Das was ich gestern geschrieben habe, war anscheinend nicht ganz richtig. Im ireport ist dann noch ein Parameter definiert der Seminarteil heißt.

Das Forum bei Sourceforge hab ich auch gefunden, nur hab ich meistens keine Lust mich da auf englisch durchzuwurschteln

Kann ich verstehen ;-) Geht mir genauso.

Aber ich werd mich melden, wenn ich eins auf deutsch gefunden hab.

Das wäre nett.

Ich werd mal ein bisschen weiter experimentieren hier. Falls dir noch was einfällt, wäre es nett, wenn du nochmal was dazu sagen köntest.

Zu Deiner anderen Frage wegen den Fonts für die PDF-Datei. Du kannst doch im Ireport wenn du das Feld doppelt anklickst unter dem Reiter Fonts -> PDF Font Name noch andere als Helvetica auswählen. Allerdings Arial ist nicht dabei, da gebe ich Dir recht, aber Courier usw.

Vielleicht kannst Du mir auch bei einem Problem weiterhelfen.

Ich will mal versuchen es zu beschreiben.

Wir haben eine Tabelle Berufschulblock, da sind pro Berufsschule mehrere Klassen drin und innerhalb der Klasse sind unterschiedlich viele Blockzeiten dort beinhaltet.

Ich habe den Report unter Ireport jetzt schon soweit, das er als erstes die Berufschul-Nr und die Klasse bringt.
Darunter die Blockzeiten hintereinander, aber wenn ich z. B. 6 Colums gemacht habe und bei der Klasse sind z. B. nur 4 Blockzeiten drin, so werden die übrigen Spalten einfach mit Blockzeiten der nächsten Klasse aufgefüllt, was ich ja nicht haben möchte.

Ich möchte bei jeder Klasse die Blockzeiten hintereinander haben und wenn eine neue Klasse kommt, dann soll er mir die Berufsschul-Nr und die Klasse oberhalb der Blockzeiten wieder angeben und die dazugehörenden Blockzeiten darunter.

Ich habe schon rumprobiert und habe zwei Gruppen mit BerufschulId und Klasse angelegt und dort auch schon verschiedene Einstellungen durchprobiert, aber ich bekomme es einfach nicht hin.

Hattest Du auch schon mal so ein Problem? Wie kann man das lösen?

Viele Grüße

Marita Betz
 
Ja, also so ein Problem hatte ich noch nicht...
Warum hast du denn 6 Columns eingebaut? Eigentlich müsste es doch reichen, die zwei Gruppen (Berufsschule, Klasse) zu definieren, und dann in die Details das Feld mit den Zeiten einzufügen...
Dann dürften nur die Blockzeiten zu einer Klasse rauskommen. Ich weiß nicht genau ob das verständlich genug geschrieben war von mir ;)
Verstehst du denn was ich meine?
 
Hey,

>Ja, also so ein Problem hatte ich noch nicht...
>Warum hast du denn 6 Columns eingebaut? Eigentlich müsste es doch reichen, >die zwei Gruppen (Berufsschule, Klasse) zu definieren, und dann in die >Details das Feld mit den Zeiten einzufügen...
>Dann dürften nur die Blockzeiten zu einer Klasse rauskommen. Ich weiß nicht >genau ob das verständlich genug geschrieben war von mir
>Verstehst du denn was ich meine?

Ich habe es jetzt mal versucht, wie Du das geschrieben hast, aber dann kommen die Blockzeiten (je nach Klasse können das bis zu 10 sein) untereinander und nicht nebeneinander. Inzwischen kommen aber die Blockzeiten durch das Einfügen der coloums in den Report-Properties nebeneinander und das obwohl ich nur eimal in der ersten coloum das Feld Blockzeit stehen habe. Auf jeder Seite wird mir darüber zusätzlich noch die Berufsschule und die Klasse angezeigt.

Hast Du schon mal was mit subreports zu tun? Da bin ich jetzt gerade dran.

Ich habe jetzt mal in einen Hauptreport einen subreport eingefügt, aber wenn ich dann den Hauptreport aufrufe (mit dem eigefügten subreport), dann kommen keine Daten raus, beim subreport. Es erscheint zwar der Platz wo die Daten stehen sollten, aber sonst nichts. Irgendwie hängt das noch mit der Parameterübergabe zwischen Hauptreport und subreport zusammen, aber das habe ich noch nicht rausbekommen.

Wie sind Deine Erfahrungen damit. Es ist schade, dass nicht noch mehr mitdiskutieren.

Viele Grüße

Marita
 
Hey,
freut mich das du das mit den Blckzeiten hinbekommen hast. Ich schreibe normalerweise immer alle Details untereinander, deshalb wusste ich dass nicht genau zu beantworten ;)

Also die Subreports sind schon ein harter Brocken. Aber ich habe schon ein paar in Benutzung. Also um die Unterberichte aus ireports aus zu starten, musst du folgendes beachten:

1. steht in der Subreport Expression in den Properies im eingebundenen Subreport der Name des Subreports in "". Also z.B. "leergut_subartikel_s.jasper"

2. musst du die Datei startup.bat, die du immer öffnest (liegt bei mir unter D:\Programme\iReports\noAnt\startup.bat), mit nem Editor öffnen. Also z.B. rechte Taste da drauf, und dann auf "Bearbeiten" klicken. Da steht dann irgendwie sowas drinne:

@echo off
cd ..

set CLASSPATH=%CLASSPATH%;.\classes\
rem Add all jars....
for %%i in (".\lib\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\lib\*.zip") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.zip") do call ".\noAnt\cpappend.bat" %%i

java it.businesslogic.ireport.gui.MainFrame

Danach musst du dazwischen den Classpath setzen, also einen Pfad angeben, indem dein Subreport dann liegen muss. Ich habe bei mir zwei verschiedene angegeben, weil ich mehrere Subreports in mehreren Ordnern liegen habe. Also sieht das bei mir dann so aus:

@echo off
cd ..

set CLASSPATH=%CLASSPATH%;.\classes\
rem Add all jars....
for %%i in (".\lib\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\lib\*.zip") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.jar") do call ".\noAnt\cpappend.bat" %%i
for %%i in (".\db_drivers\*.zip") do call ".\noAnt\cpappend.bat" %%i
set CLASSPATH=%CLASSPATH%;E:\datacon-13000\projekte\dtc-reports-jasper\entwicklung\Datacon
set CLASSPATH=%CLASSPATH%;E:\datacon-13000\projekte\dtc-reports-jasper\entwicklung\Martens\Bestellung


java it.businesslogic.ireport.gui.MainFrame

versuch das dann mal zu starten. Vielleicht klappt das dann direkt schon.

Um das dann in der Anwendung starten zu können, musst du mit eurem Programmierer reden, dass der auch in die Anwendung so einen Classpath reinbaut, zu einem Ordner auf dem Server z.B., in den ihr dann immer die Subreports alle reinlegt. Ich hoffe ich konnte di ein wenig helfen :)
 
Zurück