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.

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;
Jusque là tout se passe bien.

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+"\"";
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;
                    }
     });
Comment puis-je utiliser cela pour pouvoir encoder mes images BIRT au sein de mon php ?

Merci beaucoup d'avance pour vos retours