• Jeder User im Forum verpflichtet sich zur Akzeptanz und zur Einhaltung dieser Regeln:
    1. Umgangston
      Ein angemessener höflicher Umgangston, ohne Beleidigungen, Beschimpfungen und aggressive Postings ist für jedes Mitglied Pflicht.
    2. Beiträge
      Jedes Mitglied sollte sich bemühen nur sinnvolle Beiträge zum Thema zu posten. Dabei ist unbedingt vorher zu prüfen, ob das Thema vorher schon einmal diskutiert wurde und daher fortgesetzt werden kann
      • Suchfunktion benutzen!
      • offizielle Doku lesen!
    3. Haftung
      Jeder Beitragsersteller übernimmt die alleinige Verantwortung seiner Inhalte.
    4. Werbung
      Wir erlauben keine Beiträge, Signaturen, Private Nachrichten oder eMails an Benutzer, die Werbung enthalten. Ausgenommen
      sind Stellengesuche /-angebote, welche ausschließlich im Forum "Stellengesuche" veröffentlicht werden dürfen.
    5. Verstöße
      Regelwidrige Beiträge sollten dem Team gemeldet werden. Nach deren Überprüfung werden wir schnellstmöglich
      entsprechend handeln.
    6. Authorität
      Den Anweisungen der Team-Mitglieder (Administratoren und Moderatoren) sind in diesem Forum Folge zu leisten.
      Bei Fragen oder Beschwerden bitte an diese wenden.
    Wir möchten Euch darauf aufmerksam machen, dass es bei Verstößen gegen einen oder mehreren der oben genannten
    Punkte dem Team frei steht entsprechend zu handeln. Dies kann z.B. das Löschen eines Beitrags, das Ausschliessen bzw.
    Sperren von Mitgliedern oder aber lediglich eine Verwarnung sein.

    In diesem Zusammenhang sollte erwähnt werden, dass das Forum automatisch die IP-Adresse jedes Beitrag-Erstellers
    speichert. Bei schweren Vergehen, behalten wir es uns vor, die IP-Adresse zur Strafverfolgung weiterzugeben.
  • Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

PHP + JasperReports

joe87

New member
Hi!

Ich hätte mal eine allgemeine Frage, wer hat sich schon öfters mit Reporting in PHP beschäftigt.
Also ich musste das jetzt da die Zend_Pdf Klasse für meine Anforderungen leider nicht ausreichend war. Hintergrund ist folgender: Die Applikation die ich derzeit entwickle, beschäftigt sich mit allen Betrieblichen Prozessen (Rechnungslegung, Zeiterfassung, Angebote, Projekte, Email, etc...). Im Prinzip eine Mischung aus CRM und Groupwarelösung. Nun ist das aber eine Multi Companylösung. D.h. meherer Firmen benützen die ein und die selbe Applikation. (Mein Kunden verkauft die Software an mehrere Firmen weiter).
Jetzt hat sich für mich die Frage gestellt, wie soll ich das möglichst einfach implementieren, dass jeder Kunde von dieser Applikation sein eigenes Design bei den Wochenreports der Zeiterfassung oder den Rechnungen hat. Problem war weiters auch dass ich für jede Designänderungn nicht einen Techniker bzw. einen Programmierer abstellen kann.
Somit kam ich auf die Idee eine Reporting Engine zu verwenden. Dabei kam ich schnell zu den zwei Möglichkeiten. Erstens Crystal Reports (ziemlich teuer), oder JasperReports.
Da ich grundsätzlich den Gedanken verfolge auf OpenSource Lösungen aufzubauen, kam für mich nur JapserReports in Frage. Nur da war schon wieder ein Problem, wie bringe ich die Daten vom PHP Controller (Zend) in die java Umgebung von JasperReports.
Dafür fand ich ziemlich schnell eine Lösung, denn es gibt einen Weg Java Klassen in PHP zu instanzieren und wie gewöhnlichen PHP Code zu betreiben. Nämlich mittels PHP/Java Bridge.

Anschließend hab ich mir noch eine Wrapperklasse für die Funktionalitäten vom JavaCode geschrieben und kann nun ziemlich einfach mittels PHP Reports generieren.
die wesentlichen Vorteile im Überblick:
  • Reporterstellung mittels iReport: Einfache Handhabung
  • Jeder Kunden kann seine REports komplett an seine Wünsche anpassen.
  • Es müssen keine Codeänderungen an der Applikation vorgenommen werden
Jetzt meine Frage an die Community, wie findet ihr diese Lösung? Habt ihr schon Erfahrungen mit solchen Reportinglösungen?

lg jt


ps.: eventuell noch ein paar nützliche Links:
http://php-java-bridge.sourceforge.net/pjb/
http://www.jasperforge.org/jaspersoft/opensource/business_intelligence/jasperreports/
http://jasperforge.org/jaspersoft/opensource/business_intelligence/ireport/
 

christians

New member
Perfekt!

Hallo,

genau das gleiche hatte ich auch vor - das Projekt hatte bisher nicht die Prio das ich mich weiter damit beschäftigt habe.

Aber JasperReports+JavaPHPBridge war auch genau meine Idee.

Würdest Du Deinen Code zur Verfügung stellen?

gruß

Christian
 

thomas_w

New member
Klingt auf jeden Fall interessant.

Meine Frage war immer: Wieviel Java Knowhow ist notwendig, um JasperReports stabil bedienen/betreuen zu können und wie stabil läuft die JavaPHPBridge.

Gibt es da Erfahrungen?

Grüße
Thomas
 

joe87

New member
Hi!

Klar kein Problem, werd euch meinen Code zur Verfügung stellen. Ich werde es noch fertig dokumentieren und ein paar Bugs ausbessern. Sobald das fertig ist werd ich euch den Code zu Verfügung stellen.

Eigentlich brauchst du dazu keine Java Kentnisse. Durch die Bridge kannst du Java Code wie PHP Code ansprechen. (So mach ich das in meinem Wrapper). Außerdem hab ich das so in einen Wrapper gekapselt dass du eigentlich keinen Kontakt mit Java hast.
Einzig den Bridgeserver musst du Starten und das ist eine Zeile.

lg
 

joe87

New member
Version 1.0 BETA

Hi Community!

Ich hab nun die erste Version der JasperPhp Anbindung online gestellt. Hier könnt ihr euch ein Demoprojekt downloaden: http://www.jtec.at/downloads/JasperPhp.rar

Diese Konfiguration ist für Windows erstellt. Zum ausprobieren einfach den Ornder in ein htdocs Verzeichnis geben und die Batchdatei im Verzeichnis JTec\Jasper\java\start.bat auführen. (Diese Starten den BridgeServer)

Danach die example.php ausführen und der Report wird im Verzeichnis output erstellt. Ich habe auch noch einen Screenshot vom Report im IReport Editor hinzugefügt. Mit diesem Editor lässt sich der Report ganz einfach bearbeiten. Für Anfänger empfiehlt sich auf alle Fälle IReport herunterzuladen (http://www.jasperforge.org/jaspersoft/opensource/business_intelligence/ireport/) und ein bisschen mit den Schriftfarben zu experimentieren.

Die Funktionsweise ist ziemlich einfach. Man kann bei JasperReports Parameter und Felder übergeben. Parameter sind Informationen wie Berichtbezeichnung usw. und Felder sind die Datasets. In meiner Beispielanwendung übergeben ich dem Bericht als Parameter das Jahr und Als Felddataset eine Liste (2dim. Array) mit Benutzern die dann im Report angezeigt werden.

Für Anregungen und Beschwerden :) bin ich natürlich gerne offen.

lg
 

christians

New member
Danke für den Code.

Es läuft auch schon fast ;-)

wenn ich die example.php aufrufe kommt folgender Fehler:
Code:
protocol error: , Invalid document end at col 16. Check the back end log for details.
Der Fehler liegt wohl bei diesem Aufruf:
PHP:
$report->setParameters($params);
Hast Du dazu einen Tipp?
Und welches "back end log" soll das sein. Das BridgeLog ist leer, von der JRE kann ich kein Log finden (Windows, jre1.6.0_03)

Gruß

Christian
 

christians

New member
Also, läuft jetzt.

Ich habe bei mir (WinXP, XAMPP) zwei Dinge geändert, seitdem läuft es - an welchem es lag, keine Ahnung :)

1. Die JavaBridge.jar von Hand starten. So fragt die Windows Firewall ob Verbindungen zugelassen werden sollen.
2. Alles jars von iReport kopieren
 
Zuletzt bearbeitet:

joe87

New member
Sry, für die späte Antwort!

die Typischen Probleme sind:
  • Firewall (wie du richtig erkannt hast)
  • Libraries (wie christans bereits geschrieben hat die Libfiles in das ext/lib Verzeichnis vom Java kopieren)
  • Unter Linux hatte ich beim Livetest einige Schwierigkeiten mit der Java Version. (Da hat mir der Server nie die VM von Sun genommen). Mit ein bisschen rumprobieren hat das aber dann auch geklappt.
  • JasperReport Fehler: Die kann man am besten umgehen indem man iReport verwendet, denn da bekommt man sicher guten sauberen XML Code erstellt!
Logfile kann man übrigens als Parameter in der Bridge beim aufruf angeben. Dort werden dann nur die Fehler von der Bridge geloggt. Vorteil darin ist dass man wirklich nur die Java Errors bekommt. Also wenn etwas bei der Applikation nicht richtig läuft tut man sich beim Fehlersuchen leichter, da man gleich ausschließen kann das es von den Reports kommt.
lg jt
 

Rilly

New member
Hallo an alle erstmal,
ich arbeite schon seit längeren mit dem iReport unter Java, jetzt würde ich das gerne auch in einem PHP Projekt umsetzen und habe versucht den super php Beispiel von jeo87 auf meinem win2003 Server zum laufen zu bekommen, leider wirft er mir da eine Exception. Vielleicht weiß jemand was genau ich umkonfigurieren muss, wäre super.
Hier mal die Exception:

Mar 02 12:15:42 VMBridge INFO : VM : 1.5.0_14@http://java.sun.com/
Mar 02 12:15:42 VMBridge INFO : VMBridge version : 5.0.0
Mar 02 12:15:42 VMBridge INFO : logFile :
Mar 02 12:15:42 VMBridge INFO : default logLevel : 3
Mar 02 12:15:42 VMBridge INFO : socket : SERVLET_LOCAL:8080
Mar 02 12:15:42 VMBridge INFO : java.ext.dirs : C:\Programme\Java\jre1.5.0_14\lib\ext
Mar 02 12:15:42 VMBridge INFO : php.java.bridge.base: C:\Dokumente und Einstellungen\Administrator
Mar 02 12:15:42 VMBridge INFO : extra library dir : C:\Dokumente und Einstellungen\Administrator\lib
Mar 02 12:15:42 VMBridge INFO : thread pool size : 20
Mar 02 12:15:42 VMBridge INFO : JavaBridgeRunner started on port INET_LOCAL:8080
java.lang.RuntimeException: java.net.BindException: Address already in use: JVM_Bind
at php.java.bridge.Standalone.init(Standalone.java:191)
at php.java.bridge.Standalone.main(Standalone.java:245)
Caused by: java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at php.java.bridge.TCPServerSocket.newServerSocket(TCPServerSocket.java:62)
at php.java.bridge.TCPServerSocket.<init>(TCPServerSocket.java:83)
at php.java.bridge.TCPServerSocket.create(TCPServerSocket.java:55)
at php.java.bridge.Standalone.bind(Standalone.java:72)
at php.java.bridge.JavaBridge.bind(JavaBridge.java:236)
at php.java.bridge.JavaBridgeRunner.bind(JavaBridgeRunner.java:171)
at php.java.bridge.http.HttpServer.<init>(HttpServer.java:90)
at php.java.bridge.JavaBridgeRunner.<init>(JavaBridgeRunner.java:78)
at php.java.bridge.JavaBridgeRunner.getStandaloneInstance(JavaBridgeRunner.java:132)
at php.java.bridge.JavaBridgeRunner.main(JavaBridgeRunner.java:540)
at php.java.bridge.Standalone.checkServlet(Standalone.java:202)
at php.java.bridge.Standalone.init(Standalone.java:177)
... 1 more

Viele Grüße
Rilly
 

Rilly

New member
Ja standardmässig vom Apache, oder seh ich da was falsch? Kann ich denn die Bridge über einen anderen Port laufen lassen?
 

Rilly

New member
Ich habe den Port jetzt auf 8081 geändert, der Dienst scheint jetzt normal zu laufen, in der jasper.php habe ich den Port auch angepasst, leider funktioniert es trotzdem nicht, beim Aufruf der Seite erscheint folgende Meldung:
protocol error:
HTTP Status 403 -
--------------------------------------------------------------------------------
type Status report
message
description Access to the specified resource () has been forbidden.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.4
. Check the back end log for details.

Hat da jemand eine Idee?
 

case

New member
hm tomcat liegt standart mässig auf port 8080 (weil java ja im spiel ist) ... kommen sich hier tomcat und ireport vieleicht in die quere?
 

Rilly

New member
Also es lag am Tomcat das habe ich jetzt behoben, allerdings scheint er die Klasse nicht zu finden, er bringt an dieser Stelle
$report->setDataSource($data);
folgende Exception. Er scheint da diese nicht zu finden, woran könnte das jetzt noch liegen??
Fatal error: Uncaught [[o:Exception]:"java.lang.Exception: CreateInstance failed: new net.sf.jasperreports.engine.data.JRMapCollectionDataSource([o:ArrayList]). Cause: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.data.JRMapCollectionDataSource Responsible VM: 1.5.0_14@http://java.sun.com/" at: #-14 java.net.URLClassLoader$1.run(Unknown Source) #-13 java.security.AccessController.doPrivileged(Native Method) #-12 java.net.URLClassLoader.findClass(Unknown Source) #0 C:\Inetpub\vhosts\t4m.de\httpdocs\JTec\Jasper\java\Java.inc(259): java_ThrowExceptionProxyFactory->getProxy(10, 'java.lang.Boole...', false) #1 C:\Inetpub\vhosts\t4m.de\httpdocs\JTec\Jasper\java\Java.inc(409): java_Arg->getResult(false) #2 C:\Inetpub\vhosts\t4m.de\httpdocs\JTec\Jasper\java\Java.inc(412): java_Client->getWrappedResult(false) #3 C:\Inetpub\vhosts\tickets-for-me.de\httpdocs\JTec\Jasper\java\Java.inc(594): java_Client->getInternalResult() #4 C:\Inetpub\vhosts\t4m.de\httpdocs\JTec\Jasper\jav in C:\Inetpub\vhosts\t4m.de\httpdocs\JTec\Jasper\java\Java.inc on line 222
 

Rilly

New member
Nach ein paar Anpassungen hat es tatsächlich funktioniert, hübsche Sache.
Danke für die Unterstützung.
 
Zuletzt bearbeitet:

Rilly

New member
Hallo ich hab mal wieder ein kleines Problem und diesmal mit den Umlauten!*gg
Bei übergebenen Parameterfeldern werden keine Umlaute angedruckt, wenn ich aber den Text direkt im ireport schreibe, werden die Umlaute angezeigt, was kann das sein als Codepage ist utf-8 eingestellt, müsste also passen.
Hat da jemand eine Idee?
 
Oben