TinyButStrong - the PHP Template Engine
Categories > OpenTBS with PPTX >

[FR] Re: Page breaks on pptx or odp presentations

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs

By: David
Date: 2012-06-14
Time: 17:16

[FR] Re: Page breaks on pptx or odp presentations

Bonjour,

Je me permets de rebondir sur certains propos évoqués sur ce topic.

> Nevertheless, you can merge exactly 30 slides id you know you will have no more, no less.

Vous pouvez expliquer la démarche pour réaliser cela ?

J'ai le code suivant de la démo sur deux slides :
This is a demo of the OpenTBS plugin.
The current document has been generated at [onshow..now;frm=‘yyyy-mm-dd hh:nn:ss’]
PHP version : [onshow..cst.PHP_VERSION] TBS version : [onshow..version]

A la génération du document, des données ont été injectées uniquement dans le premier slide. J'ai du mal à comprendre pourquoi... Si quelqu'un a des éléments de réponse, je suis preneur :-)

Merci d'avance.

Cordialement,

David
By: Skrol29
Date: 2012-06-15
Time: 00:11

Re: [FR] Re: Page breaks on pptx or odp presentations

J'ai déplacé ce sujet dans un autre fil car la langue change.

> A la génération du document, des données ont été injectées uniquement dans le premier slide.
> J'ai du mal à comprendre pourquoi... Si quelqu'un a des éléments de réponse, je suis preneur :-)

Dans les fichiers PPTX, il y a un sous-fichier par slide.
OpenTBS sélectionne automatiquement le premier slide, s'il le trouve. Il s’appelle habituellement "ppt/slides/slide1.xml".

>> Nevertheless, you can merge exactly 30 slides id you know you will have no more, no less.
>Vous pouvez expliquer la démarche pour réaliser cela ?

Il suffit de créer un PPTX avec les 30 slides. Puis on les fusionne en sélectionnant les slide une à une avant de faire le MergeBlock() approprié sur chaque slide.
Pour sélectionner le slide 29 (par exemple) il suffit de faire :
$TBS->LoadTemplate('#ppt/slides/slide29.xml');
By: David
Date: 2012-06-15
Time: 11:38

Re: [FR] Re: Page breaks on pptx or odp presentations

Bonjour,

Merci pour cette réponse ! Cela répond parfaitement à mon interrogation :-)

Avec TbsZip, je vais pouvoir facilement faire le tour de mes slides donc la génération ne devrait pas poser de souci, merci ! ^^


J'ose cependant à nouveau solliciter l'aide des connaisseurs/concepteurs de TBS.

J'aimerais pouvoir afficher diverses données d'un tableau associatif sur différents slides de mon PPTX.

Dans mon test, je fusionne le tableau suivant :
$cinema = array();
$cinema[] = array('titre' => "Avatar", 'sortie' => '2010', 'genre' => 'Science-fiction');
$cinema[] = array('titre' => "Dark Shadows", 'sortie' => '2012', 'genre' => 'Fantastique');
$cinema[] = array('titre' => "Scream 4", 'sortie' => '2011', 'genre' => 'Horreur');
$cinema[] = array('titre' => "Take Shelter", 'sortie' => '2011', 'genre' => 'Drame');
$cinema[] = array('titre' => "The Raid", 'sortie' => '2012', 'genre' => 'Action');
$cinema[] = array('titre' => "La couleur des sentiments", 'sortie' => '2011', 'genre' => 'Drame');
$cinema[] = array('titre' => "Black Swan", 'sortie' => '2011', 'genre' => 'Drame');

N'est-il pas possible de répartir les différents enregistrements de mon tableau sur plusieurs slides ? (sachant que je fusionne mon tableau pour chaque slide)

En PHP, si je veux accéder au titre de mon troisième enregistrement, le code suivant me le permet :
$cinema[2]['titre'];

Y a-t-il un équivalent avec TBS ?_? La syntaxe suivante ne fonctionne pas :
[cinema.2.titre]
TBS ne considère pas 2 comme étant une clef. Mais peut-être y a-t-il une syntaxe qui permet de réaliser le traitement équivalent d'un point de vue logique ?


Pour la petite histoire, dans la mesure où il n'est pas possible d'ajouter des slides dynamiquement avec le format PTTX, j'aimerais définir par avance un nombre maximum de slides quitte à ce que certains ne soient pas remplis. Ensuite, je lance un algo qui nettoie le document pptx généré en supprimant les slides superflus (j'ai du un peu me familiariser avec les standards OpenXML de Microsoft mais ça fonctionne ^^).


Sinon, rien à voir mais serait-il possible d'avoir un exemple de fusion d'image avec PPTX ? Avec ODP, il y a un champ de description qui permet de faire la chose simplement. Je pensais que le texte de remplacement des images d'un PowerPoint permettrait un traitement équivalent mais je me suis trompé...^^ En bidouillant, mon image est parfois importée dans les médias de l'archive mais au mieux, mon fichier devient corrompu :o


Merci de m'avoir lu. Bonne journée.

Cordialement,

David
By: Skrol29
Date: 2012-06-15
Time: 12:07

Re: [FR] Re: Page breaks on pptx or odp presentations

Bonjour,

> N'est-il pas possible de répartir les différents enregistrements de mon tableau sur plusieurs slides ? (sachant que je fusionne mon tableau pour chaque slide)
> En PHP, si je veux accéder au titre de mon troisième enregistrement, le code suivant me le permet : $cinema[2]['titre'];
> Y a-t-il un équivalent avec TBS ?_? La syntaxe suivante ne fonctionne pas : [cinema.2.titre]

Il y a plusieurs façon :

Avec un MergeField() tu fusionnes des données (et ses sous items) sans répétions de bloc.
$TBS->MergeField('cinema', $cinema);
fusionnera bien tes champs tels que :
[cinema.2.titre]

Avec les champs automatiques [onload] ou [onshow], tu peux fusionner n'importe quelle variable PHP globale (et ses sous items).
[onshow.cinema.2.titre]
Mais attention les perf si tu utilise trop de champs automatiques.

>Pour la petite histoire, dans la mesure où il n'est pas possible d'ajouter des slides dynamiquement avec le format PTTX, j'aimerais
> définir par avance un nombre maximum de slides quitte à ce que certains ne soient pas remplis. Ensuite, je lance un algo qui nettoie
> le document pptx généré en supprimant les slides superflus (j'ai du un peu me familiariser avec les standards OpenXML de Microsoft mais ça fonctionne ^^).

Bel effort ! Je suis preneur de ton algo qui retire une slide dans un PPTX.

>Sinon, rien à voir mais serait-il possible d'avoir un exemple de fusion d'image avec PPTX ? Avec ODP,
>il y a un champ de description qui permet de faire la chose simplement. Je pensais que le texte de
> remplacement des images d'un PowerPoint permettrait un traitement équivalent mais je me suis trompé..

Normalement la fonctionnalité "ope=changepic" doit marcher dans les PPTX. La balise TBS doit se trouver après l'image.
Je vais regarder si ça ne fonctionne pas avec PPTX.
By: David
Date: 2012-06-15
Time: 15:56

Re: [FR] Re: Page breaks on pptx or odp presentations

Re-bonjour,

> Avec un MergeField() tu fusionnes des données (et ses sous items) sans répétions de bloc.

Merci, c'est ce que je recherchais ^^

C'est gourmand de faire à la fois des MergeField et des MergeBlock pour les mêmes données ? (j'aurai 'cinema' et 'cinemablock' pour les différencier dans le template) Je développe actuellement une solution qui se veut très générique et j'ai l'impression que pour laisser à l'utilisateur un maximum de latitude lors de la création de son template, il vaudrait mieux lui laisser la possibilité d'user des deux options (et comme je ne peux pas prévoir quand il aura besoin d'une option ou d'une autre, je vais être contraint de faire une "double-fusion" à chaque fois...). Et dans le cas du PPTX, le MergeField me semble incontournable de toute manière...^^

> Mais attention les perf si tu utilise trop de champs automatiques.

Oui, c'était éliminé d'office, d'autant que mes variables ne sont pas globales vu qu'elles sont générées à la volée via des fonctions ^^

> Bel effort ! Je suis preneur de ton algo qui retire une slide dans un PPTX.

Okay, je vais vous envoyer ça par mail alors ^^

Pas dit que ce soit hyper optimisé mais ça marche bien chez moi (je travaille sur de la manipulation de chaînes de caractères... Je ne sais pas s'il aurait été plus judicieux d'utiliser SimpleXML par exemple :o). Le principe est de boucler parmi les slides à la recherche d'un mot clef synonyme de non injection des données. Une fois celui-ci trouvé, je supprime les deux fichiers qui vont bien puis j'édite les fichiers impactés par cette suppression (4 fichiers au minimum, 6 si cela a un impact sur viewProps.xml.rels...). Typiquement, il s'agit de suppression de lignes obsolètes ou de légères mises à jour (le nombre de slides dans le fichier app.xml par exemple).

En entrée de ma fonction, c'est une instance de TBS...^^ Et je précise que je n'ai pas touché à la gestion des notes de slides... Cela pourrait également mériter un nettoyage mais vu qu'une note sans son slide d'origine ne génère pas d'erreur, j'ai préféré ne pas ajouter de traitement supplémentaire.

Par ailleurs, faudra voir à rendre le code plus universel car je doute que la version d'Office 2007 US génère des mots clefs comme "Titres des diapositives" dans app.xml :p


Maintenant, faut que je vois comment intégrer ça par rapport aux traitements réalisés par TBS !

Il y a deux problématiques :
- est-il strictement nécessaire d'avoir fait un Show() avant de pouvoir accéder via TbsZip à l'archive mise à jour ? (dans ce cas, faudrait utiliser un système de fichiers temporaires...)
- comment repérer le mot clef indiquant que le slide est bon pour la poubelle ? Si je mets mon mot clef dans une balise, il est automatiquement nettoyé par "noerr" et si j'enlève "noerr" des tags susceptibles d'appeler des enregistrements qui n'existent pas alors TBS va me renvoyer des erreurs =/ Bref, faudrait un équivalent à "noerr" qui ne fasse pas le ménage :p Peut-être que ça existe ?_? (sinon va falloir faire du reverse engineering sur TBS pour ajouter une espèce d'équivalent à "noerr" pour nettoyer les PPTX)

> Normalement la fonctionnalité "ope=changepic" doit marcher dans les PPTX. La balise TBS doit se trouver après l'image.

Vous me confirmer que ce n'est pas possible d'insérer une image via l'attribut 'descr' des images sous Ms Office ?

Sinon, vu que ça ne marchait pas avec l'attribut 'descr', j'ai effectivement essayé en mettant la balise TBS après l'image mais sans plus de succès... Le fichier devient corrompu et PowerPoint affiche en conséquence un slide vierge.

Edit : le mail part ce soir/dans la nuit lorsque je serai chez moi ^^