Bonjour,
Mon objectif est le suivant : Afficher une boite de dialogue de téléchargement d'un fichier (pdf dans notre exemple)
Mon environnement : Joomla, BIRT, PHP & jQuery
Pour résumer, dans mon interface Web je génère un rapport BIRT (résultat au format HTML).
Dans un menu, lorsque je clique sur un bouton "Exporter", je voudrais que l'utilisateur obtienne une fenetre de téléchargement qui lui permettrait de sauvegarder ce fameux rapport au format souhaité (ici PDF)
Mon code jQuery est donc le suivant :
Code javascript : 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 jQuery(document).on("click", "button[name^='export_']", function(event){ var reportType = jQuery(this).attr('name').split('_')[1]; var reportId = jQuery(this).attr('name').split('_')[2]; var exportName = jQuery(this).attr('name').split('_')[3]; exportAttachment(reportType, reportId, exportName); }); function exportAttachment(reportType, reportId, exportName){ var param = {}; var regexp = /(.*)index.php/g; var str = document.URL; var indexUrl = regexp.exec(str)[1]; param.reportType = reportType; param.reportId = reportId; param.exportName = exportName; jQuery.ajax({ type : "POST", url : indexUrl + "birt_export.php", data : param, success : function(response) { console.debug(response); } }); }
Et voici une partie du code PHP pour générer mon rapport BIRT
Je n'ai pas mis tout le code car ce n'est pas le principal.
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 try{ $report = $birtReportEngine->openReportDesign("$myreport"); $task = $birtReportEngine->createRunAndRenderTask($report); $mybirt->setParameter($task); $outputStream = new java("java.io.ByteArrayOutputStream"); $taskOptions->setOutputStream($outputStream); $task->setRenderOption( $taskOptions ); $task->run(); $task->close(); } catch (JavaException $e) { echo $e; } echo $outputStream->toByteArray();
La seule chose utile pour ce sujet est que je vous décrive le résultat :
Au retour de mon javascript, dans la section "success", je visualise mon résultat du echo avec un console.debug. Et mon résultat ressemble à ceci :
Cela est bien un flux PDF. Mais maintenant, je voudrais "mettre ce flux" dans un fichier PDF qui pourra alors être sauvegardé par l'utilisateur à l'aide d'une boite de téléchargement.%PDF-1.5
%����
3 0 obj
<</Length 158/Filter/FlateDecode>>stream
x�}�M�0���9��6��Z�&���a�u+���R(�$��!<�4���V�7�1�09Lm����0d\��u���z��̛=!I��T�rB������~&��"�Cx T2m������T�O�)���YTÀ�2�!>�9���ꈄsK:�g��oB&
endstream
endobj
10 0 obj
<</Names 9 0 R/Type/Catalog/PageMode/UseNone/Pages 4 0 R>>
endobj
11 0 obj
<</Creator(BIRT Report Engine /var/lib/tomcat7/webapps/JavaBridge/WEB-INF/lib/org.eclipse.birt.runtime_4.2.0.v20120613-1143.jar using iText /var/lib/tomcat7/webapps/JavaBridge/WEB-INF/lib/org.eclipse.birt.runtime_4.2.0.v20120613-1143.jar.)/Producer(iText 2.1.7 by 1T3XT)/ModDate(D:20141114125114+01'00')/CreationDate(D:20141114125114+01'00')>>
endobj
5 0 obj
<</Type/ObjStm/N 7/Length 337/First 40/Filter/FlateDecode>>stream
x�eQak�0�+�Q��vڂV�NƆ���J)��MiR��k+s�|��˻��.�0�}��p����x���r���|��u'0��U���b|��l�^T��U�"ײ4����oA�6�͒��l�KKȀ��Nd#�ȶhtS�hHzS�<B �,��b�Z`�3��{���:%�B�Q%s�ʿ�����(��4�t�;��5�3sS_�A��:�}}C�L��t�����4 ��`��^���U��'�r/e��<�OU>�F����ۖ�R99��:��1�����C�5�9�����]�=�C��$�,�k}:����!} �*�u��*]�퐾�Q�@C���m���F
endstream
endobj
12 0 obj
<</Type/XRef/W[1 2 2]/Root 10 0 R/Index[0 13]/ID [<f86c820b09221a5527d75ceeaa5d8a36><4b144d53dca37a5b8a2c30c2d0d4a3f8>]/Length 51/Info 11 0 R/Size 13/Filter/FlateDecode>>stream
x�%ʱ
�w �ĸ,��/TI3� ��ؿd¤⼟^��'
endstream
endobj
startxref
1104
%%EOF
En fait, y a t-il un moyen (en JS ou PHP 'd'encapsuler ce flux dans un fichier') ?
Si une autre méthode existe, n'hésitez pas également à m'en faire part.
En espérant avoir été clair, je vous remercie pour vos réponses
Nikko
Partager