manipulation de template dans PHPWord
Je suis à l'aide d'un document word generator pour PHP pour le module de rapports de l'application web que je développe. - Je choisir PHPWord parce que la version gratuite de PHPDocX a des fonctions très limitées et en plus il a un pied de page que c'est seulement une version gratuite. J'ai un modèle fourni par le client. Ce que je veux c'est que je veux charger le modèle et ajouter des éléments dynamiques à elle comme un texte supplémentaire ou de tables. Mon code est ici:
<?php
require_once '../PHPWord.php';
$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('Template.docx');
$document->setValue('Value1', 'Great');
$section = $PHPWord->createSection();
$section->addText('Hello World!');
$section->addTextBreak(2);
$document->setValue('Value2', $section);
$document->save('test.docx');
?>
J'ai essayé de créer une nouvelle section et a tenté de l'attribuer à une variable dans le modèle(Valeur2), mais cette erreur est apparu:
[28-Jan-2013 10:36:37 UTC] PHP Warning: utf8_encode() expects parameter 1 to be string, object given in /Users/admin/localhost/PHPWord_0.6.2_Beta/PHPWord/Template.php on line 99
source d'informationauteur John Micah Fernandez Miguel
Vous devez vous connecter pour publier un commentaire.
setValue attend le second paramètre à une chaîne simple. Il n'est pas possible de fournir un objet de la section.
J'ai plongé dans le code et il n'y a pas un moyen facile d'avoir un objet de la section de retourner une valeur qui pourrait être utilisé par la fonction setValue.
Que j'ai eu le même problème, j'ai écrit un patch pour le Template.php fichier qui vous permet de cloner les lignes de la table avant de remplacer leurs balises avec setValue. Chaque ligne obtient un identifiant unique, vous permettant d'identifier les balises de modèle différent pour chaque ligne.
Voilà comment cela fonctionne:
Ajouter cette fonction à votre Template.php fichier (qui se trouve à l'intérieur de la PHPWord répertoire)
Dans votre fichier de modèle d'ajouter à chaque table une ligne que vous allez utiliser comme modèle à la ligne. Supposons que vous avez ajouté une balise ${prenom} dans cette ligne.
Pour obtenir un tableau avec 3 rangées d'appel:
$document->cloneRow('prenom', 3);
La copie de travail de votre modèle est maintenant mis à jour avec un tableau contenant 3 lignes. Chaque balise à l'intérieur de la ligne a été ajoutée avec un # et le numéro de ligne.
Pour définir vos valeurs, il faut utiliser setValue
$document->setValue ("prenom#1', 'Nom sur la première ligne');
$document->setValue ("prenom#2', 'Nom sur la deuxième ligne');
$document->setValue ("prenom#3', 'Nom sur la troisième ligne');
J'espère que c'est utile! Je vais garder une version mise à jour du code et de la documentation ici: http://jeroen.is/phpword-templates-with-repeating-rows/
Totalement nouvelle version CloneRow et setValue
Maintenant, vous pouvez cloner des cellules fusionnées.
De nombreux bugs avec OOXML balises a été fixé.
Et de la nouvelle méthode setValue - désormais ignorer les poubelles des balises à l'intérieur de votre modèle. Comme
Vous pouvez trouver le code, de la documentation et des exemples ici:
https://github.com/Arisse/PHPWord_CloneRow
Selon la documentation, vous ne pouvez pas ajouter de contenu dans le fichier lorsque vous travaillez avec des modèles.
La Documentation