Générer un word avec du contenu dynamique + une image

locehen
Invité n'ayant pas de compte PHPfrance

04 janv. 2015, 01:06

Bonjour à tous et bonne année :)

Je me confronte à un petit problème bien chiant pour mes méninges...

Je génère sans problème du pdf (avec fpdf), du xls, du csv mais le word.... à générer un word.docx depuis un template.xml contenant des @variabiable_dynamique@, tout va bien jusqu'à ce que je souhaite y intégrer une image.png...

je capitule cela fait quelques jours que je check... et rien à faire, je me suis aidé de ce site : http://www.lemondedudev.com/2011/06/07/ ... rd-genere/ mais la fonction base64encode bloque...

Aidez moi les coupains :) (je suis preneur si quelqu'un à une autre solution, genre pdf -> word, ou word sans template bref... un truc qui fonctionne :p)


Voici mon bout de code :
$myContent = file_get_contents("MODELE_CCR.xml");
$myContent = str_replace("@DATE@",strftime("%d/%m/%y"),$myContent);
$myContent = str_replace("@ANNEE@","2014",$myContent);
$myContent = str_replace("@DATE_DEBUT@","01/01/2014",$myContent);
$myContent = str_replace("@DATE_FIN@","31/12/2014",$myContent);
$myContent = str_replace("@TOTAL_TICKET@",$total_tickets,$myContent);
$myContent = str_replace("@MOYENNE_MENSUELLE@",$moyenne_ticket_mensuelle,$myContent);
$myContent = str_replace("@DMP@",$moyennedelaiprisecharge,$myContent);
$myContent = str_replace("@DMT@",$moyennedelaitraitement,$myContent);

//CODE QUI FOIREU
/*
$image = '<w:pict>\n';
$image .= '<w:binData w:name="wordml://030001.png" xml:space="preserve">';
$content = file_get_contents("/cheminDeMonImage/monImage.png");
$image .= base64encode($content);
$image .= '\n</w:binData>\n';
$image .= '<v:shape id="_x0000_i1" type="#_x0000_t75" style="width:300pt;height:300pt">\n';
$image .= '<v:imagedata src="wordml://030001.png" o:title="monImage.png"/>';
$image .= '</v:shape>\n</w:pict>\n';

$myContent = str_replace("@GRAPHE@",$image,$myContent);
*/
//FIN DU CODE FOIREU

$newFileHandler = fopen("words/".$nom_societe2."_CCR_".$annee.".docx","a");
fwrite($newFileHandler,$myContent);
fclose($newFileHandler);

Mammouth du PHP | 1339 Messages

04 janv. 2015, 02:33

Tout betement c'est la fonction base64_encode : http://php.net/manual/en/function.base64-encode.php
Mais ca pas marché plus pour autant ...
Donc honnetement, j'ai découvert cette librairie en cherchant et c'est ce que j'ai trouvé de plus simple et d'efficace : http://phpword.codeplex.com/

Le code fait 3 lignes :)
<?php
require_once '../PHPWord.php';
$PHPWord = new PHPWord();
$section = $PHPWord->createSection();
$section->addImage('ephemeris.png', array('width'=>100, 'height'=>100, 'align'=>'right'));
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$objWriter->save('Image.docx');
?>
Bon sinon tu me fais un message privé et on se fait un TeamViewer