Bonjour,
Aujourd'hui, à l'aide du javabridge, au sein de mon site web PHP, je fais appel à du code Java afin d'exécuter et d'afficher mon rapport BIRT.
Jusque là tout se passe bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 define ("JAVA_HOSTS", $config->get('java_hosts')); define ("JAVA_SERVLET", $config->get('java_servlet')); require_once(JPATH_BASE . "/" . $config->get('tomcat_path')); $ctx = java_context()->getServletContext(); $birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx); java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook()); try { $report = $birtReportEngine->openReportDesign($myreport); $task = $birtReportEngine->createRunAndRenderTask($report); //Defini les paramètres à envoyer au BIRT UNIQUEMENT S'il y en a if (isset($mybirt->result[0]->parameter_name) && $mybirt->result[0]->parameter_name != "") { $mybirt->setParameter($task); } $taskOptions = new java("org.eclipse.birt.report.engine.api.HTMLRenderOption"); $outputStream = new java("java.io.ByteArrayOutputStream"); $taskOptions->setOutputStream($outputStream); $taskOptions->setOutputFormat("html"); $ih = new java( "org.eclipse.birt.report.engine.api.HTMLServerImageHandler"); $taskOptions->setImageHandler($ih); $taskOptions->setEnableAgentStyleEngine(true); $taskOptions->setBaseImageURL($chemin . "media/com_projid/reports/" . session_id()); $taskOptions->setImageDirectory(JPATH_BASE . "/media/com_projid/reports/" . session_id()); //$taskOptions->setEmbeddable(true); $task->setRenderOption( $taskOptions ); $task->run(); $task->close(); } catch (JavaException $e) { return $e; } return $outputStream;
Maintenant, il se trouve que dans mon rapport BIRT, j'ai des images. Et je voudrais pouvoir encoder ces images (en base64) afin de ne pas avoir d'url d'image dans mon HTML Birt.
Dans mon code ci-dessus, j'ai essayé la méthode setEmbeddable(true), mais ça n'encode pas mes images.
Existe-t-il un moyen ou une méthode simple pour faire cette "encodage" ?
Sinon, au fil de mes recherches, j'ai pu trouver 2 "bout de codes" qui me semblent utiles, mais je ne sais pas comment intégrer cela dans mon code PHP.
Voici les "bouts" de code que j'ai trouvé qui doit permettre d'encoder mes images.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 importPackage(Packages.javax.imageio); importPackage(Packages.java.io); importPackage(Packages.java.net); importPackage(Packages.java.lang); importPackage(Packages.org.apache.commons.codec.binary); importPackage(Packages.java.lang); var myurl = URL("http://tomcat.apache.org/images/tomcat.gif"); var img = ImageIO.read(myurl); bas = new ByteArrayOutputStream(); ImageIO.write(img, "gif", bas); bas.flush(); encodedimga = Base64.encodeBase64(bas.toByteArray()); encodedimg = new String( encodedimga, "utf-8"); bas.close(); imgsrc = "data:image/gif;base64,"+encodedimg+"\"";Comment puis-je utiliser cela pour pouvoir encoder mes images BIRT au sein de mon php ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 options.setImageHandler(new HTMLServerImageHandler() { @Override protected String handleImage(IImage image, Object context, String prefix, boolean needMap) { String embeddedImage = null; byte[] x=null; try { x = IOUtils.toByteArray(image.getImageStream()); } catch (IOException ioe) { logger.severe("Exception occurred: "+ ioe); } embeddedImage = new String(Base64.encode(x)); return "data:image/svg+xml;base64," + embeddedImage; } });
Merci beaucoup d'avance pour vos retours![]()
Partager