

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
1 message in org.openoffice.fr.prog[prog] Impress export animation vers ...| From | Sent On | Attachments |
|---|---|---|
| JeanPansu | Feb 12, 2005 3:07 pm |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | [prog] Impress export animation vers html | Actions... |
|---|---|---|
| From: | JeanPansu (jean...@wanadoo.fr) | |
| Date: | Feb 12, 2005 3:07:45 pm | |
| List: | org.openoffice.fr.prog | |
Bonjour,
Agnès Simonet m'a proposé d'envoyer la macro suivante à Sophie Gautier pour voir
si elle pouvait en intéresser d'autres. Dans l'état actuel elle me semble encore
un peu simpliste. Vous trouverez ci-dessous ces limites et quelques
améliorations que je pense faire dans un "certain" temps.
Comme je ne sais pas la procédure adéquate, j'envoie la macro dans ce courriel,
à la fin de mes remarques.
Contexte:
Je travaille à Météo-France comme prévisionniste. La suite bureautique utilisée
est à 98% MSOffice avec des versions diverses sous windows. Cependant Openoffice
a été choisi officiellement dans un projet interne par une de nos équipes de
développeurs il y a un an environ mais est encore très peu connu dans
l'établissement.
L'utilisation principale par les collègues de suite bureautique est le
traitement de texte ou le tableur pour des manipulations simples et surtout
powerpoint pour des diaporamas contenant de nombreuses animations en gif
provenant de copie d'écran de nos stations de travail.
Je participe à la "capitalisation des savoirs" de prévisionnistes par la mise en
commun d'exposés issus de ces diaporamas sur notre site intranet.
L'export de presentations vers html n'est pas très satisfaisant pour l'instant
sur au moins 2 points:
- pas d'export des animations vers les pages html
- qualité des images en html très dégradée (pour nos besoins en tout cas)
Je dois à terme transférer un bon nombre de diaporamas d'où l'intérêt d'une
automatisation de la chose
J'ai donc fait mes premiers pas en programmation mais je suis débutant et l'API
m'est très ténébreux.
Principe
1) On récupère pour chaque diapositive de la présentation les objets présents
les uns après les autres.
2) On considère que toute image d'une taille supérieure à Taille_image
correspond à une image faisant partie d'une animation
3) On exporte ses images dans un répertoire créé, fils du répertoire de
l'utilisateur nommé "gifs"
4) On créé des animations avec l'ensemble des images correspondant au test pour
chaque diapo avec le logiciel libre ImageMagick (cf. site Framasoft) via des
lignes de commande dans le fichier anim_gif.bat qui remplacent les images
correspondantes des pages html créées auparavant lors d'un export manuel de la
presentation
Installation:
Il faut en tant qu'administrateur:
- installer openoffice en multi-usager avec dictionnaire français
- installer ImageMagick
- créer un fichier bat avec un texte quelconque nommé anim_gif.bat (l'usager n'a
pas le droit de création d'un fichier sur ce répertoire en général)
En tant qu'usager, installer une version client d'openoffice
Limites notées à ce jour
1) On supprime actuellement les objets comme les boutons, les flêches lors de
superposition dans le diaporama
2) Pas d'accès simple pour l'utilisateur pour choisir la taille minimale
correspondant aux images d'animation, ni le pas de temps de l'animation
3) Les animations créées sont de bonne qualité et d'un bon dimensionnement mais
trop volumineuses en « poids » (taille des fichiers).
4) Lors d'une animation, il y a apparemment création de 2 pages html avec la
1ère ne contenant qu'une page de garde, l'autre identique qui s'anime après un
temps de chargement assez long (ce qui est énervant).
Améliorations prévues
Création d'une boite de dialogue rassemblant répertoire de base, nom du fichier,
choix du pas de temps, qualité DPI et taille minimale d'animation (point 2).
[Ca, je vois comment faire]
Amélioration d'analyse de l'occurence d'animation:
Cas 1: Si 2 images de taille supérieure au seuil et de tailles identiques sont
présentes, on considère qu'il y a animation.
Cas2: Sinon si il existe plusieurs « images » c'est à dire image + flèches... on
créé une animation en se basant sur l'image la plus grande et on « anime » les
différents objets (on pense être dans le cas d'une image à laquelle on superpose
une flèche puis du texte par exemple)
Cas3: Si il n'y a pas d'image, on laisse comme tel (présence de zones textes
uniquement) (point 1)
[Je pense créer un tableau qui pour chaque diapo liste les objets les uns
après les autres, leur taille et position:
pour les images, pas de problème a priori, pour ce qui est des zones de
textes, récupérer leur dimension et les
transformer en gif pour pouvoir les traiter avec ImageMagik je ne vois pas
trop pour l'instant]
En cas de discernement d'animation, on incruste sur l'image de la première page
html correspondante un texte de type: « Animation page suivante » via
ImageMagik (point 4)
[Ca, je vois comment faire]
Réduction de la qualité des images à 96DPI par défaut via openoffice ou
ImageMagick pour limiter la taille des fichiers réalisés et donc le temps
d'accès.
[Ca, la macro Resizebydpi en annexe du livre de B.Marcelly avec la
contribution de L.Godard doit marcher mais
je ne suis pas sûr que l'export en gif conserve cette modification de
définition de DPI]
[Enfin, j'aimerais avoir la possibilité de programmer l'export en html via
un modèle donné et je ne sais pas trop comment faire]
Option explicit '************* version du 10/02/05
Private Taille_image As Integer 'Taille minimale d'image qu'on considère
correspondre aux animations de la présentation
Private Adresse_convert as String
Sub Export_impress_anim
'************* DECLARATIONS
Dim MonDocument As Object, UnePage As Object, lesPages As Object, MonObjet As
Object
Dim AdresseDoc As String, Repertoire_base as String, Fichier_import as String
Dim Adresse_export as String, Fichier_export as String
Dim info_user as String 'pour message d'erreur
Dim serv as Object, avance As Object 'avance sert comme indice de progression
Dim params(1) as New com.sun.star.beans.PropertyValue
Dim PropFich2(0) as New com.sun.star.beans.PropertyValue
Dim PropFich()
Dim i as Integer,j as Integer, rang_page as Integer, nb_image as Integer,
selection as Integer
' Pour le lancement du convertisseur d'image ImageMagick
Dim commande_convertisseur as String, commande_convertisseur_ligne(10) as
String, nettoyage as String
Dim Taille_anim as integer, Pas_de_temps_anim as Integer, max_diapo as Integer
' Sources utilisées:
' OOo_API_intro-06.sxw, excellent document pour l'initiation à la programmation
pour débutants
' Programmation OpenOffice.org Macros OOoBASIC et API de B.Marcelly avec la
contribution de L.Godard - Editions Eyrolles
' Les références de pages correspondent à ce dernier livre bien pratique et
complémentaire au précédent document
' Pour plus d'info sur le contenu de ces macros:
' courriel perso: jean...@wanadoo.fr professionnel: jean...@meteo.fr
' Principe de la macro:
' 1) On récupère pour chaque diapo de la présentation les objets présents les
uns après les autres
' 2) On considère que toute image d'une taille supérieure à Taille_image
correspond à une animation
' 3) On exporte ses images dans un répertoire créé, fils du répertoire de
l'utilisateu,r nommé "gifs"
' 4) On créé des animations avec l'ensemble des images correspondant au test
pour chaque diapo avec
' le logiciel libre ImageMagick (cf. site Framasoft) via des lignes de commande
dans le fichier anim_gif.bat
serv = CreateUnoService("com.sun.star.drawing.GraphicExportFilter") 'P.415
Exporter une forme
'************* INITIALISATION DES VARIABLES
Fichier_import = "neige.sxi"
Repertoire_base = "C:/DIRSE/transfert"
Taille_image = 800 'en pixels
Taille_image = Taille_image - 1
Pas_de_temps_anim = 200 'en 1/100 secondes
Taille_anim = 1000 'en pixel
commande_convertisseur = "convert -delay " & Pas_de_temps_anim & " -loop 0
-resize " &_
Taille_anim & "x" & Taille_anim & " "
Adresse_convert = convertToURL("C:\Program Files\ImageMagick6.1.7\anim_gif.bat")
'************* CHOIX ET OUVERTURE DU FICHIER
' choix du répertoire
info_user = "Le répertoire par défaut est: " & Repertoire_base & chr(13) &
"Voulez vous en changer?"
if MsgBox(info_user,292,"Nom du répertoire")=6 then '4+32+256 cf. page 126
Repertoire_base = InputBox("Donner le nom du répertoire sur lequel se trouve la
présentation : "& chr(13) &_
"(à partir de la racine (C, D...) sans / au bout)")
' Création d'un dossier (répertoire) contenant les images qui seront prises en
compte pour les gif animés
Adresse_export = convertToURL(Repertoire_base) & "/gifs"
On Error Goto errFich0
MkDir (Adresse_export)
end if
Adresse_export = convertToURL(Repertoire_base) & "/gifs"
nettoyage_repertoire(Adresse_export & "/") 'nettoie anciens fichiers le cas
échéant
commande_convertisseur = commande_convertisseur & Repertoire_base & "/gifs"
' choix du fichier
info_user = "Le fichier par défaut est: " & Fichier_import & chr(13) & "Voulez
vous en changer?"
if MsgBox(info_user,36,"Nom de la présentation d origine")=6 then '4+32 cf. page
126
Fichier_import = InputBox("Donner le nom de votre fichier y compris l'extension
(sxi ou ppt): ")
On Error Goto errFich1
end if
AdresseDoc = convertToURL(Repertoire_base) & "/" & Fichier_import 'p.156
MonDocument = StarDesktop.LoadComponentFromURL(AdresseDoc,"_blank",0, PropFich)
'************* SELECTION SUCCESSIVE DE TOUTES LES DIAPOS (PAGES) DE LA
PRESENTATION
On Error Goto errFich2
lesPages = MonDocument.Drawpages
' Récupération du rangs des diapos
avance = monDocument.CurrentController.StatusIndicator
avance.start( "Traitement des diapos en cours ...", lesPages.Count ) 'Affichage
en bas de la fenêtre cf. p.598
wait 80
max_diapo = lesPages.Count
Redim commande_convertisseur_ligne(max_diapo) As String 'Redimmensionne le
tableau en fonction du nombre de diapo p.72
For i= 0 to max_diapo-1
commande_convertisseur_ligne(i)=" " 'Initialisation du tableau
avance.Text = "Traitement de la diapo " & i+1 & "/" & max_diapo
UnePage = lesPages(i)
rang_page=UnePage.Number 'i ne correspond pas à la place des diapos si le
créateur du diaporama à déplacer l'ordre des diapos
nb_image = 0
'************* SELECTION DES OBJETS DE LA DIAPO ET EXPORT DES IMAGES DANS LE
DOSSIER "GIFS"
For j = 0 to UnePage.Count-1
avance.value = j 'indice de progression dans le traitement de la diapo: cf.
p.598
MonObjet = UnePage(j)
' Pour exportation des images uniquement
If MonObjet.supportsService("com.sun.star.drawing.GraphicObjectShape") then
selection = 0
' On ne conserve que les images ayant une taille > Taille_image*Taille_image
pixels
On Error Goto errTrait1
donne_size(MonObjet,selection)
If selection = 1 then
nb_image = nb_image + 1
On Error Goto errFich2
Adresse_export = convertToURL(Repertoire_base) & "/" & "gifs"
Fichier_export = "diapo" & rang_page & "objet" & nb_image & ".gif"
'Print "Export du fichier ", Fichier_export," dans le répertoire:
",Adresse_export
Adresse_export = Adresse_export & "/" & Fichier_export
serv.setSourceDocument(MonObjet)
params(0).Name = "URL"
params(1).Name = "MediaType"
params(0).Value = Adresse_export
params(1).Value = "image/gif"
serv.filter(params())
Endif
EndIf
Next j
commande_convertisseur_ligne (i) = commande_convertisseur &_
"/diapo" & rang_page & "objet*.gif " & Repertoire_base & "/img" & rang_page
&".gif"
'print commande_convertisseur_ligne (i)
Next i
avance.end
'************* CREATION DES ANIMATIONS VIA IMAGEMAGICK On Error Goto errConv lancement_convertisseur(commande_convertisseur_ligne (), max_diapo)
info_user = "La dernière étape commence: création des animations" & chr(13) & _ "Traitement de " & max_diapo & "diapos" & chr(13) & _ "encore un peu de patience (c'est long mais ça tourne!)" MsgBox(info_user,64)
Shell(Adresse_convert,1)
'************* FERMETURE DU FICHIER IMPRESS D'ORIGINE SANS SAUVEGARDE
info_user = "Le traitement de la présentation est terminée" & chr(13) & _ "l'ensemble des fichiers html sont sur le répertoire: " & Repertoire_base MsgBox(info_user,64) Goto sortie
'************* GESTION DES ERREURS cf. p.143
errFich0:
info_user = "Le répertoire contenant les images n'a pas pu être constitué!" &
chr(13) &_
"Vérifiez la lettre racine, les autorisations d'écriture?..."
MsgBox(info_user,16)
Resume sortie
errFich1:
info_user = "Le fichier " & Fichier_import & " n a pas été trouvé" & chr(13) &_
"dans " & Repertoire_base
MsgBox(info_user,16)
Resume sortie
errFich2:
info_user = "Il y a eu un problème lors de l'extraction des images" & chr(13)
&_
"Traitement = diapo" & rang_page & "objet" & j & chr(13) &_
"Sélection: " & selection & chr(13) &_
"Message d'erreur: " & Error
MsgBox(info_user,16)
Resume sortie
errTrait1:
info_user = "Il y a eu un problème lors de la recherche des dimensions des
images" & chr(13) &_
"Traitement = diapo" & rang_page & "objet" & j & chr(13) &_
"Message d'erreur: " & Error
MsgBox(info_user,16)
Resume sortie
errConv:
info_user = "Il y a eu un problème lors de la création des animations" &
chr(13) &_
"Fichier non présent, droit d'écriture?" & chr(13) &_
"Traitement = diapo" & j+1 & chr(13) &_
"Message d'erreur: " & Error
MsgBox(info_user,16)
Resume sortie
sortie: MonDocument.Dispose End Sub
Sub donne_size(MonObjet as Object,selection as Integer) 'cf p.633 Dim LeBitMap As Object Dim Taille1 As New com.sun.star.awt.Size
LeBitMap = MonObjet.GraphicObjectFillBitmap Taille1 = LeBitMap.Size ' taille en pixels ! if Taille1.Width > Taille_image then if Taille1.Height > Taille_image then selection = 1 endif endif End Sub
Sub lancement_convertisseur(commande_convertisseur_ligne () as String, max_diapo
as Integer)
Dim Fichier_bat As Object, MonTexte As Object, MonCurseur As Object Dim PropFich() Dim Retour As Integer, i as Integer
' 1) On ouvre le fichier de commande qui se trouve dans le répertoire de
ImageMagick
' 2) on efface sont ancien contenu qu'on remplace par les commandes créées en
fonction du nombre de diapos
' 3) on enregistre le fichier (pas de création car problème de droit
administrateur dans ce répertoire
' 4) on lance le fichier bat qui modifient les images (redimensionne sur une
base de 1000 pixels sans déformation
' regroupent l'ensemble des objets diapo1objet*.gif et copie le résultat en
img1.gif dans l'exemple ci-dessous)
' exemple de commande: convert -delay 200 -loop 0 -resize 1000x1000
C:/rep/diapo1objet*.gif C:/rep/img1.gif
Retour = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK 'CF. API
Openoffice(presque) sans peine: OOo_API_intro-06.sxw
Fichier_bat = StarDesktop.LoadComponentFromURL(Adresse_convert,"_blank",0,
PropFich)
MonTexte = Fichier_bat.Text
MonTexte.String = "" 'RAZ du fichier
MonCurseur= MonTexte.createTextCursor
For i = 0 to max_diapo-1
MonTexte.insertString(MonCurseur, commande_convertisseur_ligne (i), false)
MonTexte.insertControlCharacter(MonCurseur, Retour, false)
Next i
Fichier_bat.Store
Fichier_bat.Dispose
End Sub
Sub nettoyage_repertoire(Adresse_export as String) 'p.130 Dim unFich As String ' terminer le nom du répertoire avec le séparateur unFich = Dir(Adresse_export & "*", 0) ' chercher tous les fichiers Do While Len(unFich) > 0 unFich = Adresse_export & unFich 'print unFich Kill unFich unFich = Dir ' fichier suivant Loop End Sub
Famille Pansu Tél: 04.90.53.40.75
Logiciels libres: http://www.framasoft.net/ FCPE pays Salonais: http://fcpe13paysalonais.free.fr







