Edit me

Introduction

Ce tutoriel vise à expliquer comment afficher des images générées dynamiquement dans un document MailMerge généré à partir d’un modèle de type MsWord (ChampFusion). Il sera décomposé en deux parties :

  1. partie insertion de l’image générée encodée en base64 (côté php) ;
  2. partie affichage de l’image dans le modèle.

Partie 1 : Insertion de l’image générée dynamiquement encodée en base64

Il est avant tout nécessaire de rappeler que dans le cas de génération de document via un modèle de type MSWord, les données sont envoyées au modèle sous forme d’un fichier XML de la forme suivante :

<?xml version="1.0"?>
<Mailing xmlns="http://tempuri.org/XMLSchema.xsd" id="1" batchId="1">
        <Mail id="0">
                <Field name="field_name1" type="field_type1">field_value1</Field>
                <Field name="field_name2" type="field_type2">field_value2</Field>
                <Table name="table_name">
                        <TableRow>
                                <Field name="field_name3" type="field_type3">field_value3</Field>
                                <Field name="field_name4" type="field_type4">field_value4</Field>
                        </TableRow>
                </Table>
        </Mail>
</Mailing>

L’exemple ci-dessus ne contient que des champs texte classique (balises Field avec attributs name et type), ainsi qu’un tableau (balise Table) contenant pour chaque ligne (balise TableRow) des champs texte classiques.

La création du XML de données à transmettre au modèle se fait au niveau PHP dans une classe héritant de la classe NEODEMAT_Library_MailMerge_Mailing via la surcharge de la méthode _getXML.

Supposons que nous ayons généré (ou récupéré) dynamiquement une image côté php à afficher dans notre document MailMerge. L’intégration de l’image devra se faire via la création d’un noeud de la forme suivante :

<Image name="field_name" ext="extension_image">
        Image_encodée_en_base64
</Image>

On aurait alors par exemple côté PHP le code suivant :

class Ma_Classe extends NEODEMAT_Library_MailMerge_Mailing 
{
        public function _getXml()
        {
                // Récupération des données
                

                // Création du XML
                $oNewDataXML = new SimpleXMLElement('<Mailing id="1" batchId="1" xmlns="http://tempuri.org/XMLSchema.xsd"></Mailing>');

                // Noeud Mail
                $oMailNode = $oNewDataXML->addChild('Mail');
                $oMailNode>addAttribute('id', 0);

                // Noeud Image
                $oNewField = $oMailNode>addChild( 'Image', $image_encodee_en_base64 );
                $oNewField->addAttribute( 'name', $field_name );
                $oNewField->addAttribute( 'ext', $image_extension);
		
                return $oNewDataXML;
        }
}

Partie 2 : Affichage de l’image dans le modèle

Côté modèle MSWord, il suffit de créer un champ fusion (cf documentation MailMerge), à ceci près que ce champ se nommera Image:field_name, field_name étant le nom du champ à afficher, pour indiquer lors de la génération que l’on souhaite afficher une image.

Note : L’affichage d’images dans un tableau se fait exactement de la même manière, il suffira juste côté PHP d’encoder toutes les images en base64 et de la inclure dans le XML de la même manière que précédemment, et côté modèle de définir un champ fusion Image:field_name dans le tableau.